19 #ifndef GEOSX_LINEARALGEBRA_SOLVERS_BLOCKPRECONDITIONER_HPP_ 20 #define GEOSX_LINEARALGEBRA_SOLVERS_BLOCKPRECONDITIONER_HPP_ 23 #include "linearAlgebra/solvers/PreconditionerBase.hpp" 99 template<
typename LAI >
140 std::vector< DofManager::SubComponent > blockDofs,
142 real64 const scaling = 1.0 );
156 virtual void compute(
Matrix const & mat,
166 virtual void apply(
Vector const & src,
Vector & dst )
const override;
168 virtual void clear()
override;
184 void applyBlockScaling();
189 void computeSchurComplement();
201 std::array< std::vector< DofManager::SubComponent >, 2 > m_blockDofs;
204 std::array< Matrix, 2 > m_restrictors;
207 std::array< Matrix, 2 > m_prolongators;
213 std::array< std::unique_ptr< PreconditionerBase< LAI > >, 2 > m_solvers;
216 std::array< real64, 2 > m_scaling;
227 #endif //GEOSX_LINEARALGEBRA_SOLVERS_BLOCKPRECONDITIONER_HPP_ BlockScalingOption
Type of block row scaling to apply.
Rowsum-preserving diagonal approximation constructed with probing.
Common interface for preconditioning operators.
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns, and generally simplifying the interaction between PhysicsSolvers and linear algebra operations.
SchurComplementOption
Type of Schur complement approximation used.
double real64
64-bit floating point type.
User defined preconditioner for the first block.
typename Base::Vector Vector
Alias for the vector type.
typename Base::Matrix Matrix
Alias for the matrix type.
Approximate first block with its diagonal.
typename LAI::ParallelMatrix Matrix
Alias for matrix type.
BlockShapeOption
Shape of the block preconditioner.
std::ptrdiff_t localIndex
Local index type (for indexing objects within an MPI partition).
General 2x2 block preconditioner.
Equilibrate Frobenius norm of the diagonal blocks.
typename Base::Vector Vector
Alias for vector type.
No Schur complement - just block-GS/block-Jacobi preconditioner.