26 #ifndef OOMPH_HYPRE_SOLVER_HEADER
27 #define OOMPH_HYPRE_SOLVER_HEADER
30 #include "_hypre_utilities.h"
32 #include "HYPRE_parcsr_ls.h"
33 #include "HYPRE_krylov.h"
34 #include "HYPRE_IJ_mv.h"
35 #include "HYPRE_parcsr_mv.h"
51 namespace HypreHelpers
85 const LinearAlgebraDistribution* dist_pt,
86 HYPRE_IJVector& hypre_ij_vector,
87 HYPRE_ParVector& hypre_par_vector);
97 HYPRE_IJVector& hypre_ij_vector,
98 HYPRE_ParVector& hypre_par_vector);
103 HYPRE_IJMatrix& hypre_ij_matrix,
104 HYPRE_ParCSRMatrix& hypre_par_matrix,
105 LinearAlgebraDistribution* dist_pt);
110 const bool& use_row_scaling,
111 const bool& use_ilut,
113 const double& drop_tol,
114 const int& print_level,
115 HYPRE_Solver& euclid_object);
140 #ifndef HYPRE_SEQUENTIAL
144 std::ostringstream error_message;
145 error_message <<
"When using the MPI version of Hypre please first\n"
146 <<
"call function MPI_Helpers::setup()\n";
450 bool Using_distributed_rhs;
454 bool Returning_distributed_solution;
867 <<
"\": My_cumulative_preconditioner_solve_time = "
903 static std::map<std::string, unsigned>
1245 namespace Hypre_default_settings
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Definition: matrices.h:888
Definition: matrices.h:261
Definition: double_vector.h:58
Definition: hypre_solver.h:134
bool Output_info
Flag is true to output info and results of timings.
Definition: hypre_solver.h:305
bool Delete_input_data
Definition: hypre_solver.h:445
unsigned AMG_coarsening
Definition: hypre_solver.h:386
int Euclid_level
Euclid level parameter for ILU(k) factorization.
Definition: hypre_solver.h:418
double AMGEuclidSmoother_drop_tol
Definition: hypre_solver.h:283
bool Euclid_using_BJ
Flag to determine if Block Jacobi is used instead of PILU.
Definition: hypre_solver.h:415
bool Euclid_rowScale
Flag to switch on Euclid row scaling.
Definition: hypre_solver.h:409
double AMG_strength
Connection strength threshold parameter for BoomerAMG.
Definition: hypre_solver.h:369
HypreInterface(const HypreInterface &)=delete
Broken copy constructor.
void enable_hypre_error_messages()
Turn on the hypre error messages.
Definition: hypre_solver.h:242
LinearAlgebraDistribution * Hypre_distribution_pt
the distribution for this helpers-
Definition: hypre_solver.h:490
int ParaSails_nlevel
ParaSails nlevel parameter.
Definition: hypre_solver.h:397
double ParaSails_filter
ParaSails filter parameter.
Definition: hypre_solver.h:403
bool AMGEuclidSmoother_use_row_scaling
Definition: hypre_solver.h:280
unsigned AMGEuclidSmoother_level
Definition: hypre_solver.h:282
HYPRE_Solver Solver
Definition: hypre_solver.h:477
int ParaSails_symmetry
Definition: hypre_solver.h:394
HypreInterface()
Constructor.
Definition: hypre_solver.h:137
unsigned existing_preconditioner()
Function return value of which preconditioner (if any) is stored.
Definition: hypre_solver.h:273
HYPRE_ParCSRMatrix Matrix_par
Definition: hypre_solver.h:473
bool AMGEuclidSmoother_use_ilut
Definition: hypre_solver.h:281
void operator=(const HypreInterface &)=delete
Broken assignment operator.
void disable_hypre_error_messages()
Turn off hypre error messages.
Definition: hypre_solver.h:248
unsigned Internal_preconditioner
Definition: hypre_solver.h:320
void hypre_solve(const DoubleVector &rhs, DoubleVector &solution)
Definition: hypre_solver.cc:1086
Hypre_method_types
Definition: hypre_solver.h:256
@ BiCGStab
Definition: hypre_solver.h:259
@ ParaSails
Definition: hypre_solver.h:262
@ GMRES
Definition: hypre_solver.h:258
@ CG
Definition: hypre_solver.h:257
@ None
Definition: hypre_solver.h:263
@ BoomerAMG
Definition: hypre_solver.h:260
@ Euclid
Definition: hypre_solver.h:261
~HypreInterface()
Destructor.
Definition: hypre_solver.h:226
HYPRE_Solver Preconditioner
Definition: hypre_solver.h:481
unsigned AMGEuclidSmoother_print_level
Definition: hypre_solver.h:284
bool AMGEuclidSmoother_use_block_jacobi
Definition: hypre_solver.h:279
unsigned AMG_complex_smoother
Definition: hypre_solver.h:360
bool Delete_matrix
Definition: hypre_solver.h:465
double ParaSails_thresh
ParaSails thresh parameter.
Definition: hypre_solver.h:400
double AMG_truncation
Interpolation truncation factor for BoomerAMG.
Definition: hypre_solver.h:372
unsigned Krylov_print_level
Definition: hypre_solver.h:429
unsigned AMG_smoother_iterations
The number of smoother iterations to apply.
Definition: hypre_solver.h:363
unsigned existing_solver()
Function to return value of which solver (if any) is currently stored.
Definition: hypre_solver.h:267
void hypre_clean_up_memory()
Function deletes all solver data.
Definition: hypre_solver.cc:1301
bool Hypre_error_messages
Definition: hypre_solver.h:441
double Tolerance
Tolerance used to terminate solver.
Definition: hypre_solver.h:311
bool AMG_using_simple_smoothing
Definition: hypre_solver.h:338
unsigned Existing_solver
Used to keep track of which solver (if any) is currently stored.
Definition: hypre_solver.h:484
unsigned Max_iter
Maximum number of iterations used in solver.
Definition: hypre_solver.h:308
double AMG_damping
Damping factor for BoomerAMG smoothed Jacobi or hybrid SOR.
Definition: hypre_solver.h:366
unsigned AMG_simple_smoother
Definition: hypre_solver.h:351
unsigned AMG_print_level
Definition: hypre_solver.h:327
HYPRE_IJMatrix Matrix_ij
Definition: hypre_solver.h:469
unsigned Euclid_print_level
Definition: hypre_solver.h:425
unsigned AMG_max_levels
Maximum number of levels used in AMG.
Definition: hypre_solver.h:330
unsigned Hypre_method
Hypre method flag. Valid values are specified in enumeration.
Definition: hypre_solver.h:314
void hypre_matrix_setup(CRDoubleMatrix *matrix_pt)
Definition: hypre_solver.cc:513
double AMG_max_row_sum
Parameter to identify diagonally dominant parts of the matrix in AMG.
Definition: hypre_solver.h:333
double Euclid_droptol
Euclid drop tolerance for ILU(k) and ILUT factorization.
Definition: hypre_solver.h:406
unsigned Existing_preconditioner
Used to keep track of which preconditioner (if any) is currently stored.
Definition: hypre_solver.h:487
bool Euclid_using_ILUT
Flag to determine if ILUT (if true) or ILU(k) is used in Euclid.
Definition: hypre_solver.h:412
void hypre_solver_setup()
Definition: hypre_solver.cc:558
Definition: hypre_solver.h:826
~HyprePreconditioner()
Destructor.
Definition: hypre_solver.h:862
unsigned & amg_smoother_iterations()
Access function to AMG_smoother_iterations.
Definition: hypre_solver.h:1014
unsigned & amg_simple_smoother()
Access function to AMG_simple_smoother flag.
Definition: hypre_solver.h:983
double & amg_max_row_sum()
Access function to AMG_max_row_sum.
Definition: hypre_solver.h:1044
static void reset_cumulative_solve_times()
Reset cumulative solve times.
Definition: hypre_solver.cc:1699
double & amg_strength()
Access function to AMG_strength.
Definition: hypre_solver.h:1038
static std::map< std::string, unsigned > Context_based_cumulative_npreconditioner_solve
Definition: hypre_solver.h:904
unsigned & amg_iterations()
Return function for Max_iter.
Definition: hypre_solver.h:970
void disable_euclid_using_BJ()
Definition: hypre_solver.h:1124
std::string Context_string
String can be used to provide context for annotation.
Definition: hypre_solver.h:1234
double & parasails_thresh()
Access function to ParaSails thresh parameter.
Definition: hypre_solver.h:1074
int & parasails_nlevel()
Access function to ParaSails nlevel parameter.
Definition: hypre_solver.h:1068
void enable_delete_matrix()
Definition: hypre_solver.h:1162
void disable_report_my_cumulative_preconditioner_solve_time()
Disable reporting of cumulative solve time in destructor.
Definition: hypre_solver.h:927
double & amg_damping()
Access function to AMG_damping parameter.
Definition: hypre_solver.h:1032
unsigned & amg_print_level()
Access function to AMG_print_level.
Definition: hypre_solver.h:1008
void set_amg_iterations(const unsigned &amg_iterations)
Function to set the number of times to apply BoomerAMG.
Definition: hypre_solver.h:964
void clean_up_memory()
Function deletes all solver data.
Definition: hypre_solver.cc:1842
void disable_delete_matrix()
Definition: hypre_solver.h:1171
static double Cumulative_preconditioner_solve_time
Definition: hypre_solver.h:882
void euclid_using_ILUT()
Definition: hypre_solver.h:1138
void setup()
Definition: hypre_solver.cc:1714
void enable_euclid_rowScale()
Enable euclid rowScaling.
Definition: hypre_solver.h:1104
unsigned & hypre_method()
Access function to Hypre_method flag – specified via enumeration.
Definition: hypre_solver.h:945
void euclid_using_ILUK()
Definition: hypre_solver.h:1131
int & euclid_level()
Access function to Euclid level parameter for ILU(k) factorization.
Definition: hypre_solver.h:1098
bool Report_my_cumulative_preconditioner_solve_time
Definition: hypre_solver.h:1231
void amg_using_complex_smoothing()
Definition: hypre_solver.h:990
static std::map< std::string, double > Context_based_cumulative_solve_time
Definition: hypre_solver.h:889
unsigned & amg_max_levels()
Access function to AMG_max_levels.
Definition: hypre_solver.h:1026
void enable_euclid_using_BJ()
Definition: hypre_solver.h:1117
double & amg_truncation()
Access function to AMG_truncation.
Definition: hypre_solver.h:1050
bool Delete_matrix
Definition: hypre_solver.h:1218
void enable_doc_time()
Enable documentation of preconditioner timings.
Definition: hypre_solver.h:933
void disable_doc_time()
Disable documentation of preconditioner timings.
Definition: hypre_solver.h:939
static std::map< std::string, unsigned > Context_based_nrow
Definition: hypre_solver.h:911
void amg_using_simple_smoothing()
Definition: hypre_solver.h:977
bool & amg_using_simple_smoothing_flag()
Return function for the AMG_using_simple_smoothing_flag.
Definition: hypre_solver.h:1002
double My_cumulative_preconditioner_solve_time
Definition: hypre_solver.h:1227
void use_Euclid()
Function to select use Euclid as the preconditioner.
Definition: hypre_solver.h:1086
double & euclid_droptol()
Access function to Euclid drop tolerance parameter.
Definition: hypre_solver.h:1092
unsigned & euclid_print_level()
Definition: hypre_solver.h:1148
void disable_euclid_rowScale()
Disable euclid row scaling.
Definition: hypre_solver.h:1110
void operator=(const HyprePreconditioner &)=delete
Broken assignment operator.
void use_BoomerAMG()
Function to select BoomerAMG as the preconditioner.
Definition: hypre_solver.h:958
unsigned & internal_preconditioner()
Definition: hypre_solver.h:952
static void report_cumulative_solve_times()
Definition: hypre_solver.cc:1648
void use_ParaSails()
Function to select ParaSails as the preconditioner.
Definition: hypre_solver.h:1056
int & parasails_symmetry()
Access function to ParaSails symmetry flag.
Definition: hypre_solver.h:1062
unsigned & amg_complex_smoother()
Access function to AMG_complex_smoother flag.
Definition: hypre_solver.h:996
unsigned & amg_coarsening()
Access function to AMG_coarsening flag.
Definition: hypre_solver.h:1020
bool Doc_time
Definition: hypre_solver.h:1221
static unsigned Cumulative_npreconditioner_solve
Definition: hypre_solver.h:896
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Preconditioner_solve uses a hypre solver to precondition vector r.
Definition: hypre_solver.cc:1775
HyprePreconditioner(const HyprePreconditioner &)=delete
Broken copy constructor.
HyprePreconditioner(const std::string &context_string="")
Definition: hypre_solver.h:830
double & parasails_filter()
Access function to ParaSails filter parameter.
Definition: hypre_solver.h:1080
void enable_report_my_cumulative_preconditioner_solve_time()
Enable reporting of cumulative solve time in destructor.
Definition: hypre_solver.h:921
Definition: hypre_solver.h:514
unsigned & amg_simple_smoother()
Access function to AMG_simple_smoother flag.
Definition: hypre_solver.h:583
void disable_euclid_using_BJ()
Definition: hypre_solver.h:707
int & euclid_level()
Definition: hypre_solver.h:681
void disable_euclid_rowScale()
Disable euclid row scaling.
Definition: hypre_solver.h:693
double & amg_damping()
Access function to AMG_damping parameter.
Definition: hypre_solver.h:626
unsigned & max_iter()
Access function to Max_iter.
Definition: hypre_solver.h:551
void enable_euclid_using_BJ()
Definition: hypre_solver.h:700
double & euclid_droptol()
Access function to Euclid drop tolerance parameter.
Definition: hypre_solver.h:674
unsigned & hypre_method()
Access function to Hypre_method flag – specified via enumeration.
Definition: hypre_solver.h:563
unsigned & euclid_print_level()
Definition: hypre_solver.h:731
void solve(Problem *const &problem_pt, DoubleVector &solution)
Definition: hypre_solver.cc:1383
double & amg_max_row_sum()
Access function to AMG_max_row_sum.
Definition: hypre_solver.h:638
unsigned & amg_print_level()
Access function to AMG_print_level.
Definition: hypre_solver.h:602
HypreSolver(const HypreSolver &)=delete
Broken copy constructor.
~HypreSolver()
Empty destructor.
Definition: hypre_solver.h:534
unsigned & krylov_print_level()
Access function to Krylov_print_level.
Definition: hypre_solver.h:737
double & tolerance()
Access function to Tolerance.
Definition: hypre_solver.h:557
void clean_up_memory()
Function deletes all solver data.
Definition: hypre_solver.cc:1586
unsigned & amg_coarsening()
Access function to AMG_coarsening flag.
Definition: hypre_solver.h:614
double & parasails_thresh()
Access function to ParaSails thresh parameter.
Definition: hypre_solver.h:662
HypreSolver()
Constructor.
Definition: hypre_solver.h:517
double & parasails_filter()
Access function to ParaSails filter parameter.
Definition: hypre_solver.h:668
unsigned & amg_complex_smoother()
Access function to AMG_complex_smoother flag.
Definition: hypre_solver.h:596
bool Delete_matrix
Definition: hypre_solver.h:806
void amg_using_complex_smoothing()
Definition: hypre_solver.h:590
void euclid_using_ILUT()
Definition: hypre_solver.h:721
void amg_using_simple_smoothing()
Definition: hypre_solver.h:577
void resolve(const DoubleVector &rhs, DoubleVector &solution)
Definition: hypre_solver.cc:1532
void enable_euclid_rowScale()
Enable euclid rowScaling.
Definition: hypre_solver.h:687
unsigned & amg_max_levels()
Access function to AMG_max_levels.
Definition: hypre_solver.h:620
int & parasails_symmetry()
Access function to ParaSails symmetry flag.
Definition: hypre_solver.h:650
unsigned & amg_smoother_iterations()
Access function to AMG_smoother_iterations.
Definition: hypre_solver.h:608
unsigned & internal_preconditioner()
Definition: hypre_solver.h:570
void euclid_using_ILUK()
Definition: hypre_solver.h:714
void operator=(const HypreSolver &)=delete
Broken assignment operator.
double & amg_truncation()
Access function to AMG_truncation.
Definition: hypre_solver.h:644
int & parasails_nlevel()
Access function to ParaSails nlevel parameter.
Definition: hypre_solver.h:656
void disable_resolve()
Definition: hypre_solver.h:544
void enable_delete_matrix()
Definition: hypre_solver.h:751
void disable_delete_matrix()
Definition: hypre_solver.h:760
double & amg_strength()
Access function to AMG_strength.
Definition: hypre_solver.h:632
Definition: linear_algebra_distribution.h:64
Definition: linear_solver.h:68
bool Doc_time
Boolean flag that indicates whether the time taken.
Definition: linear_solver.h:77
bool Enable_resolve
Definition: linear_solver.h:73
static bool mpi_has_been_initialised()
return true if MPI has been initialised
Definition: oomph_utilities.h:851
static OomphCommunicator * communicator_pt()
access to the global oomph-lib communicator
Definition: oomph_utilities.cc:1046
Definition: oomph_definitions.h:222
Definition: preconditioner.h:54
Definition: problem.h:151
void solution(const Vector< double > &x, Vector< double > &u)
Definition: two_d_biharmonic.cc:113
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
void create_HYPRE_Matrix(CRDoubleMatrix *oomph_matrix, HYPRE_IJMatrix &hypre_ij_matrix, HYPRE_ParCSRMatrix &hypre_par_matrix, LinearAlgebraDistribution *dist_pt)
Definition: hypre_solver.cc:270
void create_HYPRE_Vector(const DoubleVector &oomph_vec, const LinearAlgebraDistribution *dist_pt, HYPRE_IJVector &hypre_ij_vector, HYPRE_ParVector &hypre_par_vector)
Definition: hypre_solver.cc:178
int check_HYPRE_error_flag(std::ostringstream &message)
Definition: hypre_solver.cc:147
unsigned AMG_coarsening
Definition: hypre_solver.cc:134
double AMG_truncation
AMG interpolation truncation factor.
Definition: hypre_solver.cc:140
double AMG_strength
Definition: hypre_solver.cc:118
void euclid_settings_helper(const bool &use_block_jacobi, const bool &use_row_scaling, const bool &use_ilut, const int &level, const double &drop_tol, const int &print_level, HYPRE_Solver &euclid_object)
Definition: hypre_solver.cc:409
void set_defaults_for_navier_stokes_momentum_block(HyprePreconditioner *hypre_preconditioner_pt)
Definition: hypre_solver.cc:85
void set_defaults_for_3D_poisson_problem(HyprePreconditioner *hypre_preconditioner_pt)
Definition: hypre_solver.cc:72
void set_defaults_for_2D_poisson_problem(HyprePreconditioner *hypre_preconditioner_pt)
Definition: hypre_solver.cc:45
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86