GEOSX
Public Types | Public Member Functions | List of all members
geos::BlockPreconditioner< LAI > Class Template Reference

General 2x2 block preconditioner. More...

#include <BlockPreconditioner.hpp>

Inheritance diagram for geos::BlockPreconditioner< LAI >:
Inheritance graph
[legend]

Public Types

using Base = PreconditionerBase< LAI >
 Alias for the base type.
 
using Vector = typename Base::Vector
 Alias for the vector type.
 
using Matrix = typename Base::Matrix
 Alias for the matrix type.
 
- Public Types inherited from geos::PreconditionerBase< LAI >
using Base = LinearOperator< typename LAI::ParallelVector >
 Alias for base type.
 
using Vector = typename Base::Vector
 Alias for vector type.
 
using Matrix = typename LAI::ParallelMatrix
 Alias for matrix type.
 
- Public Types inherited from geos::LinearOperator< LAI::ParallelVector >
using Vector = LAI::ParallelVector
 Alias for template parameter.
 

Public Member Functions

 BlockPreconditioner (BlockShapeOption const shapeOption, SchurComplementOption const schurOption, BlockScalingOption const scalingOption)
 Constructor. More...
 
virtual ~BlockPreconditioner () override
 Destructor.
 
void setupBlock (localIndex const blockIndex, std::vector< DofManager::SubComponent > blockDofs, std::unique_ptr< PreconditionerBase< LAI > > solver, real64 const scaling=1.0)
 Setup data for one of the two blocks. More...
 
PreconditionerBase interface methods
virtual void setup (Matrix const &mat) override
 Compute the preconditioner from a matrix. More...
 
virtual void apply (Vector const &src, Vector &dst) const override
 Apply operator to a vector. More...
 
virtual void clear () override
 Clean up the preconditioner setup. More...
 
- Public Member Functions inherited from geos::PreconditionerBase< LAI >
virtual void setup (Matrix const &mat)
 Compute the preconditioner from a matrix. More...
 
virtual globalIndex numGlobalRows () const override
 Get the number of global rows. More...
 
virtual globalIndex numGlobalCols () const override
 Get the number of global columns. More...
 
virtual localIndex numLocalRows () const override
 Get the number of local rows. More...
 
virtual localIndex numLocalCols () const override
 Get the number of local columns. More...
 
virtual MPI_Comm comm () const override
 Get the MPI communicator the matrix was created with. More...
 
bool ready () const
 Chech if preconditioner is ready to use. More...
 
const Matrixmatrix () const
 Access the matrix the preconditioner was computed from. More...
 
virtual bool hasPreconditionerMatrix () const
 Check whether the preconditioner is available in matrix (explicit) form. More...
 
virtual const MatrixpreconditionerMatrix () const
 Access the preconditioner in matrix form (whenever available). It must be overridden by the specific preconditioner. More...
 
- Public Member Functions inherited from geos::LinearOperator< LAI::ParallelVector >
 LinearOperator ()=default
 Constructor.
 
virtual ~LinearOperator ()=default
 Destructor.
 
virtual void apply (Vector const &src, Vector &dst) const=0
 Apply operator to a vector, dst = this(src). More...
 
virtual void residual (Vector const &x, Vector const &b, Vector &r) const
 Compute residual r = b - this(x). More...
 
virtual globalIndex numGlobalRows () const=0
 Get the number of global rows. More...
 
virtual globalIndex numGlobalCols () const=0
 Get the number of global columns. More...
 
virtual localIndex numLocalRows () const=0
 Get the number of local rows. More...
 
virtual localIndex numLocalCols () const=0
 Get the number of local columns. More...
 
virtual MPI_Comm comm () const=0
 Get the MPI communicator the matrix was created with. More...
 

Detailed Description

template<typename LAI>
class geos::BlockPreconditioner< LAI >

General 2x2 block preconditioner.

Template Parameters
LAItype of linear algebra interface providing matrix/vector types

Definition at line 100 of file BlockPreconditioner.hpp.

Constructor & Destructor Documentation

◆ BlockPreconditioner()

template<typename LAI >
geos::BlockPreconditioner< LAI >::BlockPreconditioner ( BlockShapeOption const  shapeOption,
SchurComplementOption const  schurOption,
BlockScalingOption const  scalingOption 
)
explicit

Constructor.

Parameters
shapeOptionpreconditioner block shape
schurOptiontype of Schur complement approximation to use
scalingOptiontype of scaling to apply to blocks

Member Function Documentation

◆ apply()

template<typename LAI >
virtual void geos::BlockPreconditioner< LAI >::apply ( Vector const &  src,
Vector dst 
) const
overridevirtual

Apply operator to a vector.

Parameters
srcInput vector (x).
dstOutput vector (b).
Warning
src and dst cannot alias the same vector (some implementations may allow this).

◆ clear()

template<typename LAI >
virtual void geos::BlockPreconditioner< LAI >::clear ( )
overridevirtual

Clean up the preconditioner setup.

Releases memory used and allows the matrix to be deleted cleanly. This method should be called before the matrix used to compute the preconditioner goes out of scope or is re-created. Some implementations require the matrix to outlive the preconditioner (for example, Trilinos/ML may crash the program if deleted after the matrix).

Note
Should be properly overridden in derived classes, which may call this method.

Reimplemented from geos::PreconditionerBase< LAI >.

◆ setup()

template<typename LAI >
virtual void geos::BlockPreconditioner< LAI >::setup ( Matrix const &  mat)
overridevirtual

Compute the preconditioner from a matrix.

Parameters
matthe matrix to precondition

◆ setupBlock()

template<typename LAI >
void geos::BlockPreconditioner< LAI >::setupBlock ( localIndex const  blockIndex,
std::vector< DofManager::SubComponent blockDofs,
std::unique_ptr< PreconditionerBase< LAI > >  solver,
real64 const  scaling = 1.0 
)

Setup data for one of the two blocks.

Parameters
blockIndexindex of the block to set up
blockDofschoice of DoF components (from a monolithic system)
solverinstance of the inner preconditioner for the block
scalinguser-provided row scaling coefficient for this block
Note
While not strictly required, it is generally expected that blockDofs of the two blocks are non-overlapping and their union includes all DoF components in the monolithic system.

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