MFEM  v4.0 Finite element discretization library
mfem::SparseMatrix Class Reference

Data type sparse matrix. More...

#include <sparsemat.hpp>

Inheritance diagram for mfem::SparseMatrix:
[legend]
Collaboration diagram for mfem::SparseMatrix:
[legend]

## Public Member Functions

SparseMatrix ()
Create an empty SparseMatrix. More...

SparseMatrix (int nrows, int ncols=-1)
Create a sparse matrix with flexible sparsity structure using a row-wise linked list (LIL) format. More...

SparseMatrix (int *i, int *j, double *data, int m, int n)
Create a sparse matrix in CSR format. Ownership of i, j, and data is transferred to the SparseMatrix. More...

SparseMatrix (int *i, int *j, double *data, int m, int n, bool ownij, bool owna, bool issorted)
Create a sparse matrix in CSR format. Ownership of i, j, and data is optionally transferred to the SparseMatrix. More...

SparseMatrix (int nrows, int ncols, int rowsize)
Create a sparse matrix in CSR format where each row has space allocated for exactly rowsize entries. More...

SparseMatrix (const SparseMatrix &mat, bool copy_graph=true)
Copy constructor (deep copy). More...

SparseMatrix (const Vector &v)
Create a SparseMatrix with diagonal v, i.e. A = Diag(v) More...

SparseMatrixoperator= (const SparseMatrix &rhs)
Assignment operator: deep copy. More...

void MakeRef (const SparseMatrix &master)
Clear the contents of the SparseMatrix and make it a reference to master. More...

int Size () const
For backward compatibility, define Size() to be synonym of Height(). More...

void Clear ()
Clear the contents of the SparseMatrix. More...

bool Empty () const
Check if the SparseMatrix is empty. More...

int * GetI ()
Return the array I. More...

const int * GetI () const
Return the array I, const version. More...

int * GetJ ()
Return the array J. More...

const int * GetJ () const
Return the array J, const version. More...

double * GetData ()
Return the element data, i.e. the array A. More...

const double * GetData () const
Return the element data, i.e. the array A, const version. More...

int RowSize (const int i) const
Returns the number of elements in row i. More...

int MaxRowSize () const
Returns the maximum number of elements among all rows. More...

int * GetRowColumns (const int row)
Return a pointer to the column indices in a row. More...

const int * GetRowColumns (const int row) const
Return a pointer to the column indices in a row, const version. More...

double * GetRowEntries (const int row)
Return a pointer to the entries in a row. More...

const double * GetRowEntries (const int row) const
Return a pointer to the entries in a row, const version. More...

void SetWidth (int width_=-1)
Change the width of a SparseMatrix. More...

int ActualWidth () const
Returns the actual Width of the matrix. More...

void SortColumnIndices ()
Sort the column indices corresponding to each row. More...

void MoveDiagonalFirst ()
Move the diagonal entry to the first position in each row, preserving the order of the rest of the columns. More...

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

double & operator() (int i, int j)
Returns reference to A[i][j]. More...

const double & operator() (int i, int j) const
Returns reference to A[i][j]. More...

void GetDiag (Vector &d) const
Returns the Diagonal of A. More...

DenseMatrixToDenseMatrix () const
Produces a DenseMatrix from a SparseMatrix. More...

void ToDenseMatrix (DenseMatrix &B) const
Produces a DenseMatrix from a SparseMatrix. More...

virtual MemoryClass GetMemoryClass () const
Return the MemoryClass preferred by the Operator. More...

virtual void Mult (const Vector &x, Vector &y) const
Matrix vector multiplication. More...

void AddMult (const Vector &x, Vector &y, const double a=1.0) const
y += A * x (default) or y += a * A * x More...

void MultTranspose (const Vector &x, Vector &y) const
Multiply a vector with the transposed matrix. y = At * x. More...

void AddMultTranspose (const Vector &x, Vector &y, const double a=1.0) const
y += At * x (default) or y += a * At * x More...

void BuildTranspose () const
Build and store internally the transpose of this matrix which will be used in the methods AddMultTranspose() and MultTranspose(). More...

void ResetTranspose () const

void PartMult (const Array< int > &rows, const Vector &x, Vector &y) const

void PartAddMult (const Array< int > &rows, const Vector &x, Vector &y, const double a=1.0) const

void BooleanMult (const Array< int > &x, Array< int > &y) const
y = A * x, treating all entries as booleans (zero=false, nonzero=true). More...

void BooleanMultTranspose (const Array< int > &x, Array< int > &y) const
y = At * x, treating all entries as booleans (zero=false, nonzero=true). More...

double InnerProduct (const Vector &x, const Vector &y) const
Compute y^t A x. More...

void GetRowSums (Vector &x) const
For all i compute $$x_i = \sum_j A_{ij}$$. More...

double GetRowNorml1 (int irow) const
For i = irow compute $$x_i = \sum_j | A_{i, j} |$$. More...

virtual MatrixInverseInverse () const
This virtual method is not supported: it always returns NULL. More...

void EliminateRow (int row, const double sol, Vector &rhs)
Eliminates a column from the transpose matrix. More...

void EliminateRow (int row, DiagonalPolicy dpolicy=DIAG_ZERO)
Eliminates a row from the matrix. More...

void EliminateCol (int col, DiagonalPolicy dpolicy=DIAG_ZERO)
Eliminates the column col from the matrix. More...

void EliminateCols (const Array< int > &cols, const Vector *x=NULL, Vector *b=NULL)
Eliminate all columns i for which cols[i] != 0. More...

void EliminateRowCol (int rc, const double sol, Vector &rhs, DiagonalPolicy dpolicy=DIAG_ONE)
Eliminate row rc and column rc and modify the rhs using sol. More...

void EliminateRowColMultipleRHS (int rc, const Vector &sol, DenseMatrix &rhs, DiagonalPolicy dpolicy=DIAG_ONE)
Similar to EliminateRowCol(int, const double, Vector &, DiagonalPolicy), but multiple values for eliminated unknowns are accepted, and accordingly multiple right-hand-sides are used. More...

void EliminateRowColDiag (int rc, double value)
Perform elimination and set the diagonal entry to the given value. More...

void EliminateRowCol (int rc, DiagonalPolicy dpolicy=DIAG_ONE)
Eliminate row rc and column rc. More...

void EliminateRowCol (int rc, SparseMatrix &Ae, DiagonalPolicy dpolicy=DIAG_ONE)
Similar to EliminateRowCol(int, DiagonalPolicy) + save the eliminated entries into Ae so that (*this) + Ae is equal to the original matrix. More...

void SetDiagIdentity ()
If a row contains only one diag entry of zero, set it to 1. More...

virtual void EliminateZeroRows (const double threshold=1e-12)
If a row contains only zeros, set its diagonal to 1. More...

void Gauss_Seidel_forw (const Vector &x, Vector &y) const
Gauss-Seidel forward and backward iterations over a vector x. More...

void Gauss_Seidel_back (const Vector &x, Vector &y) const

double GetJacobiScaling () const
Determine appropriate scaling for Jacobi iteration. More...

void Jacobi (const Vector &b, const Vector &x0, Vector &x1, double sc) const

void DiagScale (const Vector &b, Vector &x, double sc=1.0) const

void Jacobi2 (const Vector &b, const Vector &x0, Vector &x1, double sc=1.0) const

void Jacobi3 (const Vector &b, const Vector &x0, Vector &x1, double sc=1.0) const

virtual void Finalize (int skip_zeros=1)
Finalize the matrix initialization, switching the storage format from LIL to CSR. More...

void Finalize (int skip_zeros, bool fix_empty_rows)
A slightly more general version of the Finalize(int) method. More...

bool Finalized () const

bool areColumnsSorted () const

void Threshold (double tol, bool fix_empty_rows=false)
Remove entries smaller in absolute value than a given tolerance tol. If fix_empty_rows is true, a zero value is inserted in the diagonal entry (for square matrices only) More...

void GetBlocks (Array2D< SparseMatrix * > &blocks) const

void GetSubMatrix (const Array< int > &rows, const Array< int > &cols, DenseMatrix &subm) const

void SetColPtr (const int row) const
Initialize the SparseMatrix for fast access to the entries of the given row which becomes the "current row". More...

void ClearColPtr () const
Reset the "current row" set by calling SetColPtr(). This method must be called between any two calls to SetColPtr(). More...

double & SearchRow (const int col)
Perform a fast search for an entry in the "current row". See SetColPtr(). More...

void _Add_ (const int col, const double a)
Add a value to an entry in the "current row". See SetColPtr(). More...

void _Set_ (const int col, const double a)
Set an entry in the "current row". See SetColPtr(). More...

double _Get_ (const int col) const
Read the value of an entry in the "current row". See SetColPtr(). More...

double & SearchRow (const int row, const int col)

void _Add_ (const int row, const int col, const double a)

void _Set_ (const int row, const int col, const double a)

void Set (const int i, const int j, const double a)

void Add (const int i, const int j, const double a)

void SetSubMatrix (const Array< int > &rows, const Array< int > &cols, const DenseMatrix &subm, int skip_zeros=1)

void SetSubMatrixTranspose (const Array< int > &rows, const Array< int > &cols, const DenseMatrix &subm, int skip_zeros=1)

void AddSubMatrix (const Array< int > &rows, const Array< int > &cols, const DenseMatrix &subm, int skip_zeros=1)

bool RowIsEmpty (const int row) const

virtual int GetRow (const int row, Array< int > &cols, Vector &srow) const
Extract all column indices and values from a given row. More...

void SetRow (const int row, const Array< int > &cols, const Vector &srow)

void AddRow (const int row, const Array< int > &cols, const Vector &srow)

void ScaleRow (const int row, const double scale)

void ScaleRows (const Vector &sl)
this = diag(sl) * this; More...

void ScaleColumns (const Vector &sr)
this = this * diag(sr); More...

SparseMatrixoperator+= (const SparseMatrix &B)
Add the sparse matrix 'B' to '*this'. This operation will cause an error if '*this' is finalized and 'B' has larger sparsity pattern. More...

void Add (const double a, const SparseMatrix &B)
Add the sparse matrix 'B' scaled by the scalar 'a' into '*this'. Only entries in the sparsity pattern of '*this' are added. More...

SparseMatrixoperator= (double a)

SparseMatrixoperator*= (double a)

void Print (std::ostream &out=mfem::out, int width_=4) const
Prints matrix to stream out. More...

void PrintMatlab (std::ostream &out=mfem::out) const
Prints matrix in matlab format. More...

void PrintMM (std::ostream &out=mfem::out) const
Prints matrix in Matrix Market sparse format. More...

void PrintCSR (std::ostream &out) const
Prints matrix to stream out in hypre_CSRMatrix format. More...

void PrintCSR2 (std::ostream &out) const
Prints a sparse matrix to stream out in CSR format. More...

void PrintInfo (std::ostream &out) const
Print various sparse matrix staticstics. More...

double IsSymmetric () const
Returns max_{i,j} |(i,j)-(j,i)| for a finalized matrix. More...

void Symmetrize ()
(*this) = 1/2 ((*this) + (*this)^t) More...

virtual int NumNonZeroElems () const
Returns the number of the nonzero elements in the matrix. More...

double MaxNorm () const

int CountSmallElems (double tol) const
Count the number of entries with |a_ij| <= tol. More...

int CheckFinite () const
Count the number of entries that are NOT finite, i.e. Inf or Nan. More...

void SetGraphOwner (bool ownij)
Set the graph ownership flag (I and J arrays). More...

void SetDataOwner (bool owna)
Set the data ownership flag (A array). More...

bool OwnsGraph () const
Get the graph ownership flag (I and J arrays). More...

bool OwnsData () const
Get the data ownership flag (A array). More...

void LoseData ()
Lose the ownership of the graph (I, J) and data (A) arrays. More...

void Swap (SparseMatrix &other)

virtual ~SparseMatrix ()
Destroys sparse matrix. More...

Type GetType () const

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 ~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 OperatorGetGradient (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 OperatorGetProlongation () const
Prolongation operator from linear algebra (linear system) vectors, to input vectors for the operator. NULL means identity. More...

virtual const OperatorGetRestriction () 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...

## Protected Types

typedef MemAlloc< RowNode, 1024 > RowNodeAlloc

void Destroy ()

void SetEmpty ()

## Protected Attributes

RowNode ** Rows
Array of linked lists, one for every row. This array represents the linked list (LIL) storage format. More...

int current_row

int * ColPtrJ

RowNode ** ColPtrNode

SparseMatrixAt
Transpose of A. Owned. Used to perform MultTranspose() on devices. More...

RowNodeAllocNodesMem

bool isSorted
Are the columns sorted already. More...

Arrays used by the CSR storage format.
Memory< int > I
Array with size (height+1) containing the row offsets. More...

Memory< int > J
Array with size I[height], containing the column indices for all matrix entries, as indexed by the I array. More...

Memory< double > A
Array with size I[height], containing the actual entries of the sparse matrix, as indexed by the I array. 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...

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

## Detailed Description

Data type sparse matrix.

Definition at line 40 of file sparsemat.hpp.

## Member Typedef Documentation

 typedef MemAlloc mfem::SparseMatrix::RowNodeAlloc
protected

Definition at line 73 of file sparsemat.hpp.

## Constructor & Destructor Documentation

 mfem::SparseMatrix::SparseMatrix ( )
inline

Create an empty SparseMatrix.

Definition at line 85 of file sparsemat.hpp.

 mfem::SparseMatrix::SparseMatrix ( int nrows, int ncols = -1 )
explicit

Create a sparse matrix with flexible sparsity structure using a row-wise linked list (LIL) format.

New entries are added as needed by methods like AddSubMatrix(), SetSubMatrix(), etc. Calling Finalize() will convert the SparseMatrix to the more compact compressed sparse row (CSR) format.

Definition at line 31 of file sparsemat.cpp.

 mfem::SparseMatrix::SparseMatrix ( int * i, int * j, double * data, int m, int n )

Create a sparse matrix in CSR format. Ownership of i, j, and data is transferred to the SparseMatrix.

Definition at line 55 of file sparsemat.cpp.

 mfem::SparseMatrix::SparseMatrix ( int * i, int * j, double * data, int m, int n, bool ownij, bool owna, bool issorted )

Create a sparse matrix in CSR format. Ownership of i, j, and data is optionally transferred to the SparseMatrix.

If the parameter data is NULL, then the internal A array is allocated by this constructor (initializing it with zeros and taking ownership, regardless of the parameter owna).

Definition at line 72 of file sparsemat.cpp.

 mfem::SparseMatrix::SparseMatrix ( int nrows, int ncols, int rowsize )

Create a sparse matrix in CSR format where each row has space allocated for exactly rowsize entries.

SetRow() can then be called or the I, J, A arrays can be used directly.

Definition at line 100 of file sparsemat.cpp.

 mfem::SparseMatrix::SparseMatrix ( const SparseMatrix & mat, bool copy_graph = true )

Copy constructor (deep copy).

If mat is finalized and copy_graph is false, the I and J arrays will use a shallow copy (copy the pointers only) without transferring ownership.

Definition at line 121 of file sparsemat.cpp.

 mfem::SparseMatrix::SparseMatrix ( const Vector & v )

Create a SparseMatrix with diagonal v, i.e. A = Diag(v)

Definition at line 186 of file sparsemat.cpp.

 virtual mfem::SparseMatrix::~SparseMatrix ( )
inlinevirtual

Destroys sparse matrix.

Definition at line 519 of file sparsemat.hpp.

## Member Function Documentation

 void mfem::SparseMatrix::_Add_ ( const int col, const double a )
inline

Add a value to an entry in the "current row". See SetColPtr().

Definition at line 404 of file sparsemat.hpp.

 void mfem::SparseMatrix::_Add_ ( const int row, const int col, const double a )
inline

Definition at line 413 of file sparsemat.hpp.

 double mfem::SparseMatrix::_Get_ ( const int col ) const
inline

Read the value of an entry in the "current row". See SetColPtr().

Definition at line 680 of file sparsemat.hpp.

 void mfem::SparseMatrix::_Set_ ( const int col, const double a )
inline

Set an entry in the "current row". See SetColPtr().

Definition at line 407 of file sparsemat.hpp.

 void mfem::SparseMatrix::_Set_ ( const int row, const int col, const double a )
inline

Definition at line 415 of file sparsemat.hpp.

 int mfem::SparseMatrix::ActualWidth ( ) const

Returns the actual Width of the matrix.

This method can be called for matrices finalized or not.

Definition at line 2904 of file sparsemat.cpp.

 void mfem::SparseMatrix::Add ( const int i, const int j, const double a )

Definition at line 2244 of file sparsemat.cpp.

 void mfem::SparseMatrix::Add ( const double a, const SparseMatrix & B )

Add the sparse matrix 'B' scaled by the scalar 'a' into '*this'. Only entries in the sparsity pattern of '*this' are added.

Definition at line 2616 of file sparsemat.cpp.

 void mfem::SparseMatrix::AddMult ( const Vector & x, Vector & y, const double a = 1.0 ) const
virtual

y += A * x (default) or y += a * A * x

Implements mfem::AbstractSparseMatrix.

Definition at line 552 of file sparsemat.cpp.

 void mfem::SparseMatrix::AddMultTranspose ( const Vector & x, Vector & y, const double a = 1.0 ) const
virtual

y += At * x (default) or y += a * At * x

Implements mfem::AbstractSparseMatrix.

Definition at line 623 of file sparsemat.cpp.

 void mfem::SparseMatrix::AddRow ( const int row, const Array< int > & cols, const Vector & srow )

Definition at line 2467 of file sparsemat.cpp.

 void mfem::SparseMatrix::AddSubMatrix ( const Array< int > & rows, const Array< int > & cols, const DenseMatrix & subm, int skip_zeros = 1 )

Definition at line 2187 of file sparsemat.cpp.

 bool mfem::SparseMatrix::areColumnsSorted ( ) const
inline

Definition at line 373 of file sparsemat.hpp.

 void mfem::SparseMatrix::BooleanMult ( const Array< int > & x, Array< int > & y ) const

y = A * x, treating all entries as booleans (zero=false, nonzero=true).

The actual values stored in the data array, A, are not used - this means and that all entries in the sparsity pattern are considered to be true by this method.

Definition at line 726 of file sparsemat.cpp.

 void mfem::SparseMatrix::BooleanMultTranspose ( const Array< int > & x, Array< int > & y ) const

y = At * x, treating all entries as booleans (zero=false, nonzero=true).

The actual values stored in the data array, A, are not used - this means and that all entries in the sparsity pattern are considered to be true by this method.

Definition at line 756 of file sparsemat.cpp.

 void mfem::SparseMatrix::BuildTranspose ( ) const

Build and store internally the transpose of this matrix which will be used in the methods AddMultTranspose() and MultTranspose().

If this method has been called, the internal transpose matrix will be used to perform the action of the transpose matrix in AddMultTranspose(), and MultTranspose().

Warning: any changes in this matrix will invalidate the internal transpose. To rebuild the transpose, call ResetTranspose() followed by a call to this method. If the internal transpose is already built, this method has no effect.

When any non-default backend is enabled, i.e. Device::IsEnabled() is true, the methods AddMultTranspose(), and MultTranspose(), require the internal transpose to be built. If that is not the case (i.e. the internal transpose is not built), these methods will raise an error with an appropriate message pointing to this method. When using the default backend, calling this method is optional.

This method can only be used when the sparse matrix is finalized.

Definition at line 668 of file sparsemat.cpp.

 int mfem::SparseMatrix::CheckFinite ( ) const

Count the number of entries that are NOT finite, i.e. Inf or Nan.

Definition at line 1234 of file sparsemat.cpp.

 void mfem::SparseMatrix::Clear ( )
inline

Clear the contents of the SparseMatrix.

Definition at line 135 of file sparsemat.hpp.

 void mfem::SparseMatrix::ClearColPtr ( ) const
inline

Reset the "current row" set by calling SetColPtr(). This method must be called between any two calls to SetColPtr().

Definition at line 634 of file sparsemat.hpp.

 int mfem::SparseMatrix::CountSmallElems ( double tol ) const

Count the number of entries with |a_ij| <= tol.

Definition at line 1206 of file sparsemat.cpp.

 void mfem::SparseMatrix::Destroy ( )
protected

Definition at line 2873 of file sparsemat.cpp.

 void mfem::SparseMatrix::DiagScale ( const Vector & b, Vector & x, double sc = 1.0 ) const

Definition at line 2107 of file sparsemat.cpp.

 double & mfem::SparseMatrix::Elem ( int i, int j )
virtual

Returns reference to a_{ij}.

Implements mfem::Matrix.

Definition at line 418 of file sparsemat.cpp.

 const double & mfem::SparseMatrix::Elem ( int i, int j ) const
virtual

Returns constant reference to a_{ij}.

Implements mfem::Matrix.

Definition at line 423 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateCol ( int col, DiagonalPolicy dpolicy = DIAG_ZERO )

Eliminates the column col from the matrix.

• If dpolicy = DIAG_ZERO, all entries in the column will be set to 0.
• If dpolicy = DIAG_ONE (matrix must be square), the diagonal entry will be set equal to 1 and all other entries in the column to 0.
• The policy DIAG_KEEP is not supported.

Definition at line 1311 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateCols ( const Array< int > & cols, const Vector * x = NULL, Vector * b = NULL )

Eliminate all columns i for which cols[i] != 0.

Elimination of a column means that all entries in the column are set to zero. In addition, if the pointers x and b are not NULL, the eliminated matrix entries are multiplied by the corresponding solution value in *x and subtracted from the r.h.s. vector, *b.

Definition at line 1351 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRow ( int row, const double sol, Vector & rhs )

Eliminates a column from the transpose matrix.

Definition at line 1263 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRow ( int row, DiagonalPolicy dpolicy = DIAG_ZERO )

Eliminates a row from the matrix.

• If dpolicy = DIAG_ZERO, all the entries in the row will be set to 0.
• If dpolicy = DIAG_ONE (matrix must be square), the diagonal entry will be set equal to 1 and all other entries in the row to 0.
• The policy DIAG_KEEP is not supported.

Definition at line 1279 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRowCol ( int rc, const double sol, Vector & rhs, DiagonalPolicy dpolicy = DIAG_ONE )

Eliminate row rc and column rc and modify the rhs using sol.

Eliminates the column rc to the rhs, deletes the row rc and replaces the element (rc,rc) with 1.0; assumes that element (i,rc) is assembled if and only if the element (rc,i) is assembled. By default, elements (rc,rc) are set to 1.0, although this behavior can be adjusted by changing the dpolicy parameter.

Definition at line 1390 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRowCol ( int rc, DiagonalPolicy dpolicy = DIAG_ONE )

Eliminate row rc and column rc.

Definition at line 1610 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRowCol ( int rc, SparseMatrix & Ae, DiagonalPolicy dpolicy = DIAG_ONE )

Similar to EliminateRowCol(int, DiagonalPolicy) + save the eliminated entries into Ae so that (*this) + Ae is equal to the original matrix.

Definition at line 1752 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRowColDiag ( int rc, double value )

Perform elimination and set the diagonal entry to the given value.

Definition at line 1689 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateRowColMultipleRHS ( int rc, const Vector & sol, DenseMatrix & rhs, DiagonalPolicy dpolicy = DIAG_ONE )

Similar to EliminateRowCol(int, const double, Vector &, DiagonalPolicy), but multiple values for eliminated unknowns are accepted, and accordingly multiple right-hand-sides are used.

Definition at line 1486 of file sparsemat.cpp.

 void mfem::SparseMatrix::EliminateZeroRows ( const double threshold = 1e-12 )
virtual

If a row contains only zeros, set its diagonal to 1.

Implements mfem::AbstractSparseMatrix.

Definition at line 1857 of file sparsemat.cpp.

 bool mfem::SparseMatrix::Empty ( ) const
inline

Check if the SparseMatrix is empty.

Definition at line 138 of file sparsemat.hpp.

 virtual void mfem::SparseMatrix::Finalize ( int skip_zeros = 1 )
inlinevirtual

Finalize the matrix initialization, switching the storage format from LIL to CSR.

This method should be called once, after the matrix has been initialized. Internally, this method converts the matrix from row-wise linked list (LIL) format into CSR (compressed sparse row) format.

Reimplemented from mfem::Matrix.

Definition at line 367 of file sparsemat.hpp.

 void mfem::SparseMatrix::Finalize ( int skip_zeros, bool fix_empty_rows )

A slightly more general version of the Finalize(int) method.

Definition at line 928 of file sparsemat.cpp.

 bool mfem::SparseMatrix::Finalized ( ) const
inline

Definition at line 372 of file sparsemat.hpp.

 void mfem::SparseMatrix::Gauss_Seidel_back ( const Vector & x, Vector & y ) const

Definition at line 1960 of file sparsemat.cpp.

 void mfem::SparseMatrix::Gauss_Seidel_forw ( const Vector & x, Vector & y ) const

Gauss-Seidel forward and backward iterations over a vector x.

Definition at line 1876 of file sparsemat.cpp.

 void mfem::SparseMatrix::GetBlocks ( Array2D< SparseMatrix * > & blocks ) const

Split the matrix into M x N blocks of sparse matrices in CSR format. The 'blocks' array is M x N (i.e. M and N are determined by its dimensions) and its entries are overwritten by the new blocks.

Definition at line 1008 of file sparsemat.cpp.

 double* mfem::SparseMatrix::GetData ( )
inline

Return the element data, i.e. the array A.

Definition at line 151 of file sparsemat.hpp.

 const double* mfem::SparseMatrix::GetData ( ) const
inline

Return the element data, i.e. the array A, const version.

Definition at line 153 of file sparsemat.hpp.

 void mfem::SparseMatrix::GetDiag ( Vector & d ) const

Returns the Diagonal of A.

Definition at line 486 of file sparsemat.cpp.

 int* mfem::SparseMatrix::GetI ( )
inline

Return the array I.

Definition at line 141 of file sparsemat.hpp.

 const int* mfem::SparseMatrix::GetI ( ) const
inline

Return the array I, const version.

Definition at line 143 of file sparsemat.hpp.

 int* mfem::SparseMatrix::GetJ ( )
inline

Return the array J.

Definition at line 146 of file sparsemat.hpp.

 const int* mfem::SparseMatrix::GetJ ( ) const
inline

Return the array J, const version.

Definition at line 148 of file sparsemat.hpp.

 double mfem::SparseMatrix::GetJacobiScaling ( ) const

Determine appropriate scaling for Jacobi iteration.

Definition at line 2043 of file sparsemat.cpp.

 virtual MemoryClass mfem::SparseMatrix::GetMemoryClass ( ) const
inlinevirtual

Return the MemoryClass preferred by the Operator.

This is the MemoryClass that will be used to access the input and output vectors in the Mult() and MultTranspose() methods.

For example, classes using the MFEM_FORALL macro for implementation can return the value returned by Device::GetMemoryClass().

The default implementation of this method in class Operator returns MemoryClass::HOST.

Reimplemented from mfem::Operator.

Definition at line 213 of file sparsemat.hpp.

 int mfem::SparseMatrix::GetRow ( const int row, Array< int > & cols, Vector & srow ) const
virtual

Extract all column indices and values from a given row.

If the matrix is finalized (i.e. in CSR format), cols and srow will simply be references to the specific portion of the J and A arrays. As required by the AbstractSparseMatrix interface this method returns:

• 0, if cols and srow are copies of the values in the matrix, i.e. when the matrix is open.
• 1, if cols and srow are views of the values in the matrix, i.e. when the matrix is finalized.
Warning
This method breaks the const-ness when the matrix is finalized because it gives write access to the J and A arrays.

Implements mfem::AbstractSparseMatrix.

Definition at line 2380 of file sparsemat.cpp.

 int * mfem::SparseMatrix::GetRowColumns ( const int row )

Return a pointer to the column indices in a row.

Definition at line 299 of file sparsemat.cpp.

 const int * mfem::SparseMatrix::GetRowColumns ( const int row ) const

Return a pointer to the column indices in a row, const version.

Definition at line 306 of file sparsemat.cpp.

 double * mfem::SparseMatrix::GetRowEntries ( const int row )

Return a pointer to the entries in a row.

Definition at line 313 of file sparsemat.cpp.

 const double * mfem::SparseMatrix::GetRowEntries ( const int row ) const

Return a pointer to the entries in a row, const version.

Definition at line 320 of file sparsemat.cpp.

 double mfem::SparseMatrix::GetRowNorml1 ( int irow ) const

For i = irow compute $$x_i = \sum_j | A_{i, j} |$$.

Definition at line 843 of file sparsemat.cpp.

 void mfem::SparseMatrix::GetRowSums ( Vector & x ) const

For all i compute $$x_i = \sum_j A_{ij}$$.

Definition at line 820 of file sparsemat.cpp.

 void mfem::SparseMatrix::GetSubMatrix ( const Array< int > & rows, const Array< int > & cols, DenseMatrix & subm ) const

Definition at line 2331 of file sparsemat.cpp.

 Type mfem::SparseMatrix::GetType ( ) const
inline

Definition at line 521 of file sparsemat.hpp.

 double mfem::SparseMatrix::InnerProduct ( const Vector & x, const Vector & y ) const

Compute y^t A x.

Definition at line 779 of file sparsemat.cpp.

 MatrixInverse * mfem::SparseMatrix::Inverse ( ) const
virtual

This virtual method is not supported: it always returns NULL.

Implements mfem::Matrix.

Definition at line 1258 of file sparsemat.cpp.

 double mfem::SparseMatrix::IsSymmetric ( ) const

Returns max_{i,j} |(i,j)-(j,i)| for a finalized matrix.

Definition at line 1098 of file sparsemat.cpp.

 void mfem::SparseMatrix::Jacobi ( const Vector & b, const Vector & x0, Vector & x1, double sc ) const

One scaled Jacobi iteration for the system A x = b. x1 = x0 + sc D^{-1} (b - A x0) where D is the diag of A.

Definition at line 2076 of file sparsemat.cpp.

 void mfem::SparseMatrix::Jacobi2 ( const Vector & b, const Vector & x0, Vector & x1, double sc = 1.0 ) const

x1 = x0 + sc D^{-1} (b - A x0) where $$D_{ii} = \sum_j |A_{ij}|$$.

Definition at line 2139 of file sparsemat.cpp.

 void mfem::SparseMatrix::Jacobi3 ( const Vector & b, const Vector & x0, Vector & x1, double sc = 1.0 ) const

x1 = x0 + sc D^{-1} (b - A x0) where $$D_{ii} = \sum_j A_{ij}$$.

Definition at line 2163 of file sparsemat.cpp.

 void mfem::SparseMatrix::LoseData ( )
inline

Lose the ownership of the graph (I, J) and data (A) arrays.

Definition at line 514 of file sparsemat.hpp.

 void mfem::SparseMatrix::MakeRef ( const SparseMatrix & master )

Clear the contents of the SparseMatrix and make it a reference to master.

After this call, the matrix will point to the same data as master but it will not own its data. The master must be finalized.

Definition at line 223 of file sparsemat.cpp.

 double mfem::SparseMatrix::MaxNorm ( ) const

Definition at line 1181 of file sparsemat.cpp.

 int mfem::SparseMatrix::MaxRowSize ( ) const

Returns the maximum number of elements among all rows.

Definition at line 275 of file sparsemat.cpp.

 void mfem::SparseMatrix::MoveDiagonalFirst ( )

Move the diagonal entry to the first position in each row, preserving the order of the rest of the columns.

Definition at line 394 of file sparsemat.cpp.

 void mfem::SparseMatrix::Mult ( const Vector & x, Vector & y ) const
virtual

Matrix vector multiplication.

Implements mfem::AbstractSparseMatrix.

Definition at line 545 of file sparsemat.cpp.

 void mfem::SparseMatrix::MultTranspose ( const Vector & x, Vector & y ) const
virtual

Multiply a vector with the transposed matrix. y = At * x.

Implements mfem::AbstractSparseMatrix.

Definition at line 616 of file sparsemat.cpp.

 int mfem::SparseMatrix::NumNonZeroElems ( ) const
virtual

Returns the number of the nonzero elements in the matrix.

Implements mfem::AbstractSparseMatrix.

Definition at line 1159 of file sparsemat.cpp.

 double & mfem::SparseMatrix::operator() ( int i, int j )

Returns reference to A[i][j].

Definition at line 428 of file sparsemat.cpp.

 const double & mfem::SparseMatrix::operator() ( int i, int j ) const

Returns reference to A[i][j].

Definition at line 451 of file sparsemat.cpp.

 SparseMatrix & mfem::SparseMatrix::operator*= ( double a )

Definition at line 2663 of file sparsemat.cpp.

 SparseMatrix & mfem::SparseMatrix::operator+= ( const SparseMatrix & B )

Add the sparse matrix 'B' to '*this'. This operation will cause an error if '*this' is finalized and 'B' has larger sparsity pattern.

Definition at line 2586 of file sparsemat.cpp.

 SparseMatrix & mfem::SparseMatrix::operator= ( const SparseMatrix & rhs )

Assignment operator: deep copy.

Definition at line 213 of file sparsemat.cpp.

 SparseMatrix & mfem::SparseMatrix::operator= ( double a )

Definition at line 2639 of file sparsemat.cpp.

 bool mfem::SparseMatrix::OwnsData ( ) const
inline

Get the data ownership flag (A array).

Definition at line 511 of file sparsemat.hpp.

 bool mfem::SparseMatrix::OwnsGraph ( ) const
inline

Get the graph ownership flag (I and J arrays).

Definition at line 508 of file sparsemat.hpp.

 void mfem::SparseMatrix::PartAddMult ( const Array< int > & rows, const Vector & x, Vector & y, const double a = 1.0 ) const

Definition at line 708 of file sparsemat.cpp.

 void mfem::SparseMatrix::PartMult ( const Array< int > & rows, const Vector & x, Vector & y ) const

Definition at line 682 of file sparsemat.cpp.

 void mfem::SparseMatrix::Print ( std::ostream & out = mfem::out, int width_ = 4 ) const
virtual

Prints matrix to stream out.

Reimplemented from mfem::Matrix.

Definition at line 2687 of file sparsemat.cpp.

 void mfem::SparseMatrix::PrintCSR ( std::ostream & out ) const

Prints matrix to stream out in hypre_CSRMatrix format.

Definition at line 2773 of file sparsemat.cpp.

 void mfem::SparseMatrix::PrintCSR2 ( std::ostream & out ) const

Prints a sparse matrix to stream out in CSR format.

Definition at line 2797 of file sparsemat.cpp.

 void mfem::SparseMatrix::PrintInfo ( std::ostream & out ) const

Print various sparse matrix staticstics.

Definition at line 2822 of file sparsemat.cpp.

 void mfem::SparseMatrix::PrintMatlab ( std::ostream & out = mfem::out ) const

Prints matrix in matlab format.

Definition at line 2731 of file sparsemat.cpp.

 void mfem::SparseMatrix::PrintMM ( std::ostream & out = mfem::out ) const

Prints matrix in Matrix Market sparse format.

Definition at line 2751 of file sparsemat.cpp.

 void mfem::SparseMatrix::ResetTranspose ( ) const

Reset (destroy) the internal transpose matrix. See BuildTranspose() for more details.

Definition at line 676 of file sparsemat.cpp.

 bool mfem::SparseMatrix::RowIsEmpty ( const int row ) const

Definition at line 2359 of file sparsemat.cpp.

 int mfem::SparseMatrix::RowSize ( const int i ) const

Returns the number of elements in row i.

Definition at line 252 of file sparsemat.cpp.

 void mfem::SparseMatrix::ScaleColumns ( const Vector & sr )

this = this * diag(sr);

Definition at line 2558 of file sparsemat.cpp.

 void mfem::SparseMatrix::ScaleRow ( const int row, const double scale )

Definition at line 2499 of file sparsemat.cpp.

 void mfem::SparseMatrix::ScaleRows ( const Vector & sl )

this = diag(sl) * this;

Definition at line 2527 of file sparsemat.cpp.

 double & mfem::SparseMatrix::SearchRow ( const int col )
inline

Perform a fast search for an entry in the "current row". See SetColPtr().

If the matrix is not finalized and the entry is not found in the SparseMatrix, it will be added to the sparsity pattern initialized with zero. If the matrix is finalized and the entry is not found, an error will be generated.

Definition at line 653 of file sparsemat.hpp.

 double & mfem::SparseMatrix::SearchRow ( const int row, const int col )
inline

Definition at line 694 of file sparsemat.hpp.

 void mfem::SparseMatrix::Set ( const int i, const int j, const double a )

Definition at line 2225 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetColPtr ( const int row ) const
inline

Initialize the SparseMatrix for fast access to the entries of the given row which becomes the "current row".

Fast access to the entries of the "current row" can be performed using the methods: SearchRow(const int), Add(const int, const double), Set(const int, const double), and Get(const int).

Definition at line 599 of file sparsemat.hpp.

 void mfem::SparseMatrix::SetDataOwner ( bool owna )
inline

Set the data ownership flag (A array).

Definition at line 505 of file sparsemat.hpp.

 void mfem::SparseMatrix::SetDiagIdentity ( )

If a row contains only one diag entry of zero, set it to 1.

Definition at line 1846 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetEmpty ( )
protected

Definition at line 235 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetGraphOwner ( bool ownij )
inline

Set the graph ownership flag (I and J arrays).

Definition at line 501 of file sparsemat.hpp.

 void mfem::SparseMatrix::SetRow ( const int row, const Array< int > & cols, const Vector & srow )

Definition at line 2420 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetSubMatrix ( const Array< int > & rows, const Array< int > & cols, const DenseMatrix & subm, int skip_zeros = 1 )

Definition at line 2263 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetSubMatrixTranspose ( const Array< int > & rows, const Array< int > & cols, const DenseMatrix & subm, int skip_zeros = 1 )

Definition at line 2296 of file sparsemat.cpp.

 void mfem::SparseMatrix::SetWidth ( int width_ = -1 )

Change the width of a SparseMatrix.

If width_ = -1 (DEFAULT), this routine will set the new width to the actual Width of the matrix awidth = max(J) + 1. Values 0 <= width_ < awidth are not allowed (error check in Debug Mode only)

This method can be called for matrices finalized or not.

Definition at line 327 of file sparsemat.cpp.

 int mfem::SparseMatrix::Size ( ) const
inline

For backward compatibility, define Size() to be synonym of Height().

Definition at line 132 of file sparsemat.hpp.

 void mfem::SparseMatrix::SortColumnIndices ( )

Sort the column indices corresponding to each row.

Definition at line 365 of file sparsemat.cpp.

 void mfem::SparseMatrix::Swap ( SparseMatrix & other )

Definition at line 3617 of file sparsemat.cpp.

 void mfem::SparseMatrix::Symmetrize ( )

(*this) = 1/2 ((*this) + (*this)^t)

Definition at line 1140 of file sparsemat.cpp.

 void mfem::SparseMatrix::Threshold ( double tol, bool fix_empty_rows = false )

Remove entries smaller in absolute value than a given tolerance tol. If fix_empty_rows is true, a zero value is inserted in the diagonal entry (for square matrices only)

Definition at line 867 of file sparsemat.cpp.

 DenseMatrix * mfem::SparseMatrix::ToDenseMatrix ( ) const

Produces a DenseMatrix from a SparseMatrix.

Definition at line 515 of file sparsemat.cpp.

 void mfem::SparseMatrix::ToDenseMatrix ( DenseMatrix & B ) const

Produces a DenseMatrix from a SparseMatrix.

Definition at line 528 of file sparsemat.cpp.

## Member Data Documentation

 Memory mfem::SparseMatrix::A
protected

Array with size I[height], containing the actual entries of the sparse matrix, as indexed by the I array.

Definition at line 58 of file sparsemat.hpp.

 SparseMatrix* mfem::SparseMatrix::At
mutableprotected

Transpose of A. Owned. Used to perform MultTranspose() on devices.

Definition at line 70 of file sparsemat.hpp.

 int* mfem::SparseMatrix::ColPtrJ
mutableprotected

Definition at line 66 of file sparsemat.hpp.

 RowNode** mfem::SparseMatrix::ColPtrNode
mutableprotected

Definition at line 67 of file sparsemat.hpp.

 int mfem::SparseMatrix::current_row
mutableprotected

Definition at line 65 of file sparsemat.hpp.

 Memory mfem::SparseMatrix::I
protected

Array with size (height+1) containing the row offsets.

The data for row r, 0 <= r < height, is at offsets j, I[r] <= j < I[r+1]. The offsets, j, are indices in the J and A arrays. The first entry in this array is always zero, I[0] = 0, and the last entry, I[height], gives the total number of entries stored (at a minimum, all nonzeros must be represented) in the sparse matrix.

Definition at line 52 of file sparsemat.hpp.

 bool mfem::SparseMatrix::isSorted
protected

Definition at line 78 of file sparsemat.hpp.

 Memory mfem::SparseMatrix::J
protected

Array with size I[height], containing the column indices for all matrix entries, as indexed by the I array.

Definition at line 55 of file sparsemat.hpp.

 RowNodeAlloc* mfem::SparseMatrix::NodesMem
protected

Definition at line 74 of file sparsemat.hpp.

 RowNode** mfem::SparseMatrix::Rows
protected

Array of linked lists, one for every row. This array represents the linked list (LIL) storage format.

Definition at line 63 of file sparsemat.hpp.

The documentation for this class was generated from the following files: