20#include "../Utils_Fill.h"
29 cout <<
"=== Matrix: Example linear banded solver ============\n";
34 const double tol = 1.e-10;
39 const unsigned offdiag = 2;
41 const unsigned N = 511;
42 const double D = 12 * ( 1. / ( N - 1 ) ) * ( 1. / ( N - 1 ) );
54 cout <<
" Using dense matrix solver : " << N <<
"x" << N <<
" system \n";
55 cout <<
" Using the LAPACK LU dense routine\n";
62 catch (
const std::runtime_error &error )
64 cout <<
" \033[1;31;48m * FAILED THROUGH EXCEPTION BEING RAISED \033[0m\n";
68 cout <<
" * Not checking.\n";
70 cout <<
" Comparing the banded matrix solver solution : ";
71 cout << N <<
"x" << 2 * AB.
noffdiag() + 1 <<
" system \n";
73 cout <<
" Using the LAPACK LU banded routine\n";
78 banded_system.
solve();
80 catch (
const std::runtime_error &error )
82 cout <<
" \033[1;31;48m * FAILED THROUGH EXCEPTION BEING RAISED \033[0m\n";
87 if ( std::abs( BB.
two_norm() ) > tol )
90 cout <<
" \033[1;31;48m * Banded solver does not give same result as dense solver \033[0m\n";
94 cout <<
" Banded solver agrees with the dense solver.\n";
103 cout <<
"\033[1;31;48m * FAILED \033[0m\n";
108 cout <<
"\033[1;32;48m * PASSED \033[0m\n";
Specification of the linear system class.
Specification of the linear system class.
A spec for the CppNoddy Timer object.
A spec for a collection of utility functions.
A linear system class for vector right-hand sides.
void solve()
Solve the banded system.
A matrix class that constructs a BANDED matrix.
std::size_t noffdiag() const
Get the number of off-diagonal elements where the total INPUT band width is 2*noffdiag+1 since the ba...
A linear system class for vector right-hand sides.
void solve()
Solve the sparse system.
A matrix class that constructs a DENSE matrix as a row major std::vector of DenseVectors.
An DenseVector class – a dense vector object.
void sub(const DenseVector< _Type > &x)
Subtract a vector, element wise, equivalent to -=.
double two_norm() const
l2-norm.
A collection of OO numerical routines aimed at simple (typical) applied problems in continuum mechani...
void fill_band(CppNoddy::Sequential_Matrix_base< _Type > &A, const int &offset, const _Type &value)
Fill a diagonal band of a matrix.