MFEM
v4.0
Finite element discretization library
|
Mimic the action of a complex operator using two real operators. More...
#include <complex_operator.hpp>
Public Types | |
enum | Convention { HERMITIAN, BLOCK_SYMMETRIC } |
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... | |
Public Member Functions | |
ComplexOperator (Operator *Op_Real, Operator *Op_Imag, bool ownReal, bool ownImag, Convention convention=HERMITIAN) | |
Constructs complex operator object. More... | |
virtual | ~ComplexOperator () |
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... | |
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... | |
Protected Member Functions | |
void | Mult (const Vector &x_r, const Vector &x_i, Vector &y_r, Vector &y_i) const |
void | MultTranspose (const Vector &x_r, const Vector &x_i, Vector &y_r, Vector &y_i) const |
Protected Attributes | |
Operator * | Op_Real_ |
Operator * | Op_Imag_ |
bool | ownReal_ |
bool | ownImag_ |
Convention | convention_ |
Vector | x_r_ |
Vector | x_i_ |
Vector | y_r_ |
Vector | y_i_ |
Vector * | u_ |
Vector * | v_ |
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... | |
Mimic the action of a complex operator using two real operators.
This operator requires vectors that are twice the length of its internally stored real operators, Op_Real and Op_Imag. It is assumed that these vectors store the real part of the vector first followed by its imaginary part.
ComplexOperator allows one to choose a convention upon construction, which facilitates symmetry.
Matrix-vector products are then computed as:
Either convention can be used with a given complex operator, however, each of them is best suited for certain classes of problems. For example:
Note: this class cannot be used to represent a general nonlinear complex operator.
Definition at line 59 of file complex_operator.hpp.
Enumerator | |
---|---|
HERMITIAN |
Native convention for Hermitian operators. |
BLOCK_SYMMETRIC |
Alternate convention for damping operators. |
Definition at line 62 of file complex_operator.hpp.
mfem::ComplexOperator::ComplexOperator | ( | Operator * | Op_Real, |
Operator * | Op_Imag, | ||
bool | ownReal, | ||
bool | ownImag, | ||
Convention | convention = HERMITIAN |
||
) |
Constructs complex operator object.
Note that either Op_Real
or Op_Imag
can be NULL, thus eliminating their action (see documentation of the class for more details).
In case ownership of the passed operator is transferred to this class through ownReal
and ownImag
, the operators will be explicitly destroyed at the end of the life of this object.
Definition at line 17 of file complex_operator.cpp.
|
virtual |
Definition at line 34 of file complex_operator.cpp.
Operator application: y=A(x)
.
Implements mfem::Operator.
Definition at line 42 of file complex_operator.cpp.
|
protected |
Definition at line 54 of file complex_operator.cpp.
Action of the transpose operator: y=A^t(x)
. The default behavior in class Operator is to generate an error.
Reimplemented from mfem::Operator.
Definition at line 82 of file complex_operator.cpp.
|
protected |
Definition at line 94 of file complex_operator.cpp.
|
protected |
Definition at line 103 of file complex_operator.hpp.
|
protected |
Definition at line 98 of file complex_operator.hpp.
|
protected |
Definition at line 97 of file complex_operator.hpp.
|
protected |
Definition at line 101 of file complex_operator.hpp.
|
protected |
Definition at line 100 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 106 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 106 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 105 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 105 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 105 of file complex_operator.hpp.
|
mutableprotected |
Definition at line 105 of file complex_operator.hpp.