To handle square matrices in skyline storage format. More...
Public Member Functions  
SkMatrix ()  
Default constructor. More...  
SkMatrix (size_t size, int is_diagonal=false)  
Constructor that initializes a dense symmetric matrix. More...  
SkMatrix (Mesh &mesh, size_t dof=0, int is_diagonal=false)  
Constructor using mesh to initialize skyline structure of matrix. More...  
SkMatrix (const Vect< size_t > &ColHt)  
Constructor that initializes skyline structure of matrix using vector of column heights. More...  
SkMatrix (const SkMatrix< T_ > &m)  
Copy Constructor.  
~SkMatrix ()  
Destructor.  
void  setMesh (Mesh &mesh, size_t dof=0) 
Determine mesh graph and initialize matrix. More...  
void  setSkyline (Mesh &mesh) 
Determine matrix structure. More...  
void  setDiag () 
Store diagonal entries in a separate internal vector.  
void  setDOF (size_t i) 
Choose DOF to activate. More...  
void  set (size_t i, size_t j, const T_ &val) 
Assign a value to an entry ofthe matrix. More...  
void  Axpy (T_ a, const SkMatrix< 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  MultAdd (const Vect< T_ > &x, Vect< T_ > &y) const 
Multiply matrix by vector x and add to y . More...  
void  TMultAdd (const Vect< T_ > &x, Vect< T_ > &y) const 
Multiply transpose of matrix by vector x and add to y . More...  
void  MultAdd (T_ a, const Vect< T_ > &x, Vect< T_ > &y) const 
Multiply matrix by a vector and add to another one. More...  
void  Mult (const Vect< T_ > &x, Vect< T_ > &y) const 
Multiply matrix by vector x and save in 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  add (size_t i, size_t j, const T_ &val) 
Add a constant value to an entry ofthe matrix. More...  
size_t  getColHeight (size_t i) const 
Return column height. More...  
T_  operator() (size_t i, size_t j) const 
Operator () (Constant version). More...  
T_ &  operator() (size_t i, size_t j) 
Operator () (Non constant version). More...  
void  DiagPrescribe (Mesh &mesh, Vect< T_ > &b, const Vect< T_ > &u, int flag=0) 
Impose an essential boundary condition. More...  
void  DiagPrescribe (Vect< T_ > &b, const Vect< T_ > &u, int flag=0) 
Impose an essential boundary condition using the Mesh instance provided by the constructor. More...  
SkMatrix< T_ > &  operator= (const SkMatrix< T_ > &m) 
Operator =. More...  
SkMatrix< T_ > &  operator= (const T_ &x) 
Operator =. More...  
SkMatrix< T_ > &  operator+= (const SkMatrix< T_ > &m) 
Operator +=. More...  
SkMatrix< T_ > &  operator+= (const T_ &x) 
Operator +=. More...  
SkMatrix< T_ > &  operator*= (const T_ &x) 
Operator *=. More...  
int  setLU () 
Factorize the matrix (LU factorization) More...  
int  solve (Vect< T_ > &b) 
Solve linear system. More...  
int  solve (const Vect< T_ > &b, Vect< T_ > &x) 
Solve linear system. More...  
T_ *  get () const 
Return CArray. More...  
T_  get (size_t i, size_t j) const 
Return entry (i,j) of matrix if this one is stored, 0 else.  
size_t  getNbRows () const 
Return number of rows.  
size_t  getNbColumns () const 
Return number of columns.  
void  setPenal (real_t p) 
Set Penalty Parameter (For boundary condition prescription).  
void  setDiagonal () 
Set the matrix as diagonal.  
void  setDiagonal (Mesh &mesh) 
Initialize matrix storage in the case where only diagonal terms are stored. More...  
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  Assembly (const Element &el, T_ *a) 
Assembly of element matrix into global matrix. More...  
void  Assembly (const Element &el, const DMatrix< 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  Assembly (const Side &sd, const DMatrix< 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.  
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).  
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+= (const Matrix< T_ > &m) 
Operator +=. More...  
Matrix &  operator= (const Matrix< T_ > &m) 
Operator =. More...  
Matrix &  operator= (const T_ &x) 
Operator =. More...  
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.
The matrix entries are stored in 2 vectors column by column as in the following example:
/ \ / \  l0 .   u0 u1 0 0 u7   l1 l2 .   u2 u3 0 u8   0 l3 l4 .   ... u4 u5 u9   0 0 l5 l6   u6 u10   l7 l8 l9 l10 l11   u11  \ / \ /
 Template Parameters

T_ Data type (double, float, complex<double>, ...)
Constructor & Destructor Documentation
SkMatrix  (  ) 
Default constructor.
Initializes a zerodimension matrix
SkMatrix  (  size_t  size, 
int  is_diagonal = false 

) 
Constructor that initializes a dense symmetric matrix.
Normally, for a dense matrix this is not the right class.
 Parameters

[in] size Number of matrix rows (and columns). [in] is_diagonal Boolean to select if the matrix is diagonal or not [Default: false]
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 valuedof=0
means that matrix structure is determined using all DOFs.[in] is_diagonal Boolean argument to say is the matrix is actually a diagonal matrix or not.
Constructor that initializes skyline structure of matrix using vector of column heights.
 Parameters

[in] ColHt Vect instance that contains rows lengths of matrix.
Member Function Documentation
void setMesh  (  Mesh &  mesh, 
size_t  dof = 0 

) 
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 valuedof=0
means that matrix structure is determined using all DOFs.
void setSkyline  (  Mesh &  mesh  ) 
void setDOF  (  size_t  i  ) 
Choose DOF to activate.
This function is available only if variable dof
is equal to 1 in the constructor
 Parameters

[in] i Index of the DOF

virtual 
Assign a value to an entry ofthe matrix.
 Parameters

[in] i Row index (starting at i=1
)[in] j Column index (starting at i=1
)[in] val Value to assign to entry a(i,j)
Implements Matrix< T_ >.
void Axpy  (  T_  a, 
const SkMatrix< T_ > &  m  
) 
Add to matrix the product of a matrix by a scalar.
 Parameters

[in] a Scalar to premultiply [in] m Matrix by which a
is multiplied. The result is added to current instance

virtual 
Add to matrix the product of a matrix by a scalar.
 Parameters

[in] a Scalar to premultiply [in] m Matrix by which a
is multiplied. The result is added to current instance
Implements Matrix< T_ >.
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< T_ >.
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.
Multiply matrix by a vector and add to another one.
 Parameters

[in] a Constant to multiply by matrix [in] x Vector to multiply by matrix [in,out] y Vector to add to the result. y
contains on output the result.
Implements Matrix< T_ >.
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< T_ >.
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< T_ >.

virtual 
Add a constant value to an entry ofthe matrix.
 Parameters

[in] i Row index [in] j Column index [in] val Constant value to add to a(i,j)
Implements Matrix< T_ >.
size_t getColHeight  (  size_t  i  )  const 
Return column height.
Column height at entry i
is returned.

virtual 
Operator () (Constant version).
 Parameters

[in] i Row index [in] j Column index
Implements Matrix< T_ >.

virtual 
Operator () (Non constant version).
 Parameters

[in] i Row index [in] j Column index
Implements Matrix< T_ >.
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 righthand 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 righthand side is to be modified ( dof>0
)
or both matrix and righthand side (dof=0
, default value).
Impose 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. It can be modified by member function setPenal(..).
Operator =.
Copy matrix m
to current matrix instance.
SkMatrix<T_>& operator=  (  const T_ &  x  ) 
Operator =.
define the matrix as a diagonal one with all diagonal entries equal to x
.
Operator +=.
Add matrix m
to current matrix instance.
SkMatrix<T_>& operator+=  (  const T_ &  x  ) 
Operator +=.
Add constant value x
to matrix entries.
SkMatrix<T_>& operator*=  (  const T_ &  x  ) 
Operator *=.
Premultiply matrix entries by constant value x
.
int setLU  (  ) 
Factorize the matrix (LU factorization)
LU factorization of the matrix is realized. Note that since this is an in place factorization, the contents of the matrix are modified.
 Returns

0
if factorization was normally performed, 
n
if then
th pivot is null.

 Remarks
 A flag in this class indicates after factorization that this one has been realized, so that, if the member function solve is called after this no further factorization is done.

virtual 
Solve linear system.
The linear system having the current instance as a matrix is solved by using the LU decomposition. Solution is thus realized after a factorization step and a forward/backward substitution step. The factorization step is realized only if this was not already done.
Note that this function modifies the matrix contents is a factorization is performed. Naturally, if the the matrix has been modified after using this function, the user has to refactorize it using the function setLU. This is because the class has no nonexpensive way to detect if the matrix has been modified. The function setLU realizes the factorization step only.
 Parameters

[in,out] b Vect instance that contains righthand side on input and solution on output.
 Returns

0
if solution was normally performed, 
n
if then
th pivot is null.

Implements Matrix< T_ >.
Solve linear system.
The linear system having the current instance as a matrix is solved by using the LU decomposition. Solution is thus realized after a factorization step and a forward/backward substitution step. The factorization step is realized only if this was not already done.
Note that this function modifies the matrix contents is a factorization is performed. Naturally, if the the matrix has been modified after using this function, the user has to refactorize it using the function setLU. This is because the class has no nonexpensive way to detect if the matrix has been modified. The function setLU realizes the factorization step only.
 Parameters

[in] b Vect instance that contains righthand side. [out] x Vect instance that contains solution
 Returns

0
if solution was normally performed, 
n
if then
th pivot is null.

T_* get  (  )  const 
Return CArray.
Skyline of matrix is stored row by row.

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

inherited 
Return k
th diagonal entry of matrix.
First entry is given by getDiag(1).

inherited 
Assembly of element matrix into global matrix.
Case where element matrix is given by a Carray.
 Parameters

[in] el Pointer to element instance [in] a Element matrix as a Carray

inherited 
Assembly of side matrix into global matrix.
Case where side matrix is given by a Carray.
 Parameters

[in] sd Pointer to side instance [in] a Side matrix as a Carray instance
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(..).
 Parameters

[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 righthand 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 righthand side is to be modified
(dof>0
) or both matrix and righthand side (dof=0
, default value).

inherited 
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,out] b Vect instance that contains righthand side. [in] flag Parameter to determine whether only the righthand side is to be modified ( dof>0
)
or both matrix and righthand 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.
 Parameters

[in] dof Label of the concerned degree of freedom (DOF). [in,out] b Vect instance that contains righthand 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 righthand side is to be modified ( dof>0
)
or both matrix and righthand side (dof=0
, default value).

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(..).

inherited 
Factorize matrix and solve the linear system.
This is available only if the storage cass enables it.
 Parameters

[in,out] b Vect instance that contains righthand side on input and solution on output

inherited 
Say if matrix is factorized or not.
If the matrix was not factorized, the class does not allow solving by a direct solver.

inherited 
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.
 Parameters

[in] i entry index

inherited 
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.
 Parameters

[in] i entry index

inherited 
Operator [] (Non constant version).
Returns k
th stored element in matrix Index k
starts at 0
.

inherited 
Operator [] (Constant version).
Returns k
th stored element in matrix Index k
starts at 0
.
Operator +=.
Add matrix m
to current matrix instance.
Operator =.
Subtract matrix m
from current matrix instance.

inherited 
Operator =.
Subtract constant value x
from all matrix entries.