1#ifndef included_AMP_HypreSolver
2#define included_AMP_HypreSolver
5#include "AMP/matrices/Matrix.h"
6#include "AMP/solvers/SolverStrategy.h"
7#include "AMP/solvers/SolverStrategyParameters.h"
9#include "HYPRE_utilities.h"
12struct hypre_Solver_struct;
13struct hypre_IJMatrix_struct;
14struct hypre_IJVector_struct;
21class HypreMatrixAdaptor;
51 explicit HypreSolver( std::shared_ptr<HypreSolverParameters> parameters );
67 void initialize( std::shared_ptr<const SolverStrategyParameters> parameters )
override;
80 void resetOperator( std::shared_ptr<const AMP::Operator::OperatorParameters> params )
override;
90 void reset( std::shared_ptr<SolverStrategyParameters> params )
override;
109 void apply( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
110 std::shared_ptr<AMP::LinearAlgebra::Vector>
u )
override;
160 void preSolve( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
161 std::shared_ptr<AMP::LinearAlgebra::Vector>
u );
162 void postSolve( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
163 std::shared_ptr<AMP::LinearAlgebra::Vector>
u );
177 std::shared_ptr<AMP::LinearAlgebra::Vector>
d_r;
struct hypre_IJMatrix_struct * HYPRE_IJMatrix
struct hypre_Solver_struct * HYPRE_Solver
struct hypre_IJVector_struct * HYPRE_IJVector
Provides C++ wrapper around MPI routines.
std::shared_ptr< AMP::LinearAlgebra::Matrix > d_castedMatrix
HYPRE_IJMatrix d_ijMatrix
HYPRE_ExecutionPolicy d_hypre_exec_policy
HYPRE_Solver getHYPRESolver()
void postSolve(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u)
HYPRE_Solver d_solver
pointer to HYPRE representation of solution
HYPRE_IJVector d_hypre_rhs
pointer to HYPRE matrix struct
void setupHypreMatrixAndRhs()
set parameters based on internally set variables
bool d_bUsesPreconditioner
void apply(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u) override
void setCommonParameters(std::shared_ptr< const AMP::Database > db)
void preSolve(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u)
void createHYPREVectors()
void setExecutionPolicy(HYPRE_ExecutionPolicy policy)
void resetOperator(std::shared_ptr< const AMP::Operator::OperatorParameters > params) override
HYPRE_Int(* d_hypreSetRelativeTolerance)(HYPRE_Solver solver, HYPRE_Real tol)
HYPRE_Int(* d_hypreSolverSetup)(HYPRE_Solver solver, HYPRE_Matrix A, HYPRE_Vector b, HYPRE_Vector x)
void copyToHypre(std::shared_ptr< const AMP::LinearAlgebra::Vector > amp_v, HYPRE_IJVector hypre_v)
HYPRE_Int(* d_hypreSetAbsoluteTolerance)(HYPRE_Solver solver, HYPRE_Real tol)
HypreSolver(std::shared_ptr< HypreSolverParameters > parameters)
std::shared_ptr< AMP::LinearAlgebra::HypreMatrixAdaptor > d_HypreMatrixAdaptor
void registerOperator(std::shared_ptr< AMP::Operator::Operator > op) override
void setupNestedSolver(std::shared_ptr< const SolverStrategyParameters > parameters)
HYPRE_IJVector d_hypre_sol
pointer to HYPRE representation of rhs
HYPRE_PtrToSolverFcn d_hypreSolve
HYPRE_Int(* d_hypreDestroySolver)(HYPRE_Solver solver)
void setMemoryLocation(HYPRE_MemoryLocation location)
void copyFromHypre(HYPRE_IJVector hypre_v, std::shared_ptr< AMP::LinearAlgebra::Vector > amp_v)
std::shared_ptr< AMP::LinearAlgebra::Vector > d_compat_amp_v
void reset(std::shared_ptr< SolverStrategyParameters > params) override
bool d_bMatrixInitialized
HYPRE_Int(* d_hypreSetPrintLevel)(HYPRE_Solver solver, HYPRE_Int level)
HYPRE_MemoryLocation d_hypre_memory_location
pointer to HYPRE solver
HYPRE_Int(* d_hypreCreateSolver)(MPI_Comm comm, HYPRE_Solver *solver)
AMP_MPI d_comm
use diagonal scaled preconditioner
std::shared_ptr< AMP::LinearAlgebra::Vector > d_r
HYPRE_Int(* d_hypreSetLogging)(HYPRE_Solver solver, HYPRE_Int logging)
HYPRE_Int(* d_hypreSetPreconditioner)(HYPRE_Solver solver, HYPRE_PtrToSolverFcn precond, HYPRE_PtrToSolverFcn precond_setup, HYPRE_Solver precond_solver)
void createHYPREMatrix(std::shared_ptr< AMP::LinearAlgebra::Matrix > matrix)
HYPRE_Int(* d_hypreSetMaxIterations)(HYPRE_Solver solver, HYPRE_Int max_iter)
void initialize(std::shared_ptr< const SolverStrategyParameters > parameters) override
void destroyHypreSolver()
HYPRE_Int(* d_hypreGetNumIterations)(HYPRE_Solver solver, HYPRE_Int *num_iterations)
std::shared_ptr< AMP::Solver::SolverStrategy > shared_ptr