Virtual class to handle matrices for all storage formats. More...
Public Member Functions | |
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). | |
virtual void | MultAdd (const Vect< T_ > &x, Vect< T_ > &y) const =0 |
Multiply matrix by vector x and add to y | |
virtual void | MultAdd (T_ a, const Vect< T_ > &x, Vect< T_ > &y) const =0 |
Multiply matrix by vector a*x and add to y | |
virtual void | Mult (const Vect< T_ > &x, Vect< T_ > &y) const =0 |
Multiply matrix by vector x and save in y | |
virtual void | TMult (const Vect< T_ > &v, Vect< T_ > &w) const =0 |
Multiply transpose of matrix by vector x and save in y | |
virtual void | Axpy (T_ a, const Matrix< T_ > *x)=0 |
Add to matrix the product of a matrix by a scalar. More... | |
void | setDiagonal (Mesh &mesh) |
Initialize matrix storage in the case where only diagonal terms are stored. More... | |
virtual void | clear () |
brief Set all matrix entries to zero | |
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 void | add (size_t i, size_t j, const T_ &val)=0 |
Add val to entry (i,j) . | |
virtual void | add (size_t i, const T_ &val)=0 |
Add val to entry i . | |
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... | |
virtual int | solve (const Vect< T_ > &b, Vect< T_ > &x, 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... | |
virtual size_t | getColInd (size_t i) const |
Return Column index for column i (See the description for class SpMatrix). | |
virtual size_t | getRowPtr (size_t i) const |
Return Row pointer for row i (See the description for class SpMatrix). | |
virtual void | set (size_t i, size_t j, const T_ &val)=0 |
Assign a value to an entry of the matrix. More... | |
virtual T_ | at (size_t i, size_t j)=0 |
Return a value of a matrix entry. More... | |
virtual T_ & | operator() (size_t i, size_t j)=0 |
Operator () (Non constant version). More... | |
virtual T_ | operator() (size_t i, size_t j) const =0 |
Operator () (Non constant version). 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... | |
virtual T_ | get (size_t i, size_t j) const =0 |
Return entry (i,j) of matrix if this one is stored, 0 else. | |
Virtual class to handle matrices for all storage formats.
This class enables storing and manipulating dense matrices. The template parameter is the type of matrix entries. Any matrix entry can be accessed by the () operator: For instance, if A
is an instance of this class, A(i,j)
stands for the entry at the i-th row and j-th column, i
and j
starting from 1. Entries of A
can be assigned a value by the same operator.
<T_> | Data type (real_t, float, complex<real_t>, ...) |
Matrix | ( | ) |
Default constructor.
Initializes a zero-size matrix.
void Assembly | ( | const Element & | el, |
T_ * | a | ||
) |
Assembly of element matrix into global matrix.
Case where element matrix is given by a C-array.
[in] | el | Pointer to element instance |
[in] | a | Element matrix as a C-array |
void Assembly | ( | const Side & | sd, |
T_ * | a | ||
) |
Assembly of side matrix into global matrix.
Case where side matrix is given by a C-array.
[in] | sd | Pointer to side instance |
[in] | a | Side matrix as a C-array instance |
|
pure virtual |
Return a value of a matrix entry.
[in] | i | Row index (starts at 1) |
[in] | j | Column index (starts at 1) |
Implemented in SpMatrix< T_ >, SpMatrix< real_t >, DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, DSMatrix< T_ >, DSMatrix< real_t >, TrMatrix< T_ >, BMatrix< T_ >, and BMatrix< real_t >.
|
pure virtual |
Add to matrix the product of a matrix by a scalar.
[in] | a | Scalar to premultiply |
[in] | x | Matrix by which a is multiplied. The result is added to current instance |
Implemented in SpMatrix< T_ >, SpMatrix< real_t >, DSMatrix< T_ >, DSMatrix< real_t >, DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, TrMatrix< T_ >, BMatrix< T_ >, and BMatrix< real_t >.
int FactorAndSolve | ( | Vect< T_ > & | b | ) |
Factorize matrix and solve the linear system.
This is available only if the storage cass enables it.
[in,out] | b | Vect instance that contains right-hand side on input and solution on output |
T_ getDiag | ( | size_t | k | ) | const |
Return k
-th diagonal entry of matrix.
First entry is given by getDiag(1).
int isFactorized | ( | ) | const |
Say if matrix is factorized or not.
If the matrix was not factorized, the class does not allow solving by a direct solver.
|
pure virtual |
Operator () (Non constant version).
Returns the (i,j)
entry of the matrix.
[in] | i | Row index |
[in] | j | Column index |
Implemented in SpMatrix< T_ >, SpMatrix< real_t >, DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, DSMatrix< T_ >, DSMatrix< real_t >, TrMatrix< T_ >, BMatrix< T_ >, and BMatrix< real_t >.
|
pure virtual |
Operator () (Non constant version).
Returns the (i,j)
entry of the matrix.
[in] | i | Row index |
[in] | j | Column index |
Implemented in SpMatrix< T_ >, SpMatrix< real_t >, DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, DSMatrix< T_ >, DSMatrix< real_t >, TrMatrix< T_ >, BMatrix< T_ >, and BMatrix< real_t >.
T_ operator() | ( | size_t | i | ) | const |
Operator () with one argument (Constant version).
Returns i
-th position in the array storing matrix entries. The first entry is at location 1. Entries are stored row by row.
[in] | i | entry index |
T_& operator() | ( | size_t | i | ) |
Operator () with one argument (Non Constant version).
Returns i
-th position in the array storing matrix entries. The first entry is at location 1. Entries are stored row by row.
[in] | i | entry index |
Matrix& operator*= | ( | const T_ & | x | ) |
Operator *=.
Premultiply matrix entries by constant value x
Matrix& operator+= | ( | const T_ & | x | ) |
Operator +=.
Add constant value x
to all matrix entries.
Operator -=.
Subtract matrix m
from current matrix instance.
Matrix& operator-= | ( | const T_ & | x | ) |
Operator -=.
Subtract constant value x
from all matrix entries.
Matrix& operator= | ( | const T_ & | x | ) |
Operator =.
Assign constant value x
to all matrix entries.
T_& operator[] | ( | size_t | k | ) |
Operator [] (Non constant version).
Returns k
-th stored element in matrix Index k
starts at 0
.
T_ operator[] | ( | size_t | k | ) | const |
Operator [] (Constant version).
Returns k
-th stored element in matrix Index k
starts at 0
.
Impose by a penalty method an essential boundary condition, using the Mesh instance provided by the constructor.
This member function modifies diagonal terms in matrix and terms in vector that correspond to degrees of freedom with nonzero code in order to impose a boundary condition. The penalty parameter is defined by default equal to 1.e20. It can be modified by member function setPenal(..).
Impose by a penalty method an essential boundary condition to a given degree of freedom for a given code.
This member function modifies diagonal terms in matrix and terms in vector that correspond to degrees of freedom with nonzero code in order to impose a boundary condition. The penalty parameter is defined by default equal to 1.e20. It can be modified by member function setPenal(..).
[in] | dof | Degree of freedom for which a boundary condition is to be enforced |
[in] | code | Code for which a boundary condition is to be enforced |
[in,out] | b | Vect instance that contains right-hand side. |
[in] | u | Vect instance that contains imposed valued at DOFs where they are to be imposed. |
[in] | flag | Parameter to determine whether only the right-hand side is to be modified ( dof>0 ) or both matrix and right-hand side (dof=0 , default value). |
void Prescribe | ( | Vect< T_ > & | b, |
int | flag = 0 |
||
) |
Impose by a penalty method a homegeneous (=0) essential boundary condition.
This member function modifies diagonal terms in matrix and terms in vector that correspond to degrees of freedom with nonzero code in order to impose a boundary condition. The penalty parameter is defined by default equal to 1.e20. It can be modified by member function setPenal(..).
[in,out] | b | Vect instance that contains right-hand side. |
[in] | flag | Parameter to determine whether only the right-hand side is to be modified (dof>0 )or both matrix and right-hand side ( dof=0 , default value). |
Impose by a penalty method an essential boundary condition when only one DOF is treated.
This member function modifies diagonal terms in matrix and terms in vector that correspond to degrees of freedom with nonzero code in order to impose a boundary condition. This gunction is to be used if only one DOF per node is treated in the linear system. The penalty parameter is by default equal to 1.e20. It can be modified by member function setPenal.
[in] | dof | Label of the concerned degree of freedom (DOF). |
[in,out] | b | Vect instance that contains right-hand side. |
[in] | u | Vect instance that conatins imposed valued at DOFs where they are to be imposed. |
[in] | flag | Parameter to determine whether only the right-hand side is to be modified (dof>0 )or both matrix and right-hand side ( dof=0 , default value). |
void PrescribeSide | ( | ) |
Impose by a penalty method an essential boundary condition when DOFs are supported by sides.
This member function modifies diagonal terms in matrix and terms in vector that correspond to degrees of freedom with nonzero code in order to impose a boundary condition. The penalty parameter is defined by default equal to 1.e20. It can be modified by member function setPenal(..).
|
virtual |
Set matrix to 0 and reset factorization parameter.
Reimplemented in DMatrix< T_ >, and DMatrix< real_t >.
|
pure virtual |
Assign a value to an entry of the matrix.
[in] | i | Row index |
[in] | j | Column index |
[in] | val | Value to assign |
Implemented in SpMatrix< T_ >, SpMatrix< real_t >, SkSMatrix< T_ >, DMatrix< T_ >, DMatrix< real_t >, SkMatrix< T_ >, TrMatrix< T_ >, BMatrix< T_ >, BMatrix< real_t >, DSMatrix< T_ >, and DSMatrix< real_t >.
void setDiagonal | ( | Mesh & | mesh | ) |
Initialize matrix storage in the case where only diagonal terms are stored.
This member function is to be used for explicit time integration schemes
|
pure virtual |
Solve the linear system.
If the inherited class is SpMatrix, the function uses an iterative method once this one has been chosen. Otherwise, the method solves the linear system by factorization.
Implemented in DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, DSMatrix< T_ >, DSMatrix< real_t >, BMatrix< T_ >, BMatrix< real_t >, and TrMatrix< T_ >.
Solve the linear system.
If the inherited class is SpMatrix, the function uses an iterative method once this one has been chosen. Otherwise, the method solves the linear system by factorization.
[in] | b | Vect instance that contains right-hand side |
[out] | x | Vect instance that contains solution |
[in] | fact | Set to true if factorization is to be performed, false if not. [Default: true ] |
0
if solution was normally performed n
if the n
-th pivot is nullImplemented in SpMatrix< T_ >, SpMatrix< real_t >, DMatrix< T_ >, DMatrix< real_t >, SkSMatrix< T_ >, SkMatrix< T_ >, DSMatrix< T_ >, DSMatrix< real_t >, BMatrix< T_ >, BMatrix< real_t >, and TrMatrix< T_ >.