MFEM
v4.0
Finite element discretization library
|
#include <blockmatrix.hpp>
Public Member Functions | |
BlockMatrix (const Array< int > &offsets) | |
Constructor for square block matrices. More... | |
BlockMatrix (const Array< int > &row_offsets, const Array< int > &col_offsets) | |
Constructor for rectangular block matrices. More... | |
void | SetBlock (int i, int j, SparseMatrix *mat) |
Set A(i,j) = mat. More... | |
int | NumRowBlocks () const |
Return the number of row blocks. More... | |
int | NumColBlocks () const |
Return the number of column blocks. More... | |
SparseMatrix & | GetBlock (int i, int j) |
Return a reference to block (i,j). Reference may be invalid if Aij(i,j) == NULL. More... | |
const SparseMatrix & | GetBlock (int i, int j) const |
int | IsZeroBlock (int i, int j) const |
Check if block (i,j) is a zero block. More... | |
Array< int > & | RowOffsets () |
Return the row offsets for block starts. More... | |
Array< int > & | ColOffsets () |
Return the columns offsets for block starts. More... | |
const Array< int > & | RowOffsets () const |
Return the row offsets for block starts (const version) More... | |
const Array< int > & | ColOffsets () const |
Return the row offsets for block starts (const version) More... | |
int | RowSize (const int i) const |
Return the number of non zeros in row i. More... | |
void | EliminateRowCol (int rc, DiagonalPolicy dpolicy=DIAG_ONE) |
Eliminate the row and column rc from the matrix. More... | |
void | EliminateRowCol (Array< int > &ess_bc_dofs, Vector &sol, Vector &rhs) |
Symmetric elimination of the marked degree of freedom. More... | |
virtual void | Finalize (int skip_zeros=1) |
Finalize all the submatrices. More... | |
void | Finalize (int skip_zeros, bool fix_empty_rows) |
A slightly more general version of the Finalize(int) method. More... | |
SparseMatrix * | CreateMonolithic () const |
Returns a monolithic CSR matrix that represents this operator. More... | |
void | PrintMatlab (std::ostream &os=mfem::out) const |
Export the monolithic matrix to file. More... | |
virtual | ~BlockMatrix () |
Destructor. More... | |
Matrix interface | |
virtual double & | Elem (int i, int j) |
Returns reference to a_{ij}. More... | |
virtual const double & | Elem (int i, int j) const |
Returns constant reference to a_{ij}. More... | |
virtual MatrixInverse * | Inverse () const |
Returns a pointer to (approximation) of the matrix inverse. More... | |
AbstractSparseMatrix interface | |
virtual int | NumNonZeroElems () const |
Returns the total number of non zeros in the matrix. More... | |
virtual int | GetRow (const int row, Array< int > &cols, Vector &srow) const |
Gets the columns indexes and values for row row. More... | |
virtual void | EliminateZeroRows (const double threshold=1e-12) |
If the matrix is square, this method will place 1 on the diagonal (i,i) if row i has "almost" zero l1-norm. More... | |
virtual void | Mult (const Vector &x, Vector &y) const |
Matrix-Vector Multiplication y = A*x. More... | |
virtual void | AddMult (const Vector &x, Vector &y, const double val=1.) const |
Matrix-Vector Multiplication y = y + val*A*x. More... | |
virtual void | MultTranspose (const Vector &x, Vector &y) const |
MatrixTranspose-Vector Multiplication y = A'*x. More... | |
virtual void | AddMultTranspose (const Vector &x, Vector &y, const double val=1.) const |
MatrixTranspose-Vector Multiplication y = y + val*A'*x. More... | |
Public Member Functions inherited from mfem::AbstractSparseMatrix | |
AbstractSparseMatrix (int s=0) | |
Creates a square matrix of the given size. More... | |
AbstractSparseMatrix (int h, int w) | |
Creates a matrix of the given height and width. More... | |
virtual | ~AbstractSparseMatrix () |
Destroys AbstractSparseMatrix. More... | |
Public Member Functions inherited from mfem::Matrix | |
Matrix (int s) | |
Creates a square matrix of size s. More... | |
Matrix (int h, int w) | |
Creates a matrix of the given height and width. More... | |
virtual void | Print (std::ostream &out=mfem::out, int width_=4) const |
Prints matrix to stream out. More... | |
virtual | ~Matrix () |
Destroys matrix. More... | |
Public Member Functions inherited from mfem::Operator | |
Operator (int s=0) | |
Construct a square Operator with given size s (default 0). More... | |
Operator (int h, int w) | |
Construct an Operator with the given height (output size) and width (input size). More... | |
int | Height () const |
Get the height (size of output) of the Operator. Synonym with NumRows(). More... | |
int | NumRows () const |
Get the number of rows (size of output) of the Operator. Synonym with Height(). More... | |
int | Width () const |
Get the width (size of input) of the Operator. Synonym with NumCols(). More... | |
int | NumCols () const |
Get the number of columns (size of input) of the Operator. Synonym with Width(). More... | |
virtual MemoryClass | GetMemoryClass () const |
Return the MemoryClass preferred by the Operator. More... | |
virtual Operator & | GetGradient (const Vector &x) const |
Evaluate the gradient operator at the point x. The default behavior in class Operator is to generate an error. More... | |
virtual const Operator * | GetProlongation () const |
Prolongation operator from linear algebra (linear system) vectors, to input vectors for the operator. NULL means identity. More... | |
virtual const Operator * | GetRestriction () const |
Restriction operator from input vectors for the operator to linear algebra (linear system) vectors. NULL means identity. More... | |
void | FormLinearSystem (const Array< int > &ess_tdof_list, Vector &x, Vector &b, Operator *&A, Vector &X, Vector &B, int copy_interior=0) |
Form a constrained linear system using a matrix-free approach. More... | |
virtual void | RecoverFEMSolution (const Vector &X, const Vector &b, Vector &x) |
Reconstruct a solution vector x (e.g. a GridFunction) from the solution X of a constrained linear system obtained from Operator::FormLinearSystem(). More... | |
void | PrintMatlab (std::ostream &out, int n=0, int m=0) const |
Prints operator with input size n and output size m in Matlab format. More... | |
virtual | ~Operator () |
Virtual destructor. More... | |
Type | GetType () const |
Return the type ID of the Operator class. More... | |
Public Attributes | |
int | owns_blocks |
If owns_blocks the SparseMatrix objects Aij will be deallocated. More... | |
Additional Inherited Members | |
Public Types inherited from mfem::Matrix | |
enum | DiagonalPolicy { DIAG_ZERO, DIAG_ONE, DIAG_KEEP } |
Public Types inherited from mfem::Operator | |
enum | Type { ANY_TYPE, MFEM_SPARSEMAT, Hypre_ParCSR, PETSC_MATAIJ, PETSC_MATIS, PETSC_MATSHELL, PETSC_MATNEST, PETSC_MATHYPRE, PETSC_MATGENERIC } |
Enumeration defining IDs for some classes derived from Operator. More... | |
Protected Attributes inherited from mfem::Operator | |
int | height |
Dimension of the output / number of rows in the matrix. More... | |
int | width |
Dimension of the input / number of columns in the matrix. More... | |
Definition at line 24 of file blockmatrix.hpp.
mfem::BlockMatrix::BlockMatrix | ( | const Array< int > & | offsets | ) |
Constructor for square block matrices.
offsets | offsets that mark the start of each row/column block (size nRowBlocks+1). |
Definition at line 22 of file blockmatrix.cpp.
mfem::BlockMatrix::BlockMatrix | ( | const Array< int > & | row_offsets, |
const Array< int > & | col_offsets | ||
) |
Constructor for rectangular block matrices.
row_offsets | offsets that mark the start of each row block (size nRowBlocks+1). |
col_offsets | offsets that mark the start of each column block (size nColBlocks+1). |
Definition at line 34 of file blockmatrix.cpp.
|
virtual |
Destructor.
Definition at line 50 of file blockmatrix.cpp.
|
virtual |
Matrix-Vector Multiplication y = y + val*A*x.
Implements mfem::AbstractSparseMatrix.
Definition at line 406 of file blockmatrix.cpp.
|
virtual |
MatrixTranspose-Vector Multiplication y = y + val*A'*x.
Implements mfem::AbstractSparseMatrix.
Definition at line 445 of file blockmatrix.cpp.
|
inline |
Return the columns offsets for block starts.
Definition at line 59 of file blockmatrix.hpp.
|
inline |
Return the row offsets for block starts (const version)
Definition at line 63 of file blockmatrix.hpp.
SparseMatrix * mfem::BlockMatrix::CreateMonolithic | ( | ) | const |
Returns a monolithic CSR matrix that represents this operator.
Definition at line 474 of file blockmatrix.cpp.
|
virtual |
Returns reference to a_{ij}.
Implements mfem::Matrix.
Definition at line 134 of file blockmatrix.cpp.
|
virtual |
Returns constant reference to a_{ij}.
Implements mfem::Matrix.
Definition at line 150 of file blockmatrix.cpp.
void mfem::BlockMatrix::EliminateRowCol | ( | int | rc, |
DiagonalPolicy | dpolicy = DIAG_ONE |
||
) |
Eliminate the row and column rc from the matrix.
Eliminates the column and row rc, replacing the element (rc,rc) with 1.0. Assumes that element (i,rc) is assembled if and only if the element (rc,i) is assembled. If dpolicy is specified, the element (rc,rc) is treated according to that policy.
Definition at line 214 of file blockmatrix.cpp.
Symmetric elimination of the marked degree of freedom.
ess_bc_dofs | marker of the degree of freedom to be eliminated dof i is eliminated if ess_bc_dofs[i] = 1. |
sol | vector that stores the values of the degree of freedom that need to be eliminated |
rhs | vector that stores the rhs of the system. |
Definition at line 251 of file blockmatrix.cpp.
|
virtual |
If the matrix is square, this method will place 1 on the diagonal (i,i) if row i has "almost" zero l1-norm.
If entry (i,i) does not belong to the sparsity pattern of A, then a error will occur.
Implements mfem::AbstractSparseMatrix.
Definition at line 323 of file blockmatrix.cpp.
|
inlinevirtual |
Finalize all the submatrices.
Reimplemented from mfem::Matrix.
Definition at line 85 of file blockmatrix.hpp.
void mfem::BlockMatrix::Finalize | ( | int | skip_zeros, |
bool | fix_empty_rows | ||
) |
A slightly more general version of the Finalize(int) method.
Definition at line 376 of file blockmatrix.cpp.
SparseMatrix & mfem::BlockMatrix::GetBlock | ( | int | i, |
int | j | ||
) |
Return a reference to block (i,j). Reference may be invalid if Aij(i,j) == NULL.
Definition at line 83 of file blockmatrix.cpp.
const SparseMatrix & mfem::BlockMatrix::GetBlock | ( | int | i, |
int | j | ||
) | const |
Return a reference to block (i,j). Reference may be invalid if Aij(i,j) == NULL. (const version)
Definition at line 99 of file blockmatrix.cpp.
Gets the columns indexes and values for row row.
The return value is always 0 since cols and srow are copies of the values in the matrix.
Implements mfem::AbstractSparseMatrix.
Definition at line 184 of file blockmatrix.cpp.
|
inlinevirtual |
Returns a pointer to (approximation) of the matrix inverse.
Implements mfem::Matrix.
Definition at line 102 of file blockmatrix.hpp.
|
inline |
Check if block (i,j) is a zero block.
Definition at line 55 of file blockmatrix.hpp.
Matrix-Vector Multiplication y = A*x.
Implements mfem::AbstractSparseMatrix.
Definition at line 391 of file blockmatrix.cpp.
MatrixTranspose-Vector Multiplication y = A'*x.
Implements mfem::AbstractSparseMatrix.
Definition at line 434 of file blockmatrix.cpp.
|
inline |
Return the number of column blocks.
Definition at line 48 of file blockmatrix.hpp.
|
virtual |
Returns the total number of non zeros in the matrix.
Implements mfem::AbstractSparseMatrix.
Definition at line 117 of file blockmatrix.cpp.
|
inline |
Return the number of row blocks.
Definition at line 46 of file blockmatrix.hpp.
void mfem::BlockMatrix::PrintMatlab | ( | std::ostream & | os = mfem::out | ) | const |
Export the monolithic matrix to file.
Definition at line 554 of file blockmatrix.cpp.
|
inline |
Return the row offsets for block starts.
Definition at line 57 of file blockmatrix.hpp.
|
inline |
Return the row offsets for block starts (const version)
Definition at line 61 of file blockmatrix.hpp.
int mfem::BlockMatrix::RowSize | ( | const int | i | ) | const |
Return the number of non zeros in row i.
Definition at line 166 of file blockmatrix.cpp.
void mfem::BlockMatrix::SetBlock | ( | int | i, |
int | j, | ||
SparseMatrix * | mat | ||
) |
Set A(i,j) = mat.
Definition at line 62 of file blockmatrix.cpp.
int mfem::BlockMatrix::owns_blocks |
If owns_blocks the SparseMatrix objects Aij will be deallocated.
Definition at line 139 of file blockmatrix.hpp.