MFEM v4.7.0
Finite element discretization library
Loading...
Searching...
No Matches
mfem::ParBlockNonlinearForm Class Reference

A class representing a general parallel block nonlinear operator defined on the Cartesian product of multiple ParFiniteElementSpaces. More...

#include <pnonlinearform.hpp>

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

Public Member Functions

virtual real_t GetEnergy (const Vector &x) const
 Computes the energy of the system.
 
 ParBlockNonlinearForm ()
 Construct an empty ParBlockNonlinearForm. Initialize with SetParSpaces().
 
 ParBlockNonlinearForm (Array< ParFiniteElementSpace * > &pf)
 Construct a ParBlockNonlinearForm on the given set of ParFiniteElementSpaces.
 
ParFiniteElementSpaceParFESpace (int k)
 Return the k-th parallel FE space of the ParBlockNonlinearForm.
 
const ParFiniteElementSpaceParFESpace (int k) const
 Return the k-th parallel FE space of the ParBlockNonlinearForm (const version).
 
void SetParSpaces (Array< ParFiniteElementSpace * > &pf)
 After a call to SetParSpaces(), the essential b.c. and the gradient-type (if different from the default) must be set again.
 
virtual void SetEssentialBC (const Array< Array< int > * > &bdr_attr_is_ess, Array< Vector * > &rhs)
 
virtual void Mult (const Vector &x, Vector &y) const
 Block T-Vector to Block T-Vector.
 
const BlockOperatorGetLocalGradient (const Vector &x) const
 Return the local block gradient matrix for the given true-dof vector x.
 
virtual BlockOperatorGetGradient (const Vector &x) const
 
void SetGradientType (Operator::Type tid)
 Set the operator type id for the blocks of the parallel gradient matrix/operator. The default type is Operator::Hypre_ParCSR.
 
virtual ~ParBlockNonlinearForm ()
 Destructor.
 
- Public Member Functions inherited from mfem::BlockNonlinearForm
 BlockNonlinearForm ()
 Construct an empty BlockNonlinearForm. Initialize with SetSpaces().
 
 BlockNonlinearForm (Array< FiniteElementSpace * > &f)
 Construct a BlockNonlinearForm on the given set of FiniteElementSpaces.
 
FiniteElementSpaceFESpace (int k)
 Return the k-th FE space of the BlockNonlinearForm.
 
const FiniteElementSpaceFESpace (int k) const
 Return the k-th FE space of the BlockNonlinearForm (const version).
 
void SetSpaces (Array< FiniteElementSpace * > &f)
 (Re)initialize the BlockNonlinearForm.
 
const Array< int > & GetBlockOffsets () const
 Return the regular dof offsets.
 
const Array< int > & GetBlockTrueOffsets () const
 Return the true-dof offsets.
 
void AddDomainIntegrator (BlockNonlinearFormIntegrator *nlfi)
 Adds new Domain Integrator.
 
void AddDomainIntegrator (BlockNonlinearFormIntegrator *nlfi, Array< int > &elem_marker)
 Adds new Domain Integrator, restricted to specific attributes.
 
void AddBoundaryIntegrator (BlockNonlinearFormIntegrator *nlfi)
 Adds new Boundary Integrator.
 
void AddBoundaryIntegrator (BlockNonlinearFormIntegrator *nlfi, Array< int > &elem_marker)
 Adds new Boundary Integrator, restricted to specific attributes.
 
void AddInteriorFaceIntegrator (BlockNonlinearFormIntegrator *nlfi)
 Adds new Interior Face Integrator.
 
void AddBdrFaceIntegrator (BlockNonlinearFormIntegrator *nlfi)
 Adds new Boundary Face Integrator.
 
void AddBdrFaceIntegrator (BlockNonlinearFormIntegrator *nlfi, Array< int > &bdr_marker)
 Adds new Boundary Face Integrator, restricted to specific boundary attributes.
 
virtual ~BlockNonlinearForm ()
 Destructor.
 
- Public Member Functions inherited from mfem::Operator
void InitTVectors (const Operator *Po, const Operator *Ri, const Operator *Pi, Vector &x, Vector &b, Vector &X, Vector &B) const
 Initializes memory for true vectors of linear system.
 
 Operator (int s=0)
 Construct a square Operator with given size s (default 0).
 
 Operator (int h, int w)
 Construct an Operator with the given height (output size) and width (input size).
 
int Height () const
 Get the height (size of output) of the Operator. Synonym with NumRows().
 
int NumRows () const
 Get the number of rows (size of output) of the Operator. Synonym with Height().
 
int Width () const
 Get the width (size of input) of the Operator. Synonym with NumCols().
 
int NumCols () const
 Get the number of columns (size of input) of the Operator. Synonym with Width().
 
virtual MemoryClass GetMemoryClass () const
 Return the MemoryClass preferred by the Operator.
 
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.
 
virtual void AddMult (const Vector &x, Vector &y, const real_t a=1.0) const
 Operator application: y+=A(x) (default) or y+=a*A(x).
 
virtual void AddMultTranspose (const Vector &x, Vector &y, const real_t a=1.0) const
 Operator transpose application: y+=A^t(x) (default) or y+=a*A^t(x).
 
virtual void ArrayMult (const Array< const Vector * > &X, Array< Vector * > &Y) const
 Operator application on a matrix: Y=A(X).
 
virtual void ArrayMultTranspose (const Array< const Vector * > &X, Array< Vector * > &Y) const
 Action of the transpose operator on a matrix: Y=A^t(X).
 
virtual void ArrayAddMult (const Array< const Vector * > &X, Array< Vector * > &Y, const real_t a=1.0) const
 Operator application on a matrix: Y+=A(X) (default) or Y+=a*A(X).
 
virtual void ArrayAddMultTranspose (const Array< const Vector * > &X, Array< Vector * > &Y, const real_t a=1.0) const
 Operator transpose application on a matrix: Y+=A^t(X) (default) or Y+=a*A^t(X).
 
virtual void AssembleDiagonal (Vector &diag) const
 Computes the diagonal entries into diag. Typically, this operation only makes sense for linear Operators. In some cases, only an approximation of the diagonal is computed.
 
virtual const OperatorGetProlongation () const
 Prolongation operator from linear algebra (linear system) vectors, to input vectors for the operator. NULL means identity.
 
virtual const OperatorGetRestriction () const
 Restriction operator from input vectors for the operator to linear algebra (linear system) vectors. NULL means identity.
 
virtual const OperatorGetOutputProlongation () const
 Prolongation operator from linear algebra (linear system) vectors, to output vectors for the operator. NULL means identity.
 
virtual const OperatorGetOutputRestrictionTranspose () const
 Transpose of GetOutputRestriction, directly available in this form to facilitate matrix-free RAP-type operators.
 
virtual const OperatorGetOutputRestriction () const
 Restriction operator from output vectors for the operator to linear algebra (linear system) vectors. NULL means identity.
 
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.
 
void FormRectangularLinearSystem (const Array< int > &trial_tdof_list, const Array< int > &test_tdof_list, Vector &x, Vector &b, Operator *&A, Vector &X, Vector &B)
 Form a column-constrained linear system using a matrix-free approach.
 
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() or Operator::FormRectangularLinearSystem().
 
void FormSystemOperator (const Array< int > &ess_tdof_list, Operator *&A)
 Return in A a parallel (on truedofs) version of this square operator.
 
void FormRectangularSystemOperator (const Array< int > &trial_tdof_list, const Array< int > &test_tdof_list, Operator *&A)
 Return in A a parallel (on truedofs) version of this rectangular operator (including constraints).
 
void FormDiscreteOperator (Operator *&A)
 Return in A a parallel (on truedofs) version of this rectangular operator.
 
void PrintMatlab (std::ostream &out, int n, int m=0) const
 Prints operator with input size n and output size m in Matlab format.
 
virtual void PrintMatlab (std::ostream &out) const
 Prints operator in Matlab format.
 
virtual ~Operator ()
 Virtual destructor.
 
Type GetType () const
 Return the type ID of the Operator class.
 

Protected Attributes

BlockVector xs_true
 
BlockVector ys_true
 
Array2D< OperatorHandle * > phBlockGrad
 
BlockOperatorpBlockGrad
 
- Protected Attributes inherited from mfem::BlockNonlinearForm
Array< FiniteElementSpace * > fes
 FE spaces on which the form lives.
 
Array< BlockNonlinearFormIntegrator * > dnfi
 Set of Domain Integrators to be assembled (added).
 
Array< Array< int > * > dnfi_marker
 
Array< BlockNonlinearFormIntegrator * > bnfi
 Set of Boundary Integrators to be assembled (added).
 
Array< Array< int > * > bnfi_marker
 
Array< BlockNonlinearFormIntegrator * > fnfi
 Set of interior face Integrators to be assembled (added).
 
Array< BlockNonlinearFormIntegrator * > bfnfi
 Set of Boundary Face Integrators to be assembled (added).
 
Array< Array< int > * > bfnfi_marker
 
BlockVector xs
 
BlockVector ys
 
Array2D< SparseMatrix * > Grads
 
Array2D< SparseMatrix * > cGrads
 
BlockOperatorBlockGrad
 
Array< int > block_offsets
 
Array< int > block_trueOffsets
 
Array< Array< int > * > ess_tdofs
 
Array< const Operator * > P
 Array of pointers to the prolongation matrix of fes, may be NULL.
 
Array< const SparseMatrix * > cP
 Array of results of dynamic-casting P to SparseMatrix pointer.
 
bool is_serial = true
 Indicator if the Operator is part of a parallel run.
 
bool needs_prolongation = false
 Indicator if the Operator needs prolongation on assembly.
 
BlockVector aux1
 
BlockVector aux2
 
- Protected Attributes inherited from mfem::Operator
int height
 Dimension of the output / number of rows in the matrix.
 
int width
 Dimension of the input / number of columns in the matrix.
 

Additional Inherited Members

- Public Types inherited from mfem::Operator
enum  DiagonalPolicy { DIAG_ZERO , DIAG_ONE , DIAG_KEEP }
 Defines operator diagonal policy upon elimination of rows and/or columns. More...
 
enum  Type {
  ANY_TYPE , MFEM_SPARSEMAT , Hypre_ParCSR , PETSC_MATAIJ ,
  PETSC_MATIS , PETSC_MATSHELL , PETSC_MATNEST , PETSC_MATHYPRE ,
  PETSC_MATGENERIC , Complex_Operator , MFEM_ComplexSparseMat , Complex_Hypre_ParCSR ,
  Complex_DenseMat , MFEM_Block_Matrix , MFEM_Block_Operator
}
 Enumeration defining IDs for some classes derived from Operator. More...
 
- Protected Member Functions inherited from mfem::BlockNonlinearForm
const BlockVectorProlongate (const BlockVector &bx) const
 
real_t GetEnergyBlocked (const BlockVector &bx) const
 Specialized version of GetEnergy() for BlockVectors.
 
void MultBlocked (const BlockVector &bx, BlockVector &by) const
 
void ComputeGradientBlocked (const BlockVector &bx) const
 Specialized version of GetGradient() for BlockVector.
 
- Protected Member Functions inherited from mfem::Operator
void FormConstrainedSystemOperator (const Array< int > &ess_tdof_list, ConstrainedOperator *&Aout)
 see FormSystemOperator()
 
void FormRectangularConstrainedSystemOperator (const Array< int > &trial_tdof_list, const Array< int > &test_tdof_list, RectangularConstrainedOperator *&Aout)
 see FormRectangularSystemOperator()
 
OperatorSetupRAP (const Operator *Pi, const Operator *Po)
 Returns RAP Operator of this, using input/output Prolongation matrices Pi corresponds to "P", Po corresponds to "Rt".
 

Detailed Description

A class representing a general parallel block nonlinear operator defined on the Cartesian product of multiple ParFiniteElementSpaces.

The ParBlockNonlinearForm takes as input, and returns as output, vectors on the true dofs.

Definition at line 77 of file pnonlinearform.hpp.

Constructor & Destructor Documentation

◆ ParBlockNonlinearForm() [1/2]

mfem::ParBlockNonlinearForm::ParBlockNonlinearForm ( )
inline

Construct an empty ParBlockNonlinearForm. Initialize with SetParSpaces().

Definition at line 89 of file pnonlinearform.hpp.

◆ ParBlockNonlinearForm() [2/2]

mfem::ParBlockNonlinearForm::ParBlockNonlinearForm ( Array< ParFiniteElementSpace * > & pf)

Construct a ParBlockNonlinearForm on the given set of ParFiniteElementSpaces.

Definition at line 151 of file pnonlinearform.cpp.

◆ ~ParBlockNonlinearForm()

mfem::ParBlockNonlinearForm::~ParBlockNonlinearForm ( )
virtual

Destructor.

Definition at line 383 of file pnonlinearform.cpp.

Member Function Documentation

◆ GetEnergy()

real_t mfem::ParBlockNonlinearForm::GetEnergy ( const Vector & x) const
virtual

Computes the energy of the system.

Reimplemented from mfem::BlockNonlinearForm.

Definition at line 220 of file pnonlinearform.cpp.

◆ GetGradient()

BlockOperator & mfem::ParBlockNonlinearForm::GetGradient ( const Vector & x) const
virtual

Method is only called in serial, the parallel version calls GetGradientBlocked directly.

Reimplemented from mfem::BlockNonlinearForm.

Definition at line 315 of file pnonlinearform.cpp.

◆ GetLocalGradient()

const BlockOperator & mfem::ParBlockNonlinearForm::GetLocalGradient ( const Vector & x) const

Return the local block gradient matrix for the given true-dof vector x.

Return the local gradient matrix for the given true-dof vector x.

Definition at line 274 of file pnonlinearform.cpp.

◆ Mult()

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

Block T-Vector to Block T-Vector.

Reimplemented from mfem::BlockNonlinearForm.

Definition at line 240 of file pnonlinearform.cpp.

◆ ParFESpace() [1/2]

ParFiniteElementSpace * mfem::ParBlockNonlinearForm::ParFESpace ( int k)

Return the k-th parallel FE space of the ParBlockNonlinearForm.

Definition at line 191 of file pnonlinearform.cpp.

◆ ParFESpace() [2/2]

const ParFiniteElementSpace * mfem::ParBlockNonlinearForm::ParFESpace ( int k) const

Return the k-th parallel FE space of the ParBlockNonlinearForm (const version).

Definition at line 196 of file pnonlinearform.cpp.

◆ SetEssentialBC()

void mfem::ParBlockNonlinearForm::SetEssentialBC ( const Array< Array< int > * > & bdr_attr_is_ess,
Array< Vector * > & rhs )
virtual

Reimplemented from mfem::BlockNonlinearForm.

Definition at line 202 of file pnonlinearform.cpp.

◆ SetGradientType()

void mfem::ParBlockNonlinearForm::SetGradientType ( Operator::Type tid)

Set the operator type id for the blocks of the parallel gradient matrix/operator. The default type is Operator::Hypre_ParCSR.

Definition at line 304 of file pnonlinearform.cpp.

◆ SetParSpaces()

void mfem::ParBlockNonlinearForm::SetParSpaces ( Array< ParFiniteElementSpace * > & pf)

After a call to SetParSpaces(), the essential b.c. and the gradient-type (if different from the default) must be set again.

Definition at line 158 of file pnonlinearform.cpp.

Member Data Documentation

◆ pBlockGrad

BlockOperator* mfem::ParBlockNonlinearForm::pBlockGrad
mutableprotected

Definition at line 82 of file pnonlinearform.hpp.

◆ phBlockGrad

Array2D<OperatorHandle *> mfem::ParBlockNonlinearForm::phBlockGrad
mutableprotected

Definition at line 81 of file pnonlinearform.hpp.

◆ xs_true

BlockVector mfem::ParBlockNonlinearForm::xs_true
mutableprotected

Definition at line 80 of file pnonlinearform.hpp.

◆ ys_true

BlockVector mfem::ParBlockNonlinearForm::ys_true
protected

Definition at line 80 of file pnonlinearform.hpp.


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