#include <hypre_solver.h>
Public Member Functions | |
HypreSolver () | |
Constructor. More... | |
~HypreSolver () | |
Empty destructor. More... | |
HypreSolver (const HypreSolver &) | |
Broken copy constructor. More... | |
void | operator= (const HypreSolver &) |
Broken assignment operator. More... | |
void | disable_resolve () |
Disable resolve function (overloads the LinearSolver disable_resolve function). More... | |
unsigned & | max_iter () |
Access function to Max_iter. More... | |
double & | tolerance () |
Access function to Tolerance. More... | |
unsigned & | hypre_method () |
Access function to Hypre_method flag – specified via enumeration. More... | |
unsigned & | internal_preconditioner () |
Access function to Internal_preconditioner flag – specified via enumeration. More... | |
void | amg_using_simple_smoothing () |
Function to select use of 'simple' AMG smoothers as controlled by AMG_simple_smoother flag. More... | |
unsigned & | amg_simple_smoother () |
Access function to AMG_simple_smoother flag. More... | |
void | amg_using_complex_smoothing () |
Function to select use of 'complex' AMG smoothers as controlled by AMG_complex_smoother flag. More... | |
unsigned & | amg_complex_smoother () |
Access function to AMG_complex_smoother flag. More... | |
unsigned & | amg_print_level () |
Access function to AMG_print_level. More... | |
unsigned & | amg_smoother_iterations () |
Access function to AMG_smoother_iterations. More... | |
unsigned & | amg_coarsening () |
Access function to AMG_coarsening flag. More... | |
unsigned & | amg_max_levels () |
Access function to AMG_max_levels. More... | |
double & | amg_damping () |
Access function to AMG_damping parameter. More... | |
double & | amg_strength () |
Access function to AMG_strength. More... | |
double & | amg_max_row_sum () |
Access function to AMG_max_row_sum. More... | |
double & | amg_truncation () |
Access function to AMG_truncation. More... | |
int & | parasails_symmetry () |
Access function to ParaSails symmetry flag. More... | |
int & | parasails_nlevel () |
Access function to ParaSails nlevel parameter. More... | |
double & | parasails_thresh () |
Access function to ParaSails thresh parameter. More... | |
double & | parasails_filter () |
Access function to ParaSails filter parameter. More... | |
double & | euclid_droptol () |
Access function to Euclid drop tolerance parameter. More... | |
int & | euclid_level () |
void | enable_euclid_rowScale () |
Enable euclid rowScaling. More... | |
void | disable_euclid_rowScale () |
Disable euclid row scaling. More... | |
void | enable_euclid_using_BJ () |
Enable use of Block Jacobi as opposed to PILU. More... | |
void | disable_euclid_using_BJ () |
Disable use of Block Jacobi,. More... | |
void | euclid_using_ILUK () |
Function to switch on ILU(k) factorization for Euclid (default is ILU(k) factorization) More... | |
void | euclid_using_ILUT () |
Function to switch on ILUT factorization for Euclid (default is ILU(k) factorization) More... | |
unsigned & | euclid_print_level () |
Function 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 () |
Access function to Krylov_print_level. More... | |
void | enable_delete_matrix () |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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 calling this function which changes the flag from false (its default) to true. More... | |
void | disable_delete_matrix () |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix. More... | |
void | solve (Problem *const &problem_pt, DoubleVector &solution) |
Function which uses problem_pt's get_jacobian(...) function to generate a linear system which is then solved. This function deletes any existing internal data and then generates a new Hypre solver. More... | |
void | solve (DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution) |
Function to solve the linear system defined by matrix_pt and rhs. This function will delete any existing internal data and generate a new Hypre solver. Note: The matrix has to be of type CRDoubleMatrix or Distributed CRDoubleMatrix. Note: Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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 calling the enable_delete_matrix() function. More... | |
void | resolve (const DoubleVector &rhs, DoubleVector &solution) |
Function to resolve a linear system using the existing solver data, allowing a solve with a new right hand side vector. This function must be used after a call to solve(...) with enable_resolve set to true. More... | |
void | clean_up_memory () |
Function deletes all solver data. More... | |
![]() | |
LinearSolver () | |
Empty constructor, initialise the member data. More... | |
LinearSolver (const LinearSolver &dummy) | |
Broken copy constructor. More... | |
void | operator= (const LinearSolver &) |
Broken assignment operator. More... | |
virtual | ~LinearSolver () |
Empty virtual destructor. More... | |
void | enable_doc_time () |
Enable documentation of solve times. More... | |
void | disable_doc_time () |
Disable documentation of solve times. More... | |
bool | is_doc_time_enabled () const |
Is documentation of solve times enabled? More... | |
bool | is_resolve_enabled () const |
Boolean flag indicating if resolves are enabled. More... | |
virtual void | enable_resolve () |
Enable resolve (i.e. store matrix and/or LU decomposition, say) Virtual so it can be overloaded to perform additional tasks. More... | |
virtual void | solve (DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result) |
Linear-algebra-type solver: Takes pointer to a matrix and rhs vector and returns the solution of the linear system. More... | |
virtual double | jacobian_setup_time () const |
returns the time taken to assemble the Jacobian matrix and residual vector (needs to be overloaded for each solver) More... | |
virtual double | linear_solver_solution_time () const |
return the time taken to solve the linear system (needs to be overloaded for each linear solver) More... | |
virtual void | enable_computation_of_gradient () |
function to enable the computation of the gradient required for the globally convergent Newton method More... | |
void | disable_computation_of_gradient () |
function to disable the computation of the gradient required for the globally convergent Newton method More... | |
void | reset_gradient () |
function to reset the size of the gradient before each Newton solve More... | |
void | get_gradient (DoubleVector &gradient) |
function to access the gradient, provided it has been computed More... | |
![]() | |
DistributableLinearAlgebraObject () | |
Default constructor - create a distribution. More... | |
DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix) | |
Broken copy constructor. More... | |
void | operator= (const DistributableLinearAlgebraObject &) |
Broken assignment operator. More... | |
virtual | ~DistributableLinearAlgebraObject () |
Destructor. More... | |
LinearAlgebraDistribution * | distribution_pt () const |
access to the LinearAlgebraDistribution More... | |
unsigned | nrow () const |
access function to the number of global rows. More... | |
unsigned | nrow_local () const |
access function for the num of local rows on this processor. More... | |
unsigned | nrow_local (const unsigned &p) const |
access function for the num of local rows on this processor. More... | |
unsigned | first_row () const |
access function for the first row on this processor More... | |
unsigned | first_row (const unsigned &p) const |
access function for the first row on this processor More... | |
bool | distributed () const |
distribution is serial or distributed More... | |
bool | distribution_built () const |
void | build_distribution (const LinearAlgebraDistribution *const dist_pt) |
setup the distribution of this distributable linear algebra object More... | |
void | build_distribution (const LinearAlgebraDistribution &dist) |
setup the distribution of this distributable linear algebra object More... | |
![]() | |
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... | |
Private Attributes | |
bool | Delete_matrix |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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... | |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
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 |
![]() | |
void | clear_distribution () |
clear the distribution of this distributable linear algebra object More... | |
![]() | |
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... | |
![]() | |
bool | Enable_resolve |
Boolean that indicates whether the matrix (or its factors, in the case of direct solver) should be stored so that the resolve function can be used. More... | |
bool | Doc_time |
Boolean flag that indicates whether the time taken. More... | |
bool | Compute_gradient |
flag that indicates whether the gradient required for the globally convergent Newton method should be computed or not More... | |
bool | Gradient_has_been_computed |
flag that indicates whether the gradient was computed or not More... | |
DoubleVector | Gradient_for_glob_conv_newton_solve |
DoubleVector storing the gradient for the globally convergent Newton method. More... | |
![]() | |
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... | |
An LinearSolver class using the suite of Hypre solvers to allow
BoomerAMG (AMG), CG, GMRES or BiCGStab
to be used for LinearSolver::solve(...) or LinearSolver::resolve(...).
The Krylov subspace solvers (CG, GMRES and BiCGStab) may be preconditioned using:
BoomerAMG, Euclid or ParaSails
By default GMRES without preconditioning is used.
Definition at line 517 of file hypre_solver.h.
|
inline |
Constructor.
Definition at line 522 of file hypre_solver.h.
|
inline |
Empty destructor.
Definition at line 539 of file hypre_solver.h.
|
inline |
Broken copy constructor.
Definition at line 542 of file hypre_solver.h.
References oomph::BrokenCopy::broken_copy().
|
inline |
Access function to AMG_coarsening flag.
Definition at line 595 of file hypre_solver.h.
References oomph::HypreHelpers::AMG_coarsening.
|
inline |
Access function to AMG_complex_smoother flag.
Definition at line 586 of file hypre_solver.h.
|
inline |
Access function to AMG_damping parameter.
Definition at line 601 of file hypre_solver.h.
|
inline |
Access function to AMG_max_levels.
Definition at line 598 of file hypre_solver.h.
|
inline |
Access function to AMG_max_row_sum.
Definition at line 607 of file hypre_solver.h.
|
inline |
Access function to AMG_print_level.
Definition at line 589 of file hypre_solver.h.
|
inline |
Access function to AMG_simple_smoother flag.
Definition at line 579 of file hypre_solver.h.
|
inline |
Access function to AMG_smoother_iterations.
Definition at line 592 of file hypre_solver.h.
References oomph::Biharmonic_schur_complement_Hypre_defaults::AMG_smoother_iterations.
|
inline |
Access function to AMG_strength.
Definition at line 604 of file hypre_solver.h.
References oomph::HypreHelpers::AMG_strength.
|
inline |
Access function to AMG_truncation.
Definition at line 610 of file hypre_solver.h.
References oomph::HypreHelpers::AMG_truncation.
|
inline |
Function to select use of 'complex' AMG smoothers as controlled by AMG_complex_smoother flag.
Definition at line 583 of file hypre_solver.h.
|
inline |
Function to select use of 'simple' AMG smoothers as controlled by AMG_simple_smoother flag.
Definition at line 576 of file hypre_solver.h.
|
virtual |
Function deletes all solver data.
clean_up_memory() deletes any existing solver data
Reimplemented from oomph::LinearSolver.
Definition at line 1616 of file hypre_solver.cc.
References oomph::HyprePreconditioner::Context_based_cumulative_npreconditioner_solve, oomph::HyprePreconditioner::Context_based_cumulative_solve_time, oomph::HyprePreconditioner::Context_based_nrow, oomph::HyprePreconditioner::Cumulative_npreconditioner_solve, and oomph::HyprePreconditioner::Cumulative_preconditioner_solve_time.
|
inline |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix.
or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. Calling this function ensures that the matrix is not deleted.
Definition at line 678 of file hypre_solver.h.
|
inline |
Disable euclid row scaling.
Definition at line 635 of file hypre_solver.h.
|
inline |
|
inlinevirtual |
Disable resolve function (overloads the LinearSolver disable_resolve function).
Reimplemented from oomph::LinearSolver.
Definition at line 555 of file hypre_solver.h.
|
inline |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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 calling this function which changes the flag from false (its default) to true.
Definition at line 672 of file hypre_solver.h.
|
inline |
Enable euclid rowScaling.
Definition at line 632 of file hypre_solver.h.
|
inline |
Enable use of Block Jacobi as opposed to PILU.
Definition at line 639 of file hypre_solver.h.
|
inline |
Access function to Euclid drop tolerance parameter.
Definition at line 625 of file hypre_solver.h.
|
inline |
Access function to Euclid level parameter for ILU(k) factorization
Definition at line 629 of file hypre_solver.h.
|
inline |
Function 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 658 of file hypre_solver.h.
|
inline |
Function to switch on ILU(k) factorization for Euclid (default is ILU(k) factorization)
Definition at line 647 of file hypre_solver.h.
|
inline |
Function to switch on ILUT factorization for Euclid (default is ILU(k) factorization)
Definition at line 651 of file hypre_solver.h.
|
inline |
Access function to Hypre_method flag – specified via enumeration.
Definition at line 568 of file hypre_solver.h.
|
inline |
Access function to Internal_preconditioner flag – specified via enumeration.
Definition at line 572 of file hypre_solver.h.
|
inline |
Access function to Krylov_print_level.
Definition at line 661 of file hypre_solver.h.
|
inline |
Access function to Max_iter.
Definition at line 562 of file hypre_solver.h.
References oomph::BlackBoxFDNewtonSolver::Max_iter.
|
inline |
Broken assignment operator.
Definition at line 548 of file hypre_solver.h.
References oomph::BrokenCopy::broken_assign().
|
inline |
Access function to ParaSails filter parameter.
Definition at line 622 of file hypre_solver.h.
|
inline |
Access function to ParaSails nlevel parameter.
Definition at line 616 of file hypre_solver.h.
|
inline |
Access function to ParaSails symmetry flag.
Definition at line 613 of file hypre_solver.h.
|
inline |
Access function to ParaSails thresh parameter.
Definition at line 619 of file hypre_solver.h.
|
virtual |
Function to resolve a linear system using the existing solver data, allowing a solve with a new right hand side vector. This function must be used after a call to solve(...) with enable_resolve set to true.
Resolve performs a linear solve using current solver data (if such data exists).
Reimplemented from oomph::LinearSolver.
Definition at line 1559 of file hypre_solver.cc.
References oomph::DoubleVector::built(), and oomph::DistributableLinearAlgebraObject::distribution_pt().
|
virtual |
Function which uses problem_pt's get_jacobian(...) function to generate a linear system which is then solved. This function deletes any existing internal data and then generates a new Hypre solver.
Problem-based solve function to generate the Jacobian matrix and residual vector and use HypreInterface::hypre_solver_setup(...) and HypreInterface::hypre_solve(...) to solve the linear system. This function will delete any existing data. Note: the returned solution vector is NOT distributed, i.e. all processors hold all values because this is what the Newton solver requires.
Implements oomph::LinearSolver.
Definition at line 1405 of file hypre_solver.cc.
References oomph::Problem::get_jacobian(), oomph::oomph_info, and oomph::TimingHelpers::timer().
|
virtual |
Function to solve the linear system defined by matrix_pt and rhs. This function will delete any existing internal data and generate a new Hypre solver. Note: The matrix has to be of type CRDoubleMatrix or Distributed CRDoubleMatrix. Note: Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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 calling the enable_delete_matrix() function.
Uses HypreInterface::hypre_solve(...) to solve the linear system for a CRDoubleMatrix or a DistributedCRDoubleMatrix. In the latter case, the rhs needs to be distributed too, i.e. the length of the rhs vector must be equal to the number of rows stored locally. Note: the returned solution vector is never distributed, i.e. all processors hold all values
Reimplemented from oomph::LinearSolver.
Definition at line 1460 of file hypre_solver.cc.
References oomph::DoubleVector::built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::DoubleMatrixBase::ncol(), and oomph::DoubleMatrixBase::nrow().
|
inline |
Access function to Tolerance.
Definition at line 565 of file hypre_solver.h.
|
private |
Hypre copies matrix data from oomph-lib's CRDoubleMatrix or DistributedCRDoubleMatrix into its own data structures, doubling the memory requirements for the matrix. 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 724 of file hypre_solver.h.