![]() |
|
#include <hypre_solver.h>
Inheritance diagram for oomph::HypreInterface:Public Types | |
| enum | Hypre_method_types { CG , GMRES , BiCGStab , BoomerAMG , Euclid , ParaSails , None } |
Public Member Functions | |
| HypreInterface () | |
| Constructor. More... | |
| ~HypreInterface () | |
| Destructor. More... | |
| HypreInterface (const HypreInterface &)=delete | |
| Broken copy constructor. More... | |
| void | operator= (const HypreInterface &)=delete |
| 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... | |
Protected Member Functions | |
| void | hypre_clean_up_memory () |
| Function deletes all solver data. More... | |
| void | hypre_matrix_setup (CRDoubleMatrix *matrix_pt) |
| void | hypre_solver_setup () |
| void | hypre_solve (const DoubleVector &rhs, DoubleVector &solution) |
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 |
| unsigned | AMG_print_level |
| 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 |
| unsigned | AMG_simple_smoother |
| unsigned | AMG_complex_smoother |
| 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 |
| int | ParaSails_symmetry |
| 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 |
| unsigned | Krylov_print_level |
| bool | Hypre_error_messages |
| bool | Delete_input_data |
Private Attributes | |
| bool | Delete_matrix |
| HYPRE_IJMatrix | Matrix_ij |
| HYPRE_ParCSRMatrix | Matrix_par |
| HYPRE_Solver | Solver |
| HYPRE_Solver | Preconditioner |
| 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
|
inline |
Constructor.
References oomph::HypreHelpers::AMG_coarsening, AMG_coarsening, AMG_complex_smoother, AMG_damping, AMG_max_levels, AMG_max_row_sum, AMG_print_level, AMG_simple_smoother, AMG_smoother_iterations, oomph::HypreHelpers::AMG_strength, AMG_strength, oomph::HypreHelpers::AMG_truncation, AMG_truncation, AMG_using_simple_smoothing, AMGEuclidSmoother_drop_tol, AMGEuclidSmoother_level, AMGEuclidSmoother_print_level, AMGEuclidSmoother_use_block_jacobi, AMGEuclidSmoother_use_ilut, AMGEuclidSmoother_use_row_scaling, oomph::MPI_Helpers::communicator_pt(), e(), Euclid_droptol, Euclid_level, Euclid_print_level, Euclid_rowScale, Euclid_using_BJ, Euclid_using_ILUT, Existing_preconditioner, Existing_solver, GMRES, Hypre_distribution_pt, Hypre_error_messages, Hypre_method, Internal_preconditioner, Krylov_print_level, Max_iter, oomph::MPI_Helpers::mpi_has_been_initialised(), None, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Output_info, ParaSails_filter, ParaSails_nlevel, ParaSails_symmetry, ParaSails_thresh, and Tolerance.
|
inline |
Destructor.
References hypre_clean_up_memory(), and Hypre_distribution_pt.
|
delete |
Broken copy constructor.
|
inline |
Turn off hypre error messages.
References Hypre_error_messages.
|
inline |
Turn on the hypre error messages.
References Hypre_error_messages.
Referenced by main(), and TetmeshPoissonProblem< ELEMENT >::TetmeshPoissonProblem().
|
inline |
Function return value of which preconditioner (if any) is stored.
References Existing_preconditioner.
|
inline |
Function to return value of which solver (if any) is currently stored.
References Existing_solver.
Referenced by oomph::HyprePreconditioner::preconditioner_solve(), and oomph::HypreSolver::resolve().
|
protected |
Function deletes all solver data.
hypre_clean_up_memory() deletes any existing Hypre solver and Hypre matrix
References BoomerAMG, oomph::HypreHelpers::check_HYPRE_error_flag(), Euclid, Existing_preconditioner, Existing_solver, Hypre_error_messages, Matrix_ij, None, OOMPH_EXCEPTION_LOCATION, ParaSails, and Solver.
Referenced by oomph::HypreSolver::clean_up_memory(), oomph::HyprePreconditioner::clean_up_memory(), and ~HypreInterface().
|
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.
References oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::CRDoubleMatrix::clear(), oomph::LinearAlgebraDistribution::communicator_pt(), oomph::HypreHelpers::create_HYPRE_Matrix(), Delete_input_data, oomph::DistributableLinearAlgebraObject::distribution_pt(), hypre__global_error, Hypre_distribution_pt, Hypre_error_messages, Matrix_ij, Matrix_par, oomph::OomphCommunicator::nproc(), oomph::CRDoubleMatrix::nrow(), OOMPH_EXCEPTION_LOCATION, and oomph::oomph_info.
Referenced by oomph::HyprePreconditioner::setup(), and oomph::HypreSolver::solve().
|
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(...).
References BoomerAMG, oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::MPI_Helpers::communicator_pt(), oomph::HypreHelpers::create_HYPRE_Vector(), oomph::DistributableLinearAlgebraObject::distribution_pt(), Euclid, Existing_solver, oomph::LinearAlgebraDistribution::first_row(), Hypre_distribution_pt, Hypre_error_messages, Hypre_method, i, Matrix_par, oomph::MPI_Helpers::mpi_has_been_initialised(), oomph::DoubleVector::norm(), oomph::LinearAlgebraDistribution::nrow_local(), OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, Output_info, ParaSails, BiharmonicTestFunctions1::solution(), Solver, and oomph::TimingHelpers::timer().
Referenced by oomph::HyprePreconditioner::preconditioner_solve(), oomph::HypreSolver::resolve(), and oomph::HypreSolver::solve().
|
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(...).
References AMG_coarsening, AMG_complex_smoother, AMG_damping, AMG_max_levels, AMG_max_row_sum, AMG_print_level, AMG_simple_smoother, AMG_smoother_iterations, AMG_strength, AMG_truncation, AMG_using_simple_smoothing, AMGEuclidSmoother_drop_tol, AMGEuclidSmoother_level, AMGEuclidSmoother_print_level, AMGEuclidSmoother_use_block_jacobi, AMGEuclidSmoother_use_ilut, AMGEuclidSmoother_use_row_scaling, BiCGStab, BoomerAMG, CG, oomph::HypreHelpers::check_HYPRE_error_flag(), oomph::LinearAlgebraDistribution::communicator_pt(), oomph::HypreHelpers::create_HYPRE_Vector(), Euclid, Euclid_droptol, Euclid_level, Euclid_print_level, Euclid_rowScale, oomph::HypreHelpers::euclid_settings_helper(), Euclid_using_BJ, Euclid_using_ILUT, Existing_preconditioner, Existing_solver, GMRES, hypre__global_error, Hypre_distribution_pt, Hypre_error_messages, Hypre_method, i, Internal_preconditioner, Krylov_print_level, Matrix_par, Max_iter, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, Output_info, ParaSails, ParaSails_filter, ParaSails_nlevel, ParaSails_symmetry, ParaSails_thresh, Solver, oomph::TimingHelpers::timer(), and Tolerance.
Referenced by oomph::HyprePreconditioner::setup(), and oomph::HypreSolver::solve().
|
delete |
Broken assignment operator.
|
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)
Referenced by oomph::HypreSolver::amg_coarsening(), oomph::HyprePreconditioner::amg_coarsening(), hypre_solver_setup(), and HypreInterface().
|
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
Referenced by oomph::HypreSolver::amg_complex_smoother(), oomph::HyprePreconditioner::amg_complex_smoother(), hypre_solver_setup(), and HypreInterface().
|
protected |
Damping factor for BoomerAMG smoothed Jacobi or hybrid SOR.
Referenced by oomph::HypreSolver::amg_damping(), oomph::HyprePreconditioner::amg_damping(), hypre_solver_setup(), and HypreInterface().
|
protected |
Maximum number of levels used in AMG.
Referenced by oomph::HypreSolver::amg_max_levels(), oomph::HyprePreconditioner::amg_max_levels(), hypre_solver_setup(), and HypreInterface().
|
protected |
Parameter to identify diagonally dominant parts of the matrix in AMG.
Referenced by oomph::HypreSolver::amg_max_row_sum(), oomph::HyprePreconditioner::amg_max_row_sum(), hypre_solver_setup(), and HypreInterface().
|
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
Referenced by oomph::HypreSolver::amg_print_level(), oomph::HyprePreconditioner::amg_print_level(), hypre_solver_setup(), and HypreInterface().
|
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
Referenced by oomph::HypreSolver::amg_simple_smoother(), oomph::HyprePreconditioner::amg_simple_smoother(), hypre_solver_setup(), and HypreInterface().
|
protected |
The number of smoother iterations to apply.
Referenced by oomph::HypreSolver::amg_smoother_iterations(), oomph::HyprePreconditioner::amg_smoother_iterations(), hypre_solver_setup(), and HypreInterface().
|
protected |
Connection strength threshold parameter for BoomerAMG.
Referenced by oomph::HypreSolver::amg_strength(), oomph::HyprePreconditioner::amg_strength(), hypre_solver_setup(), and HypreInterface().
|
protected |
Interpolation truncation factor for BoomerAMG.
Referenced by oomph::HypreSolver::amg_truncation(), oomph::HyprePreconditioner::amg_truncation(), hypre_solver_setup(), and HypreInterface().
|
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
Referenced by oomph::HypreSolver::amg_using_complex_smoothing(), oomph::HyprePreconditioner::amg_using_complex_smoothing(), oomph::HypreSolver::amg_using_simple_smoothing(), oomph::HyprePreconditioner::amg_using_simple_smoothing(), oomph::HyprePreconditioner::amg_using_simple_smoothing_flag(), hypre_solver_setup(), and HypreInterface().
| double oomph::HypreInterface::AMGEuclidSmoother_drop_tol |
Referenced by hypre_solver_setup(), and HypreInterface().
| unsigned oomph::HypreInterface::AMGEuclidSmoother_level |
Referenced by hypre_solver_setup(), and HypreInterface().
| unsigned oomph::HypreInterface::AMGEuclidSmoother_print_level |
Referenced by hypre_solver_setup(), and HypreInterface().
| bool oomph::HypreInterface::AMGEuclidSmoother_use_block_jacobi |
Referenced by hypre_solver_setup(), and HypreInterface().
| bool oomph::HypreInterface::AMGEuclidSmoother_use_ilut |
Referenced by hypre_solver_setup(), and HypreInterface().
| bool oomph::HypreInterface::AMGEuclidSmoother_use_row_scaling |
Referenced by hypre_solver_setup(), and HypreInterface().
|
protected |
Internal flag which is true when hypre_setup or hypre_solve can delete input matrix.
Referenced by hypre_matrix_setup(), oomph::HyprePreconditioner::setup(), and oomph::HypreSolver::solve().
|
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.
|
protected |
Euclid drop tolerance for ILU(k) and ILUT factorization.
Referenced by oomph::HypreSolver::euclid_droptol(), oomph::HyprePreconditioner::euclid_droptol(), hypre_solver_setup(), and HypreInterface().
|
protected |
Euclid level parameter for ILU(k) factorization.
Referenced by oomph::HypreSolver::euclid_level(), oomph::HyprePreconditioner::euclid_level(), hypre_solver_setup(), and HypreInterface().
|
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
Referenced by oomph::HypreSolver::euclid_print_level(), oomph::HyprePreconditioner::euclid_print_level(), hypre_solver_setup(), and HypreInterface().
|
protected |
Flag to switch on Euclid row scaling.
Referenced by oomph::HypreSolver::disable_euclid_rowScale(), oomph::HyprePreconditioner::disable_euclid_rowScale(), oomph::HypreSolver::enable_euclid_rowScale(), oomph::HyprePreconditioner::enable_euclid_rowScale(), hypre_solver_setup(), and HypreInterface().
|
protected |
Flag to determine if Block Jacobi is used instead of PILU.
Referenced by oomph::HypreSolver::disable_euclid_using_BJ(), oomph::HyprePreconditioner::disable_euclid_using_BJ(), oomph::HypreSolver::enable_euclid_using_BJ(), oomph::HyprePreconditioner::enable_euclid_using_BJ(), hypre_solver_setup(), and HypreInterface().
|
protected |
Flag to determine if ILUT (if true) or ILU(k) is used in Euclid.
Referenced by oomph::HypreSolver::euclid_using_ILUK(), oomph::HyprePreconditioner::euclid_using_ILUK(), oomph::HypreSolver::euclid_using_ILUT(), oomph::HyprePreconditioner::euclid_using_ILUT(), hypre_solver_setup(), and HypreInterface().
|
private |
Used to keep track of which preconditioner (if any) is currently stored.
Referenced by existing_preconditioner(), hypre_clean_up_memory(), hypre_solver_setup(), and HypreInterface().
|
private |
Used to keep track of which solver (if any) is currently stored.
Referenced by existing_solver(), hypre_clean_up_memory(), hypre_solve(), hypre_solver_setup(), and HypreInterface().
|
private |
the distribution for this helpers-
Referenced by hypre_matrix_setup(), hypre_solve(), hypre_solver_setup(), HypreInterface(), and ~HypreInterface().
|
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:
Referenced by disable_hypre_error_messages(), enable_hypre_error_messages(), hypre_clean_up_memory(), hypre_matrix_setup(), hypre_solve(), hypre_solver_setup(), and HypreInterface().
|
protected |
Hypre method flag. Valid values are specified in enumeration.
Referenced by oomph::HypreSolver::hypre_method(), oomph::HyprePreconditioner::hypre_method(), hypre_solve(), hypre_solver_setup(), HypreInterface(), oomph::HyprePreconditioner::HyprePreconditioner(), oomph::HyprePreconditioner::use_BoomerAMG(), oomph::HyprePreconditioner::use_Euclid(), and oomph::HyprePreconditioner::use_ParaSails().
|
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.
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HyprePreconditioner::HyprePreconditioner(), oomph::HypreSolver::internal_preconditioner(), and oomph::HyprePreconditioner::internal_preconditioner().
|
protected |
Used to set the Hypre printing level for the Krylov subspace solvers
Referenced by hypre_solver_setup(), HypreInterface(), and oomph::HypreSolver::krylov_print_level().
|
private |
The Hypre_IJMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...).
Referenced by hypre_clean_up_memory(), and hypre_matrix_setup().
|
private |
The Hypre_ParCSRMatrix version of the matrix used in solve(...), resolve(...) or preconditioner_solve(...).
Referenced by hypre_matrix_setup(), hypre_solve(), and hypre_solver_setup().
|
protected |
Maximum number of iterations used in solver.
Referenced by oomph::HyprePreconditioner::amg_iterations(), hypre_solver_setup(), HypreInterface(), oomph::HyprePreconditioner::HyprePreconditioner(), oomph::HypreSolver::max_iter(), and oomph::HyprePreconditioner::set_amg_iterations().
|
protected |
Flag is true to output info and results of timings.
Referenced by hypre_solve(), hypre_solver_setup(), HypreInterface(), oomph::HyprePreconditioner::preconditioner_solve(), oomph::HypreSolver::resolve(), oomph::HyprePreconditioner::setup(), and oomph::HypreSolver::solve().
|
protected |
ParaSails filter parameter.
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HypreSolver::parasails_filter(), and oomph::HyprePreconditioner::parasails_filter().
|
protected |
ParaSails nlevel parameter.
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HypreSolver::parasails_nlevel(), and oomph::HyprePreconditioner::parasails_nlevel().
|
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)
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HypreSolver::parasails_symmetry(), and oomph::HyprePreconditioner::parasails_symmetry().
|
protected |
ParaSails thresh parameter.
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HypreSolver::parasails_thresh(), and oomph::HyprePreconditioner::parasails_thresh().
|
private |
The internal Hypre preconditioner used in conjunction with Solver. [This is a C structure!]
|
private |
The Hypre solver used in solve(...), resolve(...) or preconditioner_solve(...). [This is a C structure!]
Referenced by hypre_clean_up_memory(), hypre_solve(), and hypre_solver_setup().
|
protected |
Tolerance used to terminate solver.
Referenced by hypre_solver_setup(), HypreInterface(), oomph::HyprePreconditioner::HyprePreconditioner(), and oomph::HypreSolver::tolerance().