#include <hypre_solver.h>
Public Types | |
enum | Hypre_method_types { CG, GMRES, BiCGStab, BoomerAMG, Euclid, ParaSails, None } |
Enumerated flag to define which Hypre methods are used CAREFUL: DON'T CHANGE THE ORDER OF THESE! More... | |
Public Member Functions | |
HypreInterface () | |
Constructor. More... | |
~HypreInterface () | |
Destructor. More... | |
HypreInterface (const HypreInterface &) | |
Broken copy constructor. More... | |
void | operator= (const HypreInterface &) |
Broken assignment operator. More... | |
void | enable_hypre_error_messages () |
Turn on the hypre error messages. More... | |
void | disable_hypre_error_messages () |
Turn off hypre error messages. More... | |
unsigned | existing_solver () |
Function to return value of which solver (if any) is currently stored. More... | |
unsigned | existing_preconditioner () |
Function return value of which preconditioner (if any) is stored. More... | |
Public Attributes | |
bool | AMGEuclidSmoother_use_block_jacobi |
bool | AMGEuclidSmoother_use_row_scaling |
bool | AMGEuclidSmoother_use_ilut |
unsigned | AMGEuclidSmoother_level |
double | AMGEuclidSmoother_drop_tol |
unsigned | AMGEuclidSmoother_print_level |
Protected Member Functions | |
void | hypre_clean_up_memory () |
Function deletes all solver data. More... | |
void | hypre_matrix_setup (CRDoubleMatrix *matrix_pt) |
Function which sets values of First_global_row, Last_global_row and other partitioning data and creates the distributed Hypre matrix (stored in Matrix_ij/Matrix_par) from the CRDoubleMatrix. More... | |
void | hypre_solver_setup () |
Sets up the data required for to use as an oomph-lib LinearSolver or Preconditioner. This must be called after the Hypre matrix has been generated using hypre_matrix_setup(...). More... | |
void | hypre_solve (const DoubleVector &rhs, DoubleVector &solution) |
Helper function performs a solve if any solver exists. More... | |
Protected Attributes | |
bool | Output_info |
Flag is true to output info and results of timings. More... | |
unsigned | Max_iter |
Maximum number of iterations used in solver. More... | |
double | Tolerance |
Tolerance used to terminate solver. More... | |
unsigned | Hypre_method |
Hypre method flag. Valid values are specified in enumeration. More... | |
unsigned | Internal_preconditioner |
Preconditioner method flag used with Hypre's PCG, GMRES and BiCGStab in solve(...) or resolve(...). Valid values are BoomerAMG, Euclid, ParaSails or None (all enumerated above), for any other value no preconditioner is set. More... | |
unsigned | AMG_print_level |
Used to set the Hypre printing level for AMG 0: no printout 1: print setup information 2: print solve information 3: print setup and solve information. More... | |
unsigned | AMG_max_levels |
Maximum number of levels used in AMG. More... | |
double | AMG_max_row_sum |
Parameter to identify diagonally dominant parts of the matrix in AMG. More... | |
bool | AMG_using_simple_smoothing |
Flag to determine whether simple smoothers (determined by the AMG_simple_smoother flag) or complex smoothers (determined by the AMG_complex_smoother flag are used in AMG. More... | |
unsigned | AMG_simple_smoother |
Simple smoothing methods used in BoomerAMG. Relaxation types include: 0 = Jacobi 1 = Gauss-Seidel, sequential (very slow in parallel!) 2 = Gauss-Seidel, interior points in parallel, boundary sequential (slow in parallel!) 3 = hybrid Gauss-Seidel or SOR, forward solve 4 = hybrid Gauss-Seidel or SOR, backward solve 6 = hybrid symmetric Gauss-Seidel or SSOR To use these methods set AMG_using_simple_smoothing to true. More... | |
unsigned | AMG_complex_smoother |
Complex smoothing methods used in BoomerAMG. Relaxation types are: 6 = Schwarz 7 = Pilut 8 = ParaSails 9 = Euclid To use these methods set AMG_using_simple_smoothing to false. More... | |
unsigned | AMG_smoother_iterations |
The number of smoother iterations to apply. More... | |
double | AMG_damping |
Damping factor for BoomerAMG smoothed Jacobi or hybrid SOR. More... | |
double | AMG_strength |
Connection strength threshold parameter for BoomerAMG. More... | |
double | AMG_truncation |
Interpolation truncation factor for BoomerAMG. More... | |
unsigned | AMG_coarsening |
AMG coarsening strategy. Coarsening types include: 0 = CLJP (parallel coarsening using independent sets) 1 = classical RS with no boundary treatment (not recommended in parallel) 3 = modified RS with 3rd pass to add C points on the boundaries 6 = Falgout (uses 1 then CLJP using interior coarse points as first independent set) 8 = PMIS (parallel coarsening using independent sets - lower complexities than 0, maybe also slower convergence) 10= HMIS (one pass RS on each processor then PMIS on interior coarse points as first independent set) 11= One pass RS on each processor (not recommended) More... | |
int | ParaSails_symmetry |
ParaSails symmetry flag, used to inform ParaSails of Symmetry of definitenss of problem and type of ParaSails preconditioner: 0 = nonsymmetric and/or indefinite problem, nonsymmetric preconditioner 1 = SPD problem, and SPD (factored preconditioner) 2 = nonsymmetric, definite problem and SDP (factored preconditoner) More... | |
int | ParaSails_nlevel |
ParaSails nlevel parameter. More... | |
double | ParaSails_thresh |
ParaSails thresh parameter. More... | |
double | ParaSails_filter |
ParaSails filter parameter. More... | |
double | Euclid_droptol |
Euclid drop tolerance for ILU(k) and ILUT factorization. More... | |
bool | Euclid_rowScale |
Flag to switch on Euclid row scaling. More... | |
bool | Euclid_using_ILUT |
Flag to determine if ILUT (if true) or ILU(k) is used in Euclid. More... | |
bool | Euclid_using_BJ |
Flag to determine if Block Jacobi is used instead of PILU. More... | |
int | Euclid_level |
Euclid level parameter for ILU(k) factorization. More... | |
unsigned | Euclid_print_level |
Flag to set the level of printing from Euclid when the Euclid destructor is called 0: no printing (default) 1: prints summary of runtime settings and timings 2: as 1 plus prints memory usage. More... | |
unsigned | Krylov_print_level |
Used to set the Hypre printing level for the Krylov subspace solvers. More... | |
bool | Hypre_error_messages |
Flag to determine if non-zero values of the Hypre error flag plus Hypre error messages are output to screen at various points in the solve function, i.e. after: More... | |
bool | Delete_input_data |
Internal flag which is true when hypre_setup or hypre_solve can delete input matrix. More... | |
bool | Using_distributed_rhs |
Internal flag which tell the solver if the rhs Vector is distributed or not. More... | |
bool | Returning_distributed_solution |
Internal flag which tell the solver if the solution Vector to be returned is distributed or not. More... | |
Private Attributes | |
bool | Delete_matrix |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix into its own data structures, doubling the memory requirements. As far as the Hypre solvers are concerned the oomph-lib matrix is no longer required and could be deleted to save memory. However, this will not be the expected behaviour and therefore needs to be requested explicitly by the user by changing this flag from false (its default) to true. More... | |
HYPRE_IJMatrix | Matrix_ij |
The Hypre_IJMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...). More... | |
HYPRE_ParCSRMatrix | Matrix_par |
The Hypre_ParCSRMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...). More... | |
HYPRE_Solver | Solver |
The Hypre solver used in solve(...), resolve(...) or preconditioner_solve(...). [This is a C structure!]. More... | |
HYPRE_Solver | Preconditioner |
The internal Hypre preconditioner used in conjunction with Solver. [This is a C structure!]. More... | |
unsigned | Existing_solver |
Used to keep track of which solver (if any) is currently stored. More... | |
unsigned | Existing_preconditioner |
Used to keep track of which preconditioner (if any) is currently stored. More... | |
LinearAlgebraDistribution * | Hypre_distribution_pt |
the distribution for this helpers- More... | |
An interface class to the suite of Hypre solvers and preconditioners to allow use of:
BoomerAMG (AMG), CG, GMRES or BiCGStab, Euclid (ILU) or ParaSails (Approximate inverse)
Hypre's Krylov subspace solvers (CG, GMRES and BiCGStab) may be preconditioned using:
BoomerAMG, Euclid or ParaSails
Definition at line 141 of file hypre_solver.h.
Enumerated flag to define which Hypre methods are used CAREFUL: DON'T CHANGE THE ORDER OF THESE!
Enumerator | |
---|---|
CG | |
GMRES | |
BiCGStab | |
BoomerAMG | |
Euclid | |
ParaSails | |
None |
Definition at line 265 of file hypre_solver.h.
|
inline |
Constructor.
Definition at line 146 of file hypre_solver.h.
References oomph::HypreHelpers::AMG_coarsening, oomph::Biharmonic_schur_complement_Hypre_defaults::AMG_smoother_iterations, oomph::HypreHelpers::AMG_strength, oomph::HypreHelpers::AMG_truncation, oomph::MPI_Helpers::communicator_pt(), e, oomph::BlackBoxFDNewtonSolver::Max_iter, and oomph::MPI_Helpers::mpi_has_been_initialised().
|
inline |
Destructor.
Definition at line 236 of file hypre_solver.h.
|
inline |
Broken copy constructor.
Definition at line 246 of file hypre_solver.h.
References oomph::BrokenCopy::broken_copy().
|
inline |
Turn off hypre error messages.
Definition at line 261 of file hypre_solver.h.
|
inline |
Turn on the hypre error messages.
Definition at line 258 of file hypre_solver.h.
|
inline |
Function return value of which preconditioner (if any) is stored.
Definition at line 277 of file hypre_solver.h.
|
inline |
Function to return value of which solver (if any) is currently stored.
Definition at line 274 of file hypre_solver.h.
|
protected |
Function deletes all solver data.
hypre_clean_up_memory() deletes any existing Hypre solver and Hypre matrix
Definition at line 1322 of file hypre_solver.cc.
References oomph::HypreHelpers::check_HYPRE_error_flag().
|
protected |
Function which sets values of First_global_row, Last_global_row and other partitioning data and creates the distributed Hypre matrix (stored in Matrix_ij/Matrix_par) from the CRDoubleMatrix.
Helper function which creates a Hypre matrix from a CRDoubleMatrix If OOMPH-LIB has been set up for MPI use, the Hypre matrix is distributed over the available processors.
Definition at line 527 of file hypre_solver.cc.
References oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::CRDoubleMatrix::clear(), oomph::LinearAlgebraDistribution::communicator_pt(), oomph::HypreHelpers::create_HYPRE_Matrix(), oomph::DistributableLinearAlgebraObject::distribution_pt(), hypre__global_error, oomph::CRDoubleMatrix::nrow(), and oomph::oomph_info.
|
protected |
Helper function performs a solve if any solver exists.
Helper function performs a solve if solver data has been set up using hypre_solver_setup(...).
Definition at line 1106 of file hypre_solver.cc.
References oomph::DoubleVector::build(), oomph::DoubleVector::built(), oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::MPI_Helpers::communicator_pt(), oomph::HypreHelpers::create_HYPRE_Vector(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::MPI_Helpers::mpi_has_been_initialised(), oomph::DoubleVector::norm(), oomph::oomph_info, oomph::DoubleVector::redistribute(), oomph::TimingHelpers::timer(), and oomph::DoubleVector::values_pt().
|
protected |
Sets up the data required for to use as an oomph-lib LinearSolver or Preconditioner. This must be called after the Hypre matrix has been generated using hypre_matrix_setup(...).
Sets up the solver data required for use in an oomph-lib LinearSolver or Preconditioner, once the Hypre matrix has been generated using hypre_matrix_setup(...).
Definition at line 575 of file hypre_solver.cc.
References oomph::HypreHelpers::AMG_coarsening, oomph::Biharmonic_schur_complement_Hypre_defaults::AMG_smoother_iterations, oomph::HypreHelpers::AMG_strength, oomph::HypreHelpers::AMG_truncation, oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::HypreHelpers::create_HYPRE_Vector(), oomph::HypreHelpers::euclid_settings_helper(), hypre__global_error, i, oomph::BlackBoxFDNewtonSolver::Max_iter, oomph::oomph_info, and oomph::TimingHelpers::timer().
|
inline |
Broken assignment operator.
Definition at line 252 of file hypre_solver.h.
References oomph::BrokenCopy::broken_assign().
|
protected |
AMG coarsening strategy. Coarsening types include: 0 = CLJP (parallel coarsening using independent sets) 1 = classical RS with no boundary treatment (not recommended in parallel) 3 = modified RS with 3rd pass to add C points on the boundaries 6 = Falgout (uses 1 then CLJP using interior coarse points as first independent set) 8 = PMIS (parallel coarsening using independent sets - lower complexities than 0, maybe also slower convergence) 10= HMIS (one pass RS on each processor then PMIS on interior coarse points as first independent set) 11= One pass RS on each processor (not recommended)
Definition at line 388 of file hypre_solver.h.
|
protected |
Complex smoothing methods used in BoomerAMG. Relaxation types are: 6 = Schwarz 7 = Pilut 8 = ParaSails 9 = Euclid To use these methods set AMG_using_simple_smoothing to false.
Definition at line 362 of file hypre_solver.h.
|
protected |
Damping factor for BoomerAMG smoothed Jacobi or hybrid SOR.
Definition at line 368 of file hypre_solver.h.
|
protected |
Maximum number of levels used in AMG.
Definition at line 332 of file hypre_solver.h.
|
protected |
Parameter to identify diagonally dominant parts of the matrix in AMG.
Definition at line 335 of file hypre_solver.h.
|
protected |
Used to set the Hypre printing level for AMG 0: no printout 1: print setup information 2: print solve information 3: print setup and solve information.
Definition at line 329 of file hypre_solver.h.
|
protected |
Simple smoothing methods used in BoomerAMG. Relaxation types include: 0 = Jacobi 1 = Gauss-Seidel, sequential (very slow in parallel!) 2 = Gauss-Seidel, interior points in parallel, boundary sequential (slow in parallel!) 3 = hybrid Gauss-Seidel or SOR, forward solve 4 = hybrid Gauss-Seidel or SOR, backward solve 6 = hybrid symmetric Gauss-Seidel or SSOR To use these methods set AMG_using_simple_smoothing to true.
Definition at line 353 of file hypre_solver.h.
|
protected |
The number of smoother iterations to apply.
Definition at line 365 of file hypre_solver.h.
|
protected |
Connection strength threshold parameter for BoomerAMG.
Definition at line 371 of file hypre_solver.h.
|
protected |
Interpolation truncation factor for BoomerAMG.
Definition at line 374 of file hypre_solver.h.
|
protected |
Flag to determine whether simple smoothers (determined by the AMG_simple_smoother flag) or complex smoothers (determined by the AMG_complex_smoother flag are used in AMG.
Definition at line 340 of file hypre_solver.h.
double oomph::HypreInterface::AMGEuclidSmoother_drop_tol |
Definition at line 284 of file hypre_solver.h.
unsigned oomph::HypreInterface::AMGEuclidSmoother_level |
Definition at line 283 of file hypre_solver.h.
unsigned oomph::HypreInterface::AMGEuclidSmoother_print_level |
Definition at line 285 of file hypre_solver.h.
bool oomph::HypreInterface::AMGEuclidSmoother_use_block_jacobi |
Definition at line 280 of file hypre_solver.h.
bool oomph::HypreInterface::AMGEuclidSmoother_use_ilut |
Definition at line 282 of file hypre_solver.h.
bool oomph::HypreInterface::AMGEuclidSmoother_use_row_scaling |
Definition at line 281 of file hypre_solver.h.
|
protected |
Internal flag which is true when hypre_setup or hypre_solve can delete input matrix.
Definition at line 447 of file hypre_solver.h.
|
private |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix into its own data structures, doubling the memory requirements. As far as the Hypre solvers are concerned the oomph-lib matrix is no longer required and could be deleted to save memory. However, this will not be the expected behaviour and therefore needs to be requested explicitly by the user by changing this flag from false (its default) to true.
Definition at line 468 of file hypre_solver.h.
|
protected |
Euclid drop tolerance for ILU(k) and ILUT factorization.
Definition at line 408 of file hypre_solver.h.
|
protected |
Euclid level parameter for ILU(k) factorization.
Definition at line 420 of file hypre_solver.h.
|
protected |
Flag to set the level of printing from Euclid when the Euclid destructor is called 0: no printing (default) 1: prints summary of runtime settings and timings 2: as 1 plus prints memory usage.
Definition at line 427 of file hypre_solver.h.
|
protected |
Flag to switch on Euclid row scaling.
Definition at line 411 of file hypre_solver.h.
|
protected |
Flag to determine if Block Jacobi is used instead of PILU.
Definition at line 417 of file hypre_solver.h.
|
protected |
Flag to determine if ILUT (if true) or ILU(k) is used in Euclid.
Definition at line 414 of file hypre_solver.h.
|
private |
Used to keep track of which preconditioner (if any) is currently stored.
Definition at line 490 of file hypre_solver.h.
|
private |
Used to keep track of which solver (if any) is currently stored.
Definition at line 487 of file hypre_solver.h.
|
private |
the distribution for this helpers-
Definition at line 493 of file hypre_solver.h.
|
protected |
Flag to determine if non-zero values of the Hypre error flag plus Hypre error messages are output to screen at various points in the solve function, i.e. after:
Definition at line 443 of file hypre_solver.h.
|
protected |
Hypre method flag. Valid values are specified in enumeration.
Definition at line 316 of file hypre_solver.h.
|
protected |
Preconditioner method flag used with Hypre's PCG, GMRES and BiCGStab in solve(...) or resolve(...). Valid values are BoomerAMG, Euclid, ParaSails or None (all enumerated above), for any other value no preconditioner is set.
Definition at line 322 of file hypre_solver.h.
|
protected |
Used to set the Hypre printing level for the Krylov subspace solvers.
Definition at line 431 of file hypre_solver.h.
|
private |
The Hypre_IJMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...).
Definition at line 472 of file hypre_solver.h.
|
private |
The Hypre_ParCSRMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...).
Definition at line 476 of file hypre_solver.h.
|
protected |
Maximum number of iterations used in solver.
Definition at line 310 of file hypre_solver.h.
|
protected |
Flag is true to output info and results of timings.
Definition at line 307 of file hypre_solver.h.
|
protected |
ParaSails filter parameter.
Definition at line 405 of file hypre_solver.h.
|
protected |
ParaSails nlevel parameter.
Definition at line 399 of file hypre_solver.h.
|
protected |
ParaSails symmetry flag, used to inform ParaSails of Symmetry of definitenss of problem and type of ParaSails preconditioner: 0 = nonsymmetric and/or indefinite problem, nonsymmetric preconditioner 1 = SPD problem, and SPD (factored preconditioner) 2 = nonsymmetric, definite problem and SDP (factored preconditoner)
Definition at line 396 of file hypre_solver.h.
|
protected |
ParaSails thresh parameter.
Definition at line 402 of file hypre_solver.h.
|
private |
The internal Hypre preconditioner used in conjunction with Solver. [This is a C structure!].
Definition at line 484 of file hypre_solver.h.
|
protected |
Internal flag which tell the solver if the solution Vector to be returned is distributed or not.
Definition at line 456 of file hypre_solver.h.
|
private |
The Hypre solver used in solve(...), resolve(...) or preconditioner_solve(...). [This is a C structure!].
Definition at line 480 of file hypre_solver.h.
|
protected |
Tolerance used to terminate solver.
Definition at line 313 of file hypre_solver.h.
|
protected |
Internal flag which tell the solver if the rhs Vector is distributed or not.
Definition at line 452 of file hypre_solver.h.