20 #ifndef GEOS_LINEARALGEBRA_SOLVERS_BLOCKPRECONDITIONER_HPP_
21 #define GEOS_LINEARALGEBRA_SOLVERS_BLOCKPRECONDITIONER_HPP_
24 #include "linearAlgebra/common/PreconditionerBase.hpp"
68 template<
typename LAI >
102 real64 const scaling = 1.0 );
118 std::vector< DofManager::SubComponent > blockDofs,
120 real64 const scaling = 1.0 );
168 void reinitialize(
Matrix const & mat );
173 void applyBlockScaling();
178 void computeSchurComplement();
184 std::array< stdVector< DofManager::SubComponent >, 2 > m_blockDofs{};
187 std::array< Matrix const *, 2 > m_prolongators{};
190 std::array< Matrix, 2 > m_prolongatorsOwned{};
196 std::array< PreconditionerBase< LAI > *, 2 > m_solvers{};
199 std::array< std::unique_ptr< PreconditionerBase< LAI > >, 2 > m_solversOwned{};
202 std::array< real64, 2 > m_scaling{};
General 2x2 block preconditioner.
void setupBlock(localIndex const blockIndex, std::vector< DofManager::SubComponent > blockDofs, PreconditionerBase< LAI > *const solver, real64 const scaling=1.0)
Setup data for one of the two blocks.
void setProlongation(localIndex const blockIndex, Matrix const &P)
Set user-provided prolongation operator for a block.
BlockPreconditioner(LinearSolverParameters::Block params)
Constructor.
void setupBlock(localIndex const blockIndex, stdVector< DofManager::SubComponent > blockDofs, std::unique_ptr< PreconditionerBase< LAI > > solver, real64 const scaling=1.0)
Setup data for one of the two blocks.
virtual void clear() override
Clean up the preconditioner setup.
typename Base::Vector Vector
Alias for the vector type.
BlockOperator< Vector, Matrix > const & blocks() const
typename Base::Matrix Matrix
Alias for the matrix type.
virtual void apply(Vector const &src, Vector &dst) const override
Apply operator to a vector.
virtual void setup(Matrix const &mat) override
Compute the preconditioner from a matrix.
Abstract base class for linear operators.
Common interface for preconditioning operators.
typename Base::Vector Vector
Alias for vector type.
typename LAI::ParallelMatrix Matrix
Alias for matrix type.
double real64
64-bit floating point type.
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
internal::StdVectorWrapper< T, Allocator, USE_STD_CONTAINER_BOUNDS_CHECKING > stdVector
Block preconditioner parameters.