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.