Advanced Multi-Physics (AMP)
On-Line Documentation
HypreSolver.h
Go to the documentation of this file.
1#ifndef included_AMP_HypreSolver
2#define included_AMP_HypreSolver
3
4
5#include "AMP/matrices/Matrix.h"
6#include "AMP/solvers/SolverStrategy.h"
7#include "AMP/solvers/SolverStrategyParameters.h"
8
9#include "HYPRE_utilities.h"
10
11// Forward declares
12struct hypre_Solver_struct;
13struct hypre_IJMatrix_struct;
14struct hypre_IJVector_struct;
15typedef struct hypre_Solver_struct *HYPRE_Solver;
16typedef struct hypre_IJMatrix_struct *HYPRE_IJMatrix;
17typedef struct hypre_IJVector_struct *HYPRE_IJVector;
18
19
20namespace AMP::LinearAlgebra {
21class HypreMatrixAdaptor;
22}
23
24namespace AMP::Solver {
25
26
28
29
37{
38
39public:
44
51 explicit HypreSolver( std::shared_ptr<HypreSolverParameters> parameters );
52
56 virtual ~HypreSolver();
57
67 void initialize( std::shared_ptr<const SolverStrategyParameters> parameters ) override;
68
73 void registerOperator( std::shared_ptr<AMP::Operator::Operator> op ) override;
74
80 void resetOperator( std::shared_ptr<const AMP::Operator::OperatorParameters> params ) override;
81
90 void reset( std::shared_ptr<SolverStrategyParameters> params ) override;
91
96
101
103
109 void apply( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
110 std::shared_ptr<AMP::LinearAlgebra::Vector> u ) override;
111
112protected:
117
122
126 void setCommonParameters( std::shared_ptr<const AMP::Database> db );
127
131 void createHYPREMatrix( std::shared_ptr<AMP::LinearAlgebra::Matrix> matrix );
132
137
141 void copyToHypre( std::shared_ptr<const AMP::LinearAlgebra::Vector> amp_v,
143
147 void copyFromHypre( HYPRE_IJVector hypre_v, std::shared_ptr<AMP::LinearAlgebra::Vector> amp_v );
148
149
150 void setParameters( void );
151
153
155
156 void setupNestedSolver( std::shared_ptr<const SolverStrategyParameters> parameters );
157
159
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 );
164
166
168 bool d_bDiagScalePC = false;
169
170
172
173 std::shared_ptr<AMP::LinearAlgebra::Matrix> d_castedMatrix;
174 std::shared_ptr<AMP::LinearAlgebra::Vector> d_compat_amp_v;
175 std::shared_ptr<AMP::LinearAlgebra::HypreMatrixAdaptor> d_HypreMatrixAdaptor;
176
177 std::shared_ptr<AMP::LinearAlgebra::Vector> d_r;
178
183
186
188
191
194 HYPRE_Int *num_iterations ) = nullptr;
198 HYPRE_Solver precond_solver ) = nullptr;
200 HYPRE_Matrix A,
201 HYPRE_Vector b,
202 HYPRE_Vector x ) = nullptr;
203
209};
210} // namespace AMP::Solver
211
212#endif
struct hypre_IJMatrix_struct * HYPRE_IJMatrix
Definition HypreSolver.h:16
struct hypre_Solver_struct * HYPRE_Solver
Definition HypreSolver.h:15
struct hypre_IJVector_struct * HYPRE_IJVector
Definition HypreSolver.h:17
Provides C++ wrapper around MPI routines.
Definition AMP_MPI.h:63
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
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 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)
Definition HypreSolver.h:95
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
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
HYPRE_Int(* d_hypreGetNumIterations)(HYPRE_Solver solver, HYPRE_Int *num_iterations)
std::shared_ptr< AMP::Solver::SolverStrategy > shared_ptr



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page