MFEM
v3.3.2
Finite element discretization library
|
Wrapper for PETSc's matrix class. More...
#include <petsc.hpp>
Public Member Functions | |
PetscParMatrix () | |
Create an empty matrix to be used as a reference to an existing matrix. More... | |
PetscParMatrix (Mat a, bool ref=false) | |
Creates PetscParMatrix out of PETSc's Mat. More... | |
PetscParMatrix (const HypreParMatrix *ha, Operator::Type tid) | |
Convert a HypreParMatrix ha to a PetscParMatrix in the given PETSc format tid. More... | |
PetscParMatrix (MPI_Comm comm, const Operator *op, Operator::Type tid) | |
Convert an mfem::Operator into a PetscParMatrix in the given PETSc format tid. More... | |
PetscParMatrix (MPI_Comm comm, PetscInt glob_size, PetscInt *row_starts, SparseMatrix *diag, Operator::Type tid) | |
Creates block-diagonal square parallel matrix. More... | |
PetscParMatrix (MPI_Comm comm, PetscInt global_num_rows, PetscInt global_num_cols, PetscInt *row_starts, PetscInt *col_starts, SparseMatrix *diag, Operator::Type tid) | |
Creates block-diagonal rectangular parallel matrix. More... | |
virtual | ~PetscParMatrix () |
Calls PETSc's destroy function. More... | |
void | Mult (double a, const Vector &x, double b, Vector &y) const |
Matvec: y = a A x + b y. More... | |
void | MultTranspose (double a, const Vector &x, double b, Vector &y) const |
Matvec transpose: y = a A^T x + b y. More... | |
virtual void | Mult (const Vector &x, Vector &y) const |
Operator application: y=A(x) . More... | |
virtual void | MultTranspose (const Vector &x, Vector &y) const |
Action of the transpose operator: y=A^t(x) . The default behavior in class Operator is to generate an error. More... | |
MPI_Comm | GetComm () const |
Get the associated MPI communicator. More... | |
operator Mat () const | |
Typecasting to PETSc's Mat type. More... | |
PetscInt | GetNumRows () const |
Returns the local number of rows. More... | |
PetscInt | GetNumCols () const |
Returns the local number of columns. More... | |
PetscInt | M () const |
Returns the global number of rows. More... | |
PetscInt | N () const |
Returns the global number of columns. More... | |
PetscInt | GetGlobalNumRows () const |
Returns the global number of rows. More... | |
PetscInt | GetGlobalNumCols () const |
Returns the global number of columns. More... | |
PetscInt | NNZ () const |
Returns the number of nonzeros. More... | |
PetscParVector * | GetX () const |
Returns the inner vector in the domain of A (it creates it if needed) More... | |
PetscParVector * | GetY () const |
Returns the inner vector in the range of A (it creates it if needed) More... | |
PetscParMatrix * | Transpose (bool action=false) |
Returns the transpose of the PetscParMatrix. More... | |
void | Print (const char *fname=NULL, bool binary=false) const |
Prints the matrix (to stdout if fname is NULL) More... | |
void | operator*= (double s) |
Scale all entries by s: A_scaled = s*A. More... | |
void | EliminateRowsCols (const Array< int > &rows_cols, const PetscParVector &X, PetscParVector &B) |
Eliminate rows and columns from the matrix, and rows from the vector B. Modify B with the BC values in X. More... | |
void | EliminateRowsCols (const Array< int > &rows_cols, const HypreParVector &X, HypreParVector &B) |
PetscParMatrix * | EliminateRowsCols (const Array< int > &rows_cols) |
Eliminate rows and columns from the matrix and store the eliminated elements in a new matrix Ae (returned). More... | |
void | MakeRef (const PetscParMatrix &master) |
Makes this object a reference to another PetscParMatrix. More... | |
Mat | ReleaseMat (bool dereference) |
Release the PETSc Mat object. If dereference is true, decrement the refcount of the Mat object. More... | |
Type | GetType () const |
Assignment operators | |
PetscParMatrix & | operator= (const PetscParMatrix &B) |
PetscParMatrix & | operator= (const HypreParMatrix &B) |
PetscParMatrix & | operator+= (const PetscParMatrix &B) |
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 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... | |
Protected Member Functions | |
void | Init () |
Initialize with defaults. Does not initialize inherited members. More... | |
void | Destroy () |
Delete all owned data. Does not perform re-initialization with defaults. More... | |
void | MakeWrapper (MPI_Comm comm, const Operator *op, Mat *B) |
Creates a wrapper around a mfem::Operator op using PETSc's MATSHELL object and returns the Mat in B. More... | |
void | ConvertOperator (MPI_Comm comm, const Operator &op, Mat *B, Operator::Type tid) |
Protected Attributes | |
Mat | A |
The actual PETSc object. More... | |
PetscParVector * | X |
Auxiliary vectors for typecasting. More... | |
PetscParVector * | Y |
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... | |
Friends | |
class | PetscLinearSolver |
class | PetscPreconditioner |
Additional Inherited Members | |
Public Types inherited from mfem::Operator | |
enum | 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... | |
mfem::PetscParMatrix::PetscParMatrix | ( | ) |
mfem::PetscParMatrix::PetscParMatrix | ( | Mat | a, |
bool | ref = false |
||
) |
Creates PetscParMatrix out of PETSc's Mat.
[in] | a | The PETSc Mat object. |
[in] | ref | If true, we increase the reference count of a. |
mfem::PetscParMatrix::PetscParMatrix | ( | const HypreParMatrix * | ha, |
Operator::Type | tid | ||
) |
Convert a HypreParMatrix ha to a PetscParMatrix in the given PETSc format tid.
The supported type ids are: Operator::PETSC_MATAIJ, Operator::PETSC_MATIS, and Operator::PETSC_MATSHELL.
mfem::PetscParMatrix::PetscParMatrix | ( | MPI_Comm | comm, |
const Operator * | op, | ||
Operator::Type | tid | ||
) |
Convert an mfem::Operator into a PetscParMatrix in the given PETSc format tid.
If tid is Operator::PETSC_MATSHELL and op is not a PetscParMatrix, it converts any mfem::Operator op implementing Operator::Mult() and Operator::MultTranspose() into a PetscParMatrix. The Operator op should not be deleted while the constructed PetscParMatrix is used.
Otherwise, it tries to convert the operator in PETSc's classes.
In particular, if op is a BlockOperator, then a MATNEST Mat object is created using tid as the type for the blocks. Note that if op is already a PetscParMatrix of the same type as tid, the resulting PetscParMatrix will share the same Mat object
mfem::PetscParMatrix::PetscParMatrix | ( | MPI_Comm | comm, |
PetscInt | glob_size, | ||
PetscInt * | row_starts, | ||
SparseMatrix * | diag, | ||
Operator::Type | tid | ||
) |
Creates block-diagonal square parallel matrix.
The block-diagonal is given by diag which must be in CSR format (finalized). The new PetscParMatrix does not take ownership of any of the input arrays. The type id tid can be either PETSC_MATAIJ (parallel distributed CSR) or PETSC_MATIS.
mfem::PetscParMatrix::PetscParMatrix | ( | MPI_Comm | comm, |
PetscInt | global_num_rows, | ||
PetscInt | global_num_cols, | ||
PetscInt * | row_starts, | ||
PetscInt * | col_starts, | ||
SparseMatrix * | diag, | ||
Operator::Type | tid | ||
) |
Creates block-diagonal rectangular parallel matrix.
The block-diagonal is given by diag which must be in CSR format (finalized). The new PetscParMatrix does not take ownership of any of the input arrays. The type id tid can be either PETSC_MATAIJ (parallel distributed CSR) or PETSC_MATIS.
|
inlinevirtual |
|
protected |
Convert an mfem::Operator into a Mat B; op can be destroyed unless tid == PETSC_MATSHELL if op is a BlockOperator, the operator type is relevant to the individual blocks
|
protected |
void mfem::PetscParMatrix::EliminateRowsCols | ( | const Array< int > & | rows_cols, |
const PetscParVector & | X, | ||
PetscParVector & | B | ||
) |
void mfem::PetscParMatrix::EliminateRowsCols | ( | const Array< int > & | rows_cols, |
const HypreParVector & | X, | ||
HypreParVector & | B | ||
) |
PetscParMatrix * mfem::PetscParMatrix::EliminateRowsCols | ( | const Array< int > & | rows_cols | ) |
|
inline |
|
inline |
|
inline |
PetscInt mfem::PetscParMatrix::GetNumCols | ( | ) | const |
PetscInt mfem::PetscParMatrix::GetNumRows | ( | ) | const |
Operator::Type mfem::PetscParMatrix::GetType | ( | ) | const |
PetscParVector * mfem::PetscParMatrix::GetX | ( | ) | const |
PetscParVector * mfem::PetscParMatrix::GetY | ( | ) | const |
|
protected |
PetscInt mfem::PetscParMatrix::M | ( | ) | const |
void mfem::PetscParMatrix::MakeRef | ( | const PetscParMatrix & | master | ) |
Makes this object a reference to another PetscParMatrix.
|
protected |
Creates a wrapper around a mfem::Operator op using PETSc's MATSHELL object and returns the Mat in B.
This does not take any reference to op, that should not be destroyed until B is needed.
|
inlinevirtual |
Action of the transpose operator: y=A^t(x)
. The default behavior in class Operator is to generate an error.
Reimplemented from mfem::Operator.
PetscInt mfem::PetscParMatrix::N | ( | ) | const |
PetscInt mfem::PetscParMatrix::NNZ | ( | ) | const |
|
inline |
void mfem::PetscParMatrix::operator*= | ( | double | s | ) |
PetscParMatrix & mfem::PetscParMatrix::operator+= | ( | const PetscParMatrix & | B | ) |
PetscParMatrix & mfem::PetscParMatrix::operator= | ( | const PetscParMatrix & | B | ) |
PetscParMatrix & mfem::PetscParMatrix::operator= | ( | const HypreParMatrix & | B | ) |
void mfem::PetscParMatrix::Print | ( | const char * | fname = NULL , |
bool | binary = false |
||
) | const |
Mat mfem::PetscParMatrix::ReleaseMat | ( | bool | dereference | ) |
PetscParMatrix * mfem::PetscParMatrix::Transpose | ( | bool | action = false | ) |
Returns the transpose of the PetscParMatrix.
If action is false, the new matrix is constructed with the PETSc function MatTranspose(). If action is true, then the matrix is not actually transposed. Instead, an object that behaves like the transpose is returned.
|
friend |
|
friend |
|
protected |
|
mutableprotected |
|
mutableprotected |