1#ifndef included_AMP_CGSolver
2#define included_AMP_CGSolver
4#include "AMP/solvers/SolverStrategy.h"
5#include "AMP/solvers/SolverStrategyParameters.h"
6#include "AMP/utils/AMP_MPI.h"
36template<
typename T =
double>
58 explicit CGSolver( std::shared_ptr<SolverStrategyParameters> params );
65 static std::unique_ptr<SolverStrategy>
68 return std::make_unique<CGSolver<T>>( params );
76 std::string
type()
const override {
return "CGSolver"; }
83 void apply( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
84 std::shared_ptr<AMP::LinearAlgebra::Vector>
u )
override;
90 void initialize( std::shared_ptr<const SolverStrategyParameters> params )
override;
119 std::shared_ptr<AMP::LinearAlgebra::Vector>
d_r;
120 std::shared_ptr<AMP::LinearAlgebra::Vector>
d_p;
121 std::shared_ptr<AMP::LinearAlgebra::Vector>
d_w;
122 std::shared_ptr<AMP::LinearAlgebra::Vector>
d_z;
126 std::vector<std::shared_ptr<AMP::LinearAlgebra::Vector>>
d_vDirs;
void allocateScratchVectors(std::shared_ptr< const AMP::LinearAlgebra::Vector > u)
bool d_bUsesPreconditioner
std::shared_ptr< AMP::LinearAlgebra::Vector > d_p
void apply(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u) override
static std::unique_ptr< SolverStrategy > createSolver(std::shared_ptr< SolverStrategyParameters > params)
std::string type() const override
Return the name of the solver.
bool d_bFlexibleCG
use flexible CG if true
int d_max_dimension
maximum dimension of the stored search space for FCG
virtual ~CGSolver()=default
void getFromInput(std::shared_ptr< AMP::Database > db)
std::string d_sVariant
variant being used, can be one of "pcg", "ipcg", or "fcg"
std::shared_ptr< AMP::LinearAlgebra::Vector > d_z
std::shared_ptr< AMP::LinearAlgebra::Vector > d_w
std::shared_ptr< AMP::LinearAlgebra::Vector > d_r
scratch vectors required for PCG
std::vector< std::shared_ptr< AMP::LinearAlgebra::Vector > > d_vDirs
void initialize(std::shared_ptr< const SolverStrategyParameters > params) override
CGSolver(std::shared_ptr< SolverStrategyParameters > params)
void registerOperator(std::shared_ptr< AMP::Operator::Operator > op) override
std::shared_ptr< AMP::Solver::SolverStrategy > shared_ptr