Smith  0.1
Smith is an implicit thermal structural mechanics simulation code.
Public Member Functions | List of all members
smith::BlockSchurPreconditioner Class Reference

Simple 2x2 block Schur complement preconditioner for block systems. More...

#include <block_preconditioner.hpp>

Collaboration diagram for smith::BlockSchurPreconditioner:
Collaboration graph
[legend]

Public Member Functions

 BlockSchurPreconditioner (mfem::Array< int > &offsets, std::vector< std::unique_ptr< mfem::Solver >> solvers, BlockSchurType type=BlockSchurType::Diagonal, SchurApproxType approxType=SchurApproxType::DiagInv, std::vector< BlockOverride > overrides={})
 Construct a new 2x2 block Schur complement preconditioner. More...
 
virtual void Mult (const mfem::Vector &in, mfem::Vector &out) const
 The action of the precondition on the block vector (b_1, b_2) More...
 
virtual void SetOperator (const mfem::Operator &jacobian)
 Set the preconditioner to use the supplied linearized block Jacobian. More...
 

Detailed Description

Simple 2x2 block Schur complement preconditioner for block systems.

Uses two solvers, one for $ A_{11} $ and one for an approximate Schur complement $ S $. Call SetOperator() with an mfem::BlockOperator, then use Mult() to apply the selected Schur preconditioner type.

Definition at line 200 of file block_preconditioner.hpp.

Constructor & Destructor Documentation

◆ BlockSchurPreconditioner()

smith::BlockSchurPreconditioner::BlockSchurPreconditioner ( mfem::Array< int > &  offsets,
std::vector< std::unique_ptr< mfem::Solver >>  solvers,
BlockSchurType  type = BlockSchurType::Diagonal,
SchurApproxType  approxType = SchurApproxType::DiagInv,
std::vector< BlockOverride overrides = {} 
)

Construct a new 2x2 block Schur complement preconditioner.

Parameters
offsetsOffsets describing the 2-block layout.
solversTwo solvers, for $ A_{11} $ and the Schur complement approximation.
typePreconditioner variant (diagonal, lower, upper, or full).
approxTypeSchur complement approximation strategy for the (1,1) block.
overridesOptional list of (block index, operator) pairs used in place of the corresponding Jacobian diagonal block. For Schur systems, index 0 overrides $A_{11}$ and index 1 provides a custom Schur operator when approxType is SchurApproxType::Custom.

Definition at line 233 of file block_preconditioner.cpp.

Member Function Documentation

◆ Mult()

void smith::BlockSchurPreconditioner::Mult ( const mfem::Vector &  in,
mfem::Vector &  out 
) const
virtual

The action of the precondition on the block vector (b_1, b_2)

Parameters
inThe block input vector (b_1, b_2)
outThe block output vector P^-1(b_1, b_2)

Definition at line 304 of file block_preconditioner.cpp.

◆ SetOperator()

void smith::BlockSchurPreconditioner::SetOperator ( const mfem::Operator &  jacobian)
virtual

Set the preconditioner to use the supplied linearized block Jacobian.

The Schur complement approximation is given by S_approx = A22 - A21 * diag(A11)^{-1} * A12

Parameters
jacobianThe supplied linearized Jacobian. Note that it is always a block operator

Definition at line 393 of file block_preconditioner.cpp.


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