To handle matrices in sparse storage format. More...
Public Member Functions | |
SpMatrix () | |
Default constructor. More... | |
SpMatrix (size_t nr, size_t nc) | |
Constructor that initializes current instance as a dense matrix. More... | |
SpMatrix (size_t size, int is_diagonal=false) | |
Constructor that initializes current instance as a dense matrix. More... | |
SpMatrix (Mesh &mesh, size_t dof=0, int is_diagonal=false) | |
Constructor using a Mesh instance. More... | |
SpMatrix (const vector< RC > &I, int opt=1) | |
Constructor for a square matrix using non zero row and column indices. More... | |
SpMatrix (const vector< RC > &I, const Vect< T_ > &a, int opt=1) | |
Constructor for a square matrix using non zero row and column indices. More... | |
SpMatrix (size_t nr, size_t nc, const vector< size_t > &row_ptr, const vector< size_t > &col_ind) | |
Constructor for a rectangle matrix. More... | |
SpMatrix (size_t nr, size_t nc, const vector< size_t > &row_ptr, const vector< size_t > &col_ind, const vector< T_ > &a) | |
Constructor for a rectangle matrix. More... | |
SpMatrix (const vector< size_t > &row_ptr, const vector< size_t > &col_ind) | |
Constructor for a rectangle matrix. More... | |
SpMatrix (const vector< size_t > &row_ptr, const vector< size_t > &col_ind, const vector< T_ > &a) | |
Constructor for a rectangle matrix. More... | |
SpMatrix (const SpMatrix &m) | |
Copy constructor. | |
~SpMatrix () | |
Destructor. | |
void | Identity () |
Define matrix as identity. | |
void | Dense () |
Define matrix as a dense one. | |
void | Diagonal () |
Define matrix as a diagonal one. | |
void | Diagonal (const T_ &a) |
Define matrix as a diagonal one with diagonal entries equal to a | |
void | Laplace1D (size_t n, real_t h) |
Sets the matrix as the one for the Laplace equation in 1-D. More... | |
void | Laplace2D (size_t nx, size_t ny) |
Sets the matrix as the one for the Laplace equation in 2-D. More... | |
void | setMesh (Mesh &mesh, size_t dof=0) |
Determine mesh graph and initialize matrix. More... | |
void | setOneDOF () |
Activate 1-DOF per node option. | |
void | setSides () |
Activate Sides option. | |
void | setDiag () |
Store diagonal entries in a separate internal vector. | |
void | DiagPrescribe (Mesh &mesh, Vect< T_ > &b, const Vect< T_ > &u) |
Impose by a diagonal method an essential boundary condition. More... | |
void | DiagPrescribe (Vect< T_ > &b, const Vect< T_ > &u) |
Impose by a diagonal method an essential boundary condition using the Mesh instance provided by the constructor. More... | |
void | setSize (size_t size) |
Set size of matrix (case where it's a square matrix). More... | |
void | setSize (size_t nr, size_t nc) |
Set size (number of rows) of matrix. More... | |
void | setGraph (const vector< RC > &I, int opt=1) |
Set graph of matrix by giving a vector of its nonzero entries. More... | |
Vect< T_ > | getRow (size_t i) const |
Get i -th row vector. | |
Vect< T_ > | getColumn (size_t j) const |
Get j -th column vector. | |
T_ | at (size_t i, size_t j) |
Return a value of a matrix entry. More... | |
T_ & | operator() (size_t i, size_t j) |
Operator () (Non constant version) More... | |
T_ | operator() (size_t i, size_t j) const |
Operator () (Constant version) More... | |
T_ | operator() (size_t i) const |
Operator () with one argument (Constant version) More... | |
T_ | operator[] (size_t i) const |
Operator [] (Constant version). More... | |
Vect< T_ > | operator* (const Vect< T_ > &x) const |
Operator * to multiply matrix by a vector. More... | |
SpMatrix< T_ > & | operator*= (const T_ &a) |
Operator *= to premultiply matrix by a constant. More... | |
void | getMesh (Mesh &mesh) |
Get mesh instance whose reference will be stored in current instance of SpMatrix. | |
void | Mult (const Vect< T_ > &x, Vect< T_ > &y) const |
Multiply matrix by vector and save in another one. More... | |
void | MultAdd (const Vect< T_ > &x, Vect< T_ > &y) const |
Multiply matrix by vector x and add to y . More... | |
void | MultAdd (T_ a, const Vect< T_ > &x, Vect< T_ > &y) const |
Multiply matrix by vector a*x and add to y . More... | |
void | TMult (const Vect< T_ > &x, Vect< T_ > &y) const |
Multiply transpose of matrix by vector x and save in y . More... | |
void | Axpy (T_ a, const SpMatrix< T_ > &m) |
Add to matrix the product of a matrix by a scalar. More... | |
void | Axpy (T_ a, const Matrix< T_ > *m) |
Add to matrix the product of a matrix by a scalar. More... | |
void | set (size_t i, size_t j, const T_ &val) |
Assign a value to an entry of the matrix. More... | |
void | add (size_t i, size_t j, const T_ &val) |
Add a value to an entry of the matrix. More... | |
void | operator= (const T_ &x) |
Operator =. More... | |
size_t | getColInd (size_t i) const |
Return storage information. More... | |
size_t | getRowPtr (size_t i) const |
Return Row pointer at position i . | |
int | solve (const Vect< T_ > &b, Vect< T_ > &x, bool fact=false) |
Solve the linear system of equations. More... | |
void | setSolver (Iteration solver=CG_SOLVER, Preconditioner prec=DIAG_PREC, int max_it=1000, real_t toler=1.e-8) |
Choose solver and preconditioner for an iterative procedure. More... | |
void | clear () |
brief Set all matrix entries to zero | |
T_ * | get () const |
Return C-Array. More... | |
T_ | get (size_t i, size_t j) const |
Return entry (i,j) of matrix if this one is stored, 0 otherwise. More... | |
void | add (size_t i, const T_ &val) |
Add val to entry i . | |
Public Member Functions inherited from Matrix< T_ > | |
Matrix () | |
Default constructor. More... | |
Matrix (const Matrix< T_ > &m) | |
Copy Constructor. | |
virtual | ~Matrix () |
Destructor. | |
virtual void | reset () |
Set matrix to 0 and reset factorization parameter. More... | |
size_t | getNbRows () const |
Return number of rows. | |
size_t | getNbColumns () const |
Return number of columns. | |
string | getName () const |
Return name of matrix. | |
MatrixSize | getMatrixSize () const |
Return storage type. | |
void | setPenal (real_t p) |
Set Penalty Parameter (For boundary condition prescription). | |
void | setDiagonal () |
Set the matrix as diagonal. | |
T_ | getDiag (size_t k) const |
Return k -th diagonal entry of matrix. More... | |
size_t | size () const |
Return matrix dimension (Number of rows and columns). | |
void | setDiagonal (Mesh &mesh) |
Initialize matrix storage in the case where only diagonal terms are stored. More... | |
void | Assembly (const Element &el, T_ *a) |
Assembly of element matrix into global matrix. More... | |
void | Assembly (const Side &sd, T_ *a) |
Assembly of side matrix into global matrix. More... | |
void | Prescribe (Vect< T_ > &b, const Vect< T_ > &u, int flag=0) |
Impose by a penalty method an essential boundary condition, using the Mesh instance provided by the constructor. More... | |
void | Prescribe (int dof, int code, Vect< T_ > &b, const Vect< T_ > &u, int flag=0) |
Impose by a penalty method an essential boundary condition to a given degree of freedom for a given code. More... | |
void | Prescribe (Vect< T_ > &b, int flag=0) |
Impose by a penalty method a homegeneous (=0) essential boundary condition. More... | |
void | Prescribe (size_t dof, Vect< T_ > &b, const Vect< T_ > &u, int flag=0) |
Impose by a penalty method an essential boundary condition when only one DOF is treated. More... | |
void | PrescribeSide () |
Impose by a penalty method an essential boundary condition when DOFs are supported by sides. More... | |
virtual int | Factor ()=0 |
Factorize matrix. Available only if the storage class enables it. | |
virtual int | solve (Vect< T_ > &b, bool fact=true)=0 |
Solve the linear system. More... | |
int | FactorAndSolve (Vect< T_ > &b) |
Factorize matrix and solve the linear system. More... | |
int | FactorAndSolve (const Vect< T_ > &b, Vect< T_ > &x) |
Factorize matrix and solve the linear system. More... | |
size_t | getLength () const |
Return number of stored terms in matrix. | |
int | isDiagonal () const |
Say if matrix is diagonal or not. | |
int | isFactorized () const |
Say if matrix is factorized or not. More... | |
T_ | operator() (size_t i) const |
Operator () with one argument (Constant version). More... | |
T_ & | operator() (size_t i) |
Operator () with one argument (Non Constant version). More... | |
T_ & | operator[] (size_t k) |
Operator [] (Non constant version). More... | |
T_ | operator[] (size_t k) const |
Operator [] (Constant version). More... | |
Matrix & | operator= (Matrix< T_ > &m) |
Operator =. More... | |
Matrix & | operator+= (const Matrix< T_ > &m) |
Operator +=. More... | |
Matrix & | operator-= (const Matrix< T_ > &m) |
Operator -=. More... | |
Matrix & | operator= (const T_ &x) |
Operator =. More... | |
Matrix & | operator*= (const T_ &x) |
Operator *=. More... | |
Matrix & | operator+= (const T_ &x) |
Operator +=. More... | |
Matrix & | operator-= (const T_ &x) |
Operator -=. More... | |
Friends | |
template<class TT_ > | |
ostream & | operator<< (ostream &s, const SpMatrix< TT_ > &A) |
To handle matrices in sparse storage format.
This template class enables storing and manipulating a sparse matrix, i.e. only nonzero terms are stored. Internally, the matrix is stored as a vector instance and uses for the definition of its graph a Vect<size_t>
instance row_ptr and a Vect<size_t> instance col_ind
that contains respectively addresses of first element of each row and column indices.
To illustrate this, consider the matrix
1 2 0 3 4 0 0 5 0
Such a matrix is stored in the vector<real_t> instance {1,2,3,4,5}. The vectors row_ptr
and col_ind
are respectively: {0,2,4,5}
, {1,2,1,2,2}
When the library eigen
is used in conjunction with OFELI
, the class uses the sparse matrix class of eigen
and enables then access to specific solvers (see class LinearSolver)
T_ | Data type (double, float, complex<double>, ...) |