GEOS
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
geos::KrylovSolver< VECTOR > Class Template Referenceabstract

Base class for Krylov solvers. More...

#include <KrylovSolver.hpp>

Inheritance diagram for geos::KrylovSolver< VECTOR >:
Inheritance graph
[legend]

Public Types

using Base = LinearOperator< VECTOR >
 Base type.
 
using Vector = typename Base::Vector
 Alias for template parameter.
 
- Public Types inherited from geos::LinearOperator< VECTOR >
using Vector = VECTOR
 Alias for template parameter.
 

Public Member Functions

 KrylovSolver (LinearSolverParameters params, LinearOperator< Vector > const &matrix, LinearOperator< Vector > const &precond)
 Constructor. More...
 
virtual ~KrylovSolver () override=default
 Virtual destructor.
 
virtual void solve (Vector const &b, Vector &x) const =0
 Solve preconditioned system. More...
 
virtual void apply (Vector const &src, Vector &dst) const override final
 Apply operator to a vector. More...
 
virtual globalIndex numGlobalRows () const override final
 Get the number of global rows. More...
 
virtual globalIndex numGlobalCols () const override final
 Get the number of global columns. More...
 
virtual localIndex numLocalRows () const override final
 Get the number of local rows. More...
 
virtual localIndex numLocalCols () const override final
 Get the number of local columns. More...
 
virtual MPI_Comm comm () const override final
 Get the MPI communicator the matrix was created with. More...
 
LinearSolverParameters const & parameters () const
 
LinearSolverResult const & result () const
 
arrayView1d< real64 const > history () const
 Get convergence history of a linear solve. More...
 
virtual string methodName () const =0
 Get name of the Krylov subspace method. More...
 
- Public Member Functions inherited from geos::LinearOperator< VECTOR >
 LinearOperator ()=default
 Constructor.
 
virtual ~LinearOperator ()=default
 Destructor.
 
virtual void residual (Vector const &x, Vector const &b, Vector &r) const
 Compute residual r = b - this(x). More...
 

Static Public Member Functions

static std::unique_ptr< KrylovSolver< VECTOR > > create (LinearSolverParameters const &parameters, LinearOperator< VECTOR > const &matrix, LinearOperator< VECTOR > const &precond)
 Factory method for instantiating Krylov solver objects. More...
 

Protected Types

using VectorTemp = typename VectorStorageHelper< VECTOR >::type
 Alias for vector type that can be used for temporaries.
 

Protected Member Functions

void logProgress () const
 Output iteration progress (called by implementations). More...
 
void logResult () const
 Output convergence result (called by implementations).
 

Static Protected Member Functions

static VectorTemp createTempVector (Vector const &src)
 Helper function to create temporary vectors based on a source vector. More...
 

Protected Attributes

LinearSolverParameters m_params
 parameters of the solver
 
LinearOperator< Vector > const & m_operator
 reference to the operator to be solved
 
LinearOperator< Vector > const & m_precond
 reference to the preconditioning operator
 
LinearSolverResult m_result
 results of a solve
 
array1d< real64m_residualNorms
 Absolute residual norms at each iteration (if available)
 

Detailed Description

template<typename VECTOR>
class geos::KrylovSolver< VECTOR >

Base class for Krylov solvers.

Template Parameters
VECTORtype of vector handled by this solver

Definition at line 33 of file KrylovSolver.hpp.

Constructor & Destructor Documentation

◆ KrylovSolver()

template<typename VECTOR >
geos::KrylovSolver< VECTOR >::KrylovSolver ( LinearSolverParameters  params,
LinearOperator< Vector > const &  matrix,
LinearOperator< Vector > const &  precond 
)

Constructor.

Parameters
[in]paramsparameters solver parameters
[in]matrixreference to the system matrix
[in]precondreference to the preconditioning operator

Member Function Documentation

◆ apply()

template<typename VECTOR >
virtual void geos::KrylovSolver< VECTOR >::apply ( Vector const &  src,
Vector dst 
) const
inlinefinaloverridevirtual

Apply operator to a vector.

Parameters
srcInput vector (src).
dstOutput vector (dst).

Implements geos::LinearOperator< VECTOR >.

Definition at line 83 of file KrylovSolver.hpp.

◆ comm()

template<typename VECTOR >
virtual MPI_Comm geos::KrylovSolver< VECTOR >::comm ( ) const
inlinefinaloverridevirtual

Get the MPI communicator the matrix was created with.

Returns
MPI communicator passed in create...()
Note
when build without MPI, may return anything (MPI_Comm will be a mock type defined in MpiWrapper)

Implements geos::LinearOperator< VECTOR >.

Definition at line 108 of file KrylovSolver.hpp.

◆ create()

template<typename VECTOR >
static std::unique_ptr< KrylovSolver< VECTOR > > geos::KrylovSolver< VECTOR >::create ( LinearSolverParameters const &  parameters,
LinearOperator< VECTOR > const &  matrix,
LinearOperator< VECTOR > const &  precond 
)
static

Factory method for instantiating Krylov solver objects.

Parameters
parameterssolver parameters
matrixlinear operator to solve (can be a matrix or a matrix-free operator)
precondpreconditioning operator (must be set up by the user prior to calling solve()/apply())
Returns
an owning pointer to the newly instantiated solver

◆ createTempVector()

template<typename VECTOR >
static VectorTemp geos::KrylovSolver< VECTOR >::createTempVector ( Vector const &  src)
inlinestaticprotected

Helper function to create temporary vectors based on a source vector.

Parameters
srcthe source vector, whose size and parallel distribution will be used
Returns
the new vector

The main purpose is to deal with BlockVector/View/Wrapper hierarchy.

Definition at line 191 of file KrylovSolver.hpp.

◆ history()

template<typename VECTOR >
arrayView1d< real64 const > geos::KrylovSolver< VECTOR >::history ( ) const
inline

Get convergence history of a linear solve.

Returns
array containing residual norms of every iteration (including initial)

Definition at line 133 of file KrylovSolver.hpp.

◆ logProgress()

template<typename VECTOR >
void geos::KrylovSolver< VECTOR >::logProgress ( ) const
protected

Output iteration progress (called by implementations).

Note
must be called after pushing the most recent residual into m_residualNorms

◆ methodName()

template<typename VECTOR >
virtual string geos::KrylovSolver< VECTOR >::methodName ( ) const
pure virtual

Get name of the Krylov subspace method.

Returns
the abbreviated name of the method

Implemented in geos::GmresSolver< VECTOR >, geos::CgSolver< VECTOR >, and geos::BicgstabSolver< VECTOR >.

◆ numGlobalCols()

template<typename VECTOR >
virtual globalIndex geos::KrylovSolver< VECTOR >::numGlobalCols ( ) const
inlinefinaloverridevirtual

Get the number of global columns.

Returns
Number of global columns in the operator.

Implements geos::LinearOperator< VECTOR >.

Definition at line 93 of file KrylovSolver.hpp.

◆ numGlobalRows()

template<typename VECTOR >
virtual globalIndex geos::KrylovSolver< VECTOR >::numGlobalRows ( ) const
inlinefinaloverridevirtual

Get the number of global rows.

Returns
Number of global rows in the operator.

Implements geos::LinearOperator< VECTOR >.

Definition at line 88 of file KrylovSolver.hpp.

◆ numLocalCols()

template<typename VECTOR >
virtual localIndex geos::KrylovSolver< VECTOR >::numLocalCols ( ) const
inlinefinaloverridevirtual

Get the number of local columns.

Returns
Number of local columns in the operator.
Note
The use of term "local columns" refers not to physical partitioning of columns across ranks (as e.g. matrices are partitioned by rows and typically physically store all column entries), but to the partitioning of a compatible vector object that this operator can be applied to.

Implements geos::LinearOperator< VECTOR >.

Definition at line 103 of file KrylovSolver.hpp.

◆ numLocalRows()

template<typename VECTOR >
virtual localIndex geos::KrylovSolver< VECTOR >::numLocalRows ( ) const
inlinefinaloverridevirtual

Get the number of local rows.

Returns
Number of local rows in the operator.

Implements geos::LinearOperator< VECTOR >.

Definition at line 98 of file KrylovSolver.hpp.

◆ parameters()

template<typename VECTOR >
LinearSolverParameters const& geos::KrylovSolver< VECTOR >::parameters ( ) const
inline
Returns
parameters of the solver.

Definition at line 116 of file KrylovSolver.hpp.

◆ result()

template<typename VECTOR >
LinearSolverResult const& geos::KrylovSolver< VECTOR >::result ( ) const
inline
Returns
the result of a linear solve.

Definition at line 124 of file KrylovSolver.hpp.

◆ solve()

template<typename VECTOR >
virtual void geos::KrylovSolver< VECTOR >::solve ( Vector const &  b,
Vector x 
) const
pure virtual

Solve preconditioned system.

Parameters
[in]bsystem right hand side.
[in,out]xsystem solution (input = initial guess, output = solution).

Implemented in geos::GmresSolver< VECTOR >, geos::CgSolver< VECTOR >, and geos::BicgstabSolver< VECTOR >.


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