 An Object Oriented Finite Element Library

TrMatrix< T_ > Class Template Reference

To handle tridiagonal matrices. More...

`#include <TrMatrix.h>` Inheritance diagram for TrMatrix< T_ >:

## Public Member Functions

TrMatrix ()
Default constructor. More...

TrMatrix (size_t size)
Constructor for a tridiagonal matrix with `size` rows.

TrMatrix (const TrMatrix &m)
Copy Constructor.

~TrMatrix ()
Destructor.

void Identity ()
Define matrix as identity matrix.

void Diagonal ()
Define matrix as a diagonal one.

void Diagonal (const T_ &a)
Define matrix as a diagona one and assign value `a` to all diagonal entries.

void Laplace1D (real_t h)
Define matrix as the one of 3-point finite difference discretization of the second derivative. More...

void setSize (size_t size)
Set size (number of rows) of matrix. More...

void MultAdd (const Vect< T_ > &x, Vect< T_ > &y) const
Multiply matrix by vector `x` and add result to `y`.

void MultAdd (T_ a, const Vect< T_ > &x, Vect< T_ > &y) const
Multiply matrix by vector `a*x` and add result to `y`.

void Mult (const Vect< T_ > &x, Vect< T_ > &y) const
Multiply matrix by vector `x` and save result in `y`.

void TMult (const Vect< T_ > &x, Vect< T_ > &y) const
Multiply transpose of matrix by vector `x` and save result in `y`.

void Axpy (T_ a, const TrMatrix< 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 constant `val` to an entry `(i,j)` of the matrix.

void add (size_t i, size_t j, const T_ &val)
Add constant `val` value to an entry `(i,j)` of the matrix.

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

TrMatrix< T_ > & operator= (const TrMatrix< T_ > &m)
Operator =. More...

TrMatrix< T_ > & operator= (const T_ &x)
Operator = Assign matrix to identity times `x`.

TrMatrix< T_ > & operator*= (const T_ &x)
Operator *=. More...

int solve (Vect< T_ > &b, bool fact=true)
Solve a linear system with current matrix (forward and back substitution). More...

int solve (const Vect< T_ > &b, Vect< T_ > &x, bool fact=false)
Solve a linear system with current matrix (forward and back substitution). More...

T_ * get () const
Return C-Array.

T_ get (size_t i, size_t j) const
Return entry `(i,j)` of matrix. 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.

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 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_ & 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...

Matrixoperator= (Matrix< T_ > &m)
Operator =. More...

Matrixoperator+= (const Matrix< T_ > &m)
Operator +=. More...

Matrixoperator-= (const Matrix< T_ > &m)
Operator -=. More...

Matrixoperator= (const T_ &x)
Operator =. More...

Matrixoperator*= (const T_ &x)
Operator *=. More...

Matrixoperator+= (const T_ &x)
Operator +=. More...

Matrixoperator-= (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.

## Detailed Description

template<class T_>
class OFELI::TrMatrix< T_ >

To handle tridiagonal matrices.

This class enables storing and manipulating tridiagonal 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. If `is` difference from `i-1`, `i` or `i+1`, the returned value is `0`. Entries of `A` can be assigned a value by the same operator. Only nonzero entries can be assigned.

Template Parameters
 T_ Data type (double, float, complex, ...)