SkMatrix Class Template Reference
[Vector and Matrix]
#include <SkMatrix.h>

Detailed Description
template<class T_>
class OFELI::SkMatrix< T_ >
To handle square matrices in skyline storage format.
This template class allows storing and manipulating a matrix in skyline storage format.
Template Argument :
- T_ data type (double, float, ...)
Public Member Functions | |
| void | Add (size_t i, size_t j, const T_ &x) |
| Add a constant value to an entry ofthe matrix. | |
| void | Assembly (const Side *sd, const DMatrix< T_ > &a) |
| Assembly of side matrix into global matrix. | |
| void | Assembly (const Side *sd, T_ *a) |
| Assembly of side matrix into global matrix. | |
| void | Assembly (const Element *el, const DMatrix< T_ > &a) |
| Assembly of element matrix into global matrix. | |
| void | Assembly (const Element *el, T_ *a) |
| Assembly of element matrix into global matrix. | |
| void | DiagPrescribe (const class Mesh &mesh, Vect< T_ > &b, const Vect< T_ > &u, int flag=0) |
| Impose an essential boundary condition. | |
| int | Factor () |
| Factorize matrix (LU factorization). | |
| int | FactorAndSolve (Vect< T_ > &b) |
| Factorize matrix and solve the linear system. | |
| T_ * | getArray () const |
| Return C-Array. | |
| size_t | getColHeight (size_t i) const |
| Return column height. | |
| virtual size_t | getColInd (size_t i) const |
| Return Column index for column i (See the description for class SpMatrix). | |
| T_ | getDiag (size_t k) const |
| Return k-th diagonal entry of A. | |
| T_ | getEntry (size_t i, size_t j) const |
| Return entry (i,j) of matrix if this one is stored, 0 else. | |
| unsigned long | getLength () const |
| Return number of stored terms in matrix. | |
| size_t | getNbColumns () const |
| Return number of columns. | |
| size_t | getNbRows () const |
| Return number of rows. | |
| void | getPrintView (size_t &rmin, size_t &rmax, size_t &cmin, size_t &cmax) const |
| Return window data for matrix printing. | |
| virtual size_t | getRowPtr (size_t i) const |
| Return Row pointer for row i (See the description for class SpMatrix). | |
| size_t | getSize () const |
| Return matrix dimension (Number of rows and columns). | |
| bool | isDiagonal () const |
| Say if matrix is diagonal or not. | |
| bool | isFactorized () const |
| Say if matrix is factorized or not. | |
| void | Mult (const Vect< T_ > &x, Vect< T_ > &y) const |
| Multiply matrix by vector x and save in y. | |
| void | MultAdd (T_ a, const Vect< T_ > &v, Vect< T_ > &w) const |
| Multiply matrix by a vector and add to another one. | |
| void | MultAdd (const Vect< T_ > &x, Vect< T_ > &y) const |
| Multiply matrix by vector x and add to y. | |
| T_ & | operator() (size_t i, size_t j) |
| Operator () (Non constant version). | |
| T_ | operator() (size_t i, size_t j) const |
| Operator () (Constant version). | |
| const T_ | operator() (size_t i) const |
| Operator () with one argument (Constant version). | |
| SkMatrix< T_ > & | operator*= (const T_ &x) |
| Operator *=. | |
| Matrix & | operator+= (const Matrix< T_ > &m) |
| Operator +=. | |
| SkMatrix< T_ > & | operator+= (const T_ &x) |
| Operator +=. | |
| SkMatrix< T_ > & | operator+= (const SkMatrix< T_ > &m) |
| Operator +=. | |
| Matrix & | operator-= (const T_ &x) |
| Operator -=. | |
| Matrix & | operator-= (const Matrix< T_ > &m) |
| Operator -=. | |
| SkMatrix< T_ > & | operator= (const T_ &x) |
| Operator =. | |
| SkMatrix< T_ > & | operator= (const SkMatrix< T_ > &m) |
| Operator =. | |
| T_ | operator[] (size_t k) const |
| Operator [] (Constant version). | |
| T_ & | operator[] (size_t k) |
| Operator [] (Non constant version). | |
| void | Prescribe (size_t dof, const class Mesh &mesh, 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. | |
| void | Prescribe (const class Mesh &mesh, Vect< T_ > &b, int flag=0) |
| Impose by a penalty method a homegeneous (=0) essential boundary condition. | |
| void | Prescribe (const class Mesh &mesh, Vect< T_ > &b, const Vect< T_ > &u, int flag=0) |
| Impose by a penalty method an essential boundary condition. | |
| void | PrescribeSide (const class Mesh &mesh) |
| Impose by a penalty method an essential boundary condition when DOFs are supported by sides. | |
| void | Set (size_t i, size_t j, const T_ &x) |
| Assign a value to an entry ofthe matrix. | |
| void | setDiag () |
| Store diagonal entries in a separate internal vector. | |
| void | setDiagonal (const class Mesh &mesh) |
| Initialize matrix storage in the case where only diagonal terms are stored. | |
| void | setDOF (size_t i) |
| Choose DOF to activate. | |
| virtual void | setMesh (const class Mesh &mesh, size_t dof=0, size_t type=0) |
| Determine mesh graph and initialize matrix. | |
| void | setPenal (double p) |
| Set Penalty Parameter (For boundary condition prescription). | |
| void | setPrintView (size_t rmin, size_t rmax, size_t cmin, size_t cmax) |
| set a window for matrix printing | |
| void | setSkyline (const class Mesh &mesh) |
| Determine matrix structure. | |
| SkMatrix (const SkMatrix< T_ > &m) | |
| Copy Constructor. | |
| SkMatrix (const Vect< size_t > &ColHt) | |
| Constructor that initializes skyline structure of matrix using vector of column heights. | |
| SkMatrix (size_t size) | |
| Constructor that initializes current instance as a dense matrix. | |
| SkMatrix (const class Mesh &mesh, size_t dof=0) | |
| Constructor using mesh to initialize skyline structure of matrix. | |
| SkMatrix () | |
| Default constructor. Initializes a zero-dimension matrix. | |
| int | Solve (const Vect< T_ > &b, Vect< T_ > &x) |
| Solve system with factorized matrix (forward and back substitution). | |
| int | Solve (Vect< T_ > &b) |
| Solve system with factorized matrix (forward and back substitution). | |
| void | TMult (const Vect< T_ > &x, Vect< T_ > &y) const |
| Multiply transpose of matrix by vector x and save in y. | |
| void | TMultAdd (const Vect< T_ > &x, Vect< T_ > &y) const |
| Multiply transpose of matrix by vector x and add to y. | |
| ~SkMatrix () | |
| Destructor. | |
Constructor & Destructor Documentation
Constructor using mesh to initialize skyline structure of matrix.
- Parameters:
-
[in] mesh Mesh instance for which matrix graph is determined. [in] dof Option parameter, with default value 0 dof=1 means that only one degree of freedom for each node (or element or side) is taken to determine matrix structure. The value dof=0 means that matrix structure is determined using all DOFs. Matrix entries are set to 0.
References SkMatrix::setMesh().
| SkMatrix | ( | size_t | size | ) |
Constructor that initializes current instance as a dense matrix.
Normally, for a dense matrix this is not the right class.
- Parameters:
-
[in] size Number of matrix rows (and columns). Matrix entries are set to 0.
References OFELI::Clear().
Constructor that initializes skyline structure of matrix using vector of column heights.
- Parameters:
-
[in] ColHt Vect instance that contains rows lengths of matrix. Matrix entries are set to 0.
References OFELI::Clear().
Member Function Documentation
| void Add | ( | size_t | i, | |
| size_t | j, | |||
| const T_ & | x | |||
| ) | [virtual] |
Add a constant value to an entry ofthe matrix.
- Parameters:
-
[in] i Row index [in] j Column index [in] x Constant value to add to a(i,j)
Implements Matrix.
Referenced by OFELI::Assembly(), and OFELI::SideAssembly().
Assembly of side matrix into global matrix.
Case where side matrix is given by a DMatrix instance.
References Matrix::Add(), Node::getDOF(), Node::getNbDOF(), Side::getNbNodes(), and Side::getPtrNode().
| void Assembly | ( | const Side * | sd, | |
| T_ * | a | |||
| ) | [inherited] |
Assembly of side matrix into global matrix.
Case where side matrix is given by a C-array.
- Parameters:
-
[in] sd Pointer to side instance [in] a Side matrix as a C-array instance
References Matrix::Add(), Node::getDOF(), Node::getNbDOF(), Side::getNbNodes(), and Side::getPtrNode().
Assembly of element matrix into global matrix.
Case where element matrix is given by a DMatrix instance.
References Matrix::Add(), Node::getDOF(), Node::getNbDOF(), Element::getNbNodes(), and Element::getPtrNode().
| void Assembly | ( | const Element * | el, | |
| T_ * | a | |||
| ) | [inherited] |
Assembly of element matrix into global matrix.
Case where element matrix is given by a C-array.
- Parameters:
-
[in] el Pointer to element instance [in] a Element matrix as a C-array
References Matrix::Add(), Node::getDOF(), Node::getNbDOF(), Element::getNbNodes(), and Element::getPtrNode().
Impose an 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. It can be modified by member function setPenal(..).
- Parameters:
-
[in] mesh Mesh instance from which information is extracted. [in] 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).
References Node::getCode(), Node::getDOF(), Node::getNbDOF(), Mesh::getNode(), and Mesh::topNode().
| int Factor | ( | ) | [virtual] |
Factorize matrix (LU factorization).
- Return values:
-
ret 0 if factorization was normally performed,
n if the n-th pivot is null.
Implements Matrix.
References OFELI::Abs(), and OFELI_TOLERANCE.
| int FactorAndSolve | ( | Vect< T_ > & | b | ) | [inherited] |
Factorize matrix and solve the linear system.
This is available only if the storage class enables it.
References Matrix::Factor(), and Matrix::Solve().
| T_* getArray | ( | ) | const |
Return C-Array.
Skyline of matrix is stored row by row.
| size_t getColHeight | ( | size_t | i | ) | const |
Return column height.
Column height at entry i is returned.
| T_ getDiag | ( | size_t | k | ) | const [inherited] |
Return k-th diagonal entry of A.
First entry is given by GetDiag(1).
| void getPrintView | ( | size_t & | rmin, | |
| size_t & | rmax, | |||
| size_t & | cmin, | |||
| size_t & | cmax | |||
| ) | const [inherited] |
Return window data for matrix printing.
- Parameters:
-
[out] rmin first row index to view [out] rmax last row index to view [out] cmin first column index to view [out] cmax last column index to view
Referenced by OFELI::operator<<().
| bool isFactorized | ( | ) | const [inherited] |
Say if matrix is factorized or not.
If the matrix was not factorized, the class does not allow solving by a direct solver.
Multiply matrix by vector x and save in y.
- Parameters:
-
[in] x Vector to multiply by matrix [out] y Vector that contains on output the result.
Implements Matrix.
References OFELI::Clear(), and SkMatrix::MultAdd().
Multiply matrix by a vector and add to another one.
- Parameters:
-
[in] a Constant to multiply by matrix [in] v Vector to multiply by matrix [in,out] w Vector to add to the result. y contains on output the result.
Implements Matrix.
Multiply matrix by vector x and add to y.
- Parameters:
-
[in] x Vector to multiply by matrix [in,out] y Vector to add to the result. y contains on output the result.
Implements Matrix.
Referenced by SkMatrix::Mult().
| T_ & operator() | ( | size_t | i, | |
| size_t | j | |||
| ) | [virtual] |
Operator () (Non constant version).
- Parameters:
-
[in] i Row index [in] j Column index
Implements Matrix.
| T_ operator() | ( | size_t | i, | |
| size_t | j | |||
| ) | const [virtual] |
| const T_ operator() | ( | size_t | i | ) | const [virtual] |
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.
Implements Matrix.
| SkMatrix< T_ > & operator*= | ( | const T_ & | x | ) |
Operator +=.
Add matrix m to current matrix instance.
| SkMatrix< T_ > & operator+= | ( | const T_ & | x | ) |
Operator +=.
Add matrix m to current matrix instance.
| Matrix< T_ > & operator-= | ( | const T_ & | x | ) | [inherited] |
Operator -=.
Subtract constant value x from all matrix entries.
Reimplemented in DMatrix, and DMatrix< double >.
Operator -=.
Subtract matrix m from current matrix instance.
| SkMatrix< T_ > & operator= | ( | const T_ & | x | ) |
Operator =.
Copy matrix m to current matrix instance.
| T_ operator[] | ( | size_t | k | ) | const [inherited] |
Operator [] (Constant version).
Returns k-th stored element in matrix Index k starts at 0.
Reimplemented in SpMatrix, and SpMatrix< double >.
| T_& operator[] | ( | size_t | k | ) | [inherited] |
Operator [] (Non constant version).
Returns k-th stored element in matrix Index k starts at 0.
| void Prescribe | ( | size_t | dof, | |
| const class Mesh & | mesh, | |||
| Vect< T_ > & | b, | |||
| const Vect< T_ > & | u, | |||
| int | flag = 0 | |||
| ) | [inherited] |
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.
- Parameters:
-
[in] dof Label of the concerned degree of freedom (DOF). [in] mesh Mesh instance from which information is extracted. [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).
References Node::getCode(), Matrix::getEntry(), Node::getLabel(), Mesh::getNode(), Matrix::Set(), and Mesh::topNode().
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(..).
- Parameters:
-
[in] mesh Mesh instance from which information is extracted. [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).
References Node::getCode(), Node::getDOF(), Matrix::getEntry(), Node::getNbDOF(), Mesh::getNode(), Matrix::Set(), and Mesh::topNode().
| void Prescribe | ( | const class Mesh & | mesh, | |
| Vect< T_ > & | b, | |||
| const Vect< T_ > & | u, | |||
| int | flag = 0 | |||
| ) | [inherited] |
Impose by a penalty method an 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(..).
- Parameters:
-
[in] mesh Mesh instance from which information is extracted. [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).
References Node::getCode(), Node::getDOF(), Matrix::getEntry(), Node::getNbDOF(), Mesh::getNode(), Matrix::Set(), and Mesh::topNode().
| void PrescribeSide | ( | const class Mesh & | mesh | ) | [inherited] |
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(..).
- Parameters:
-
[in] mesh Mesh instance from which information is extracted.
References Side::getCode(), Side::getDOF(), Matrix::getEntry(), Side::getNbDOF(), Mesh::getSide(), Matrix::Set(), and Mesh::topSide().
| void Set | ( | size_t | i, | |
| size_t | j, | |||
| const T_ & | x | |||
| ) | [virtual] |
Assign a value to an entry ofthe matrix.
- Parameters:
-
[in] i Row index [in] j Column index [in] x Value to assign to entry a(i,j)
Implements Matrix.
| void setDiagonal | ( | const class Mesh & | mesh | ) | [inherited] |
Initialize matrix storage in the case where only diagonal terms are stored.
This member function is to be used for explicit time integration schemes
References OFELI::Clear(), and Mesh::getNbEq().
| void setDOF | ( | size_t | i | ) |
Choose DOF to activate.
This function is available only if variable dof is equal to 1 in the constructor
| void setMesh | ( | const class Mesh & | mesh, | |
| size_t | dof = 0, |
|||
| size_t | type = 0 | |||
| ) | [virtual] |
Determine mesh graph and initialize matrix.
This member function is called by constructor with the same arguments
- Parameters:
-
[in] mesh Mesh instance for which matrix graph is determined. [in] dof Option parameter, with default value 0.
dof=1 means that only one degree of freedom for each node (or element or side) is taken to determine matrix structure. The value dof=0 means that matrix structure is determined using all DOFs.[in] type Unused Matrix entries are set to 0.
References OFELI::Clear().
Referenced by SkMatrix::SkMatrix().
| void setPrintView | ( | size_t | rmin, | |
| size_t | rmax, | |||
| size_t | cmin, | |||
| size_t | cmax | |||
| ) | [inherited] |
set a window for matrix printing
- Parameters:
-
[in] rmin first row index to view [in] rmax last row index to view [in] cmin first column index to view [in] cmax last column index to view
Reimplemented in DMatrix, DSMatrix, and DMatrix< double >.
| void setSkyline | ( | const class Mesh & | mesh | ) |
Determine matrix structure.
This member function calculates matrix structure using a Mesh instance.
- Parameters:
-
[in] mesh Mesh instance
References OFELI::Clear(), Mesh::ElementsAreDOF(), Mesh::getNbEq(), Mesh::getNbNodes(), Mesh::getNbSides(), Mesh::NodesAreDOF(), and Mesh::SidesAreDOF().
Solve system with factorized matrix (forward and back substitution).
- Parameters:
-
[in] b Vect instance that contains right-hand side [out] x Vect instance that contains solution
- Return values:
-
ret = 0 if solution was normally performed, n if the n-th pivot is null. Solution is performed only is factorization has previouly been invoked.
Reimplemented from Matrix.
References SkMatrix::Solve().
| int Solve | ( | Vect< T_ > & | b | ) | [virtual] |
Solve system with factorized matrix (forward and back substitution).
- Parameters:
-
[in,out] b Vect instance that contains right-hand side on input and solution on output.
- Return values:
-
ret 0 if solution was normally performed,
n if the n-th pivot is null. Solution is performed only is factorization has previouly been invoked.
Implements Matrix.
References OFELI::Abs(), and OFELI_TOLERANCE.
Referenced by SkMatrix::Solve().
Multiply transpose of matrix by vector x and save in y.
- Parameters:
-
[in] x Vector to multiply by matrix [out] y Vector that contains on output the result.
Implements Matrix.
References OFELI::Clear(), and SkMatrix::TMultAdd().
Multiply transpose of matrix by vector x and add to y.
- Parameters:
-
[in] x Vector to multiply by matrix [in,out] y Vector to add to the result. y contains on output the result.
Referenced by SkMatrix::TMult().