Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Attributes | List of all members
oomph::HyprePreconditioner Class Reference

#include <hypre_solver.h>

+ Inheritance diagram for oomph::HyprePreconditioner:

Public Member Functions

 HyprePreconditioner (const std::string &context_string="")
 Constructor. Provide optional string that is used in annotation of performance. More...
 
 ~HyprePreconditioner ()
 Destructor. More...
 
 HyprePreconditioner (const HyprePreconditioner &)
 Broken copy constructor. More...
 
void operator= (const HyprePreconditioner &)
 Broken assignment operator. More...
 
void enable_report_my_cumulative_preconditioner_solve_time ()
 Enable reporting of cumulative solve time in destructor. More...
 
void disable_report_my_cumulative_preconditioner_solve_time ()
 Disable reporting of cumulative solve time in destructor. More...
 
void enable_doc_time ()
 Enable documentation of preconditioner timings. More...
 
void disable_doc_time ()
 Disable documentation of preconditioner timings. 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 use_BoomerAMG ()
 Function to select BoomerAMG as the preconditioner. More...
 
void set_amg_iterations (const unsigned &amg_iterations)
 Function to set the number of times to apply BoomerAMG. More...
 
unsigned & amg_iterations ()
 Return function for Max_iter. More...
 
void amg_using_simple_smoothing ()
 Function to select use of 'simple' AMG smoothers as controlled by the flag AMG_simple_smoother. 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 the flag AMG_complex_smoother. More...
 
unsigned & amg_complex_smoother ()
 Access function to AMG_complex_smoother flag. More...
 
bool & amg_using_simple_smoothing_flag ()
 Return function for the AMG_using_simple_smoothing_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...
 
void use_ParaSails ()
 Function to select ParaSails as the preconditioner. 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...
 
void use_Euclid ()
 Function to select use Euclid as the preconditioner. More...
 
double & euclid_droptol ()
 Access function to Euclid drop tolerance parameter. More...
 
int & euclid_level ()
 Access function to Euclid level parameter for ILU(k) factorization. More...
 
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...
 
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 setup ()
 Function to set up a preconditioner for the linear system defined by matrix_pt. This function is required when preconditioning and must be called before using the preconditioner_solve(...) function. This interface allows HyprePreconditioner to be used as a Preconditioner object for oomph-lib's own IterativeLinearSolver class. Note: matrix_pt must point to an object of type CRDoubleMatrix or DistributedCRDoubleMatrix. Note: Hypre copies matrix data from oomph-lib's CRDoubleMatrix and 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 preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 Function applies solver to vector r for preconditioning. This requires a call to setup(...) first. 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 with the delete_matrix() function. More...
 
void clean_up_memory ()
 Function deletes all solver data. More...
 
- Public Member Functions inherited from oomph::Preconditioner
 Preconditioner ()
 Constructor. More...
 
 Preconditioner (const Preconditioner &)
 Broken copy constructor. More...
 
void operator= (const Preconditioner &)
 Broken assignment operator. More...
 
virtual ~Preconditioner ()
 Destructor (empty) More...
 
void setup (DoubleMatrixBase *matrix_pt)
 Setup the preconditioner: store the matrix pointer and the communicator pointer then call preconditioner specific setup() function. More...
 
void setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt)
 Compatability layer for old preconditioners where problem pointers were needed. The problem pointer is only used to get a communicator pointer. More...
 
virtual DoubleMatrixBasematrix_pt () const
 Get function for matrix pointer. More...
 
virtual void set_matrix_pt (DoubleMatrixBase *matrix_pt)
 Set the matrix pointer. More...
 
virtual const OomphCommunicatorcomm_pt () const
 Get function for comm pointer. More...
 
virtual void set_comm_pt (const OomphCommunicator *const comm_pt)
 Set the communicator pointer. More...
 
double setup_time () const
 Returns the time to setup the preconditioner. More...
 
virtual void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse)
 
virtual void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned > > &doftype_coarsen_map_coarse)
 
- Public Member Functions inherited from oomph::DistributableLinearAlgebraObject
 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...
 
LinearAlgebraDistributiondistribution_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...
 
- Public Member Functions inherited from oomph::HypreInterface
 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...
 

Static Public Member Functions

static void report_cumulative_solve_times ()
 Report cumulative solve times of all instantiations of this class. More...
 
static void reset_cumulative_solve_times ()
 Reset cumulative solve times. More...
 

Static Public Attributes

static double Cumulative_preconditioner_solve_time =0.0
 Static double that accumulates the preconditioner solve time of all instantiations of this class. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times(). More...
 
static std::map< std::string,
double > 
Context_based_cumulative_solve_time
 Static double that accumulates the preconditioner solve time of all instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times(). More...
 
static unsigned Cumulative_npreconditioner_solve =0
 Static unsigned that accumulates the number of preconditioner solves of all instantiations of this class. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times(). More...
 
static std::map< std::string,
unsigned > 
Context_based_cumulative_npreconditioner_solve
 Static unsigned that accumulates the number of preconditioner solves of all instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times(). More...
 
static std::map< std::string,
unsigned > 
Context_based_nrow
 Static unsigned that stores nrow for the most recent instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times(). 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...
 
bool Doc_time
 
double My_cumulative_preconditioner_solve_time
 Private double that accumulates the preconditioner solve time of thi instantiation of this class. Is reported in destructor if Report_my_cumulative_preconditioner_solve_time is set to true. More...
 
bool Report_my_cumulative_preconditioner_solve_time
 Bool to request report of My_cumulative_preconditioner_solve_time in destructor. More...
 
std::string Context_string
 String can be used to provide context for annotation. More...
 

Additional Inherited Members

- Public Types inherited from oomph::HypreInterface
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 Attributes inherited from oomph::HypreInterface
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 inherited from oomph::DistributableLinearAlgebraObject
void clear_distribution ()
 clear the distribution of this distributable linear algebra object More...
 
- Protected Member Functions inherited from oomph::HypreInterface
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 inherited from oomph::HypreInterface
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...
 

Detailed Description

An Preconditioner class using the suite of Hypre preconditioners to allow

 BoomerAMG (Algebraic Multi Grid),
 Euclid (ILU) or 
 ParaSails (Approximate inverse) 

to be used for Preconditioner::preconditioner_solve(...). By default BoomerAMG is used.

Definition at line 744 of file hypre_solver.h.

Constructor & Destructor Documentation

oomph::HyprePreconditioner::HyprePreconditioner ( const std::string &  context_string = "")
inline
oomph::HyprePreconditioner::~HyprePreconditioner ( )
inline
oomph::HyprePreconditioner::HyprePreconditioner ( const HyprePreconditioner )
inline

Broken copy constructor.

Definition at line 794 of file hypre_solver.h.

References oomph::BrokenCopy::broken_copy().

Member Function Documentation

unsigned& oomph::HyprePreconditioner::amg_coarsening ( )
inline
unsigned& oomph::HyprePreconditioner::amg_complex_smoother ( )
inline

Access function to AMG_complex_smoother flag.

Definition at line 895 of file hypre_solver.h.

References oomph::HypreInterface::AMG_complex_smoother.

double& oomph::HyprePreconditioner::amg_damping ( )
inline
unsigned& oomph::HyprePreconditioner::amg_iterations ( )
inline

Return function for Max_iter.

Definition at line 878 of file hypre_solver.h.

References oomph::HypreInterface::Max_iter.

Referenced by set_amg_iterations(), and oomph::Biharmonic_schur_complement_Hypre_defaults::set_defaults().

unsigned& oomph::HyprePreconditioner::amg_max_levels ( )
inline

Access function to AMG_max_levels.

Definition at line 913 of file hypre_solver.h.

References oomph::HypreInterface::AMG_max_levels.

double& oomph::HyprePreconditioner::amg_max_row_sum ( )
inline

Access function to AMG_max_row_sum.

Definition at line 922 of file hypre_solver.h.

References oomph::HypreInterface::AMG_max_row_sum.

unsigned& oomph::HyprePreconditioner::amg_print_level ( )
inline

Access function to AMG_print_level.

Definition at line 904 of file hypre_solver.h.

References oomph::HypreInterface::AMG_print_level.

unsigned& oomph::HyprePreconditioner::amg_simple_smoother ( )
inline
unsigned& oomph::HyprePreconditioner::amg_smoother_iterations ( )
inline
double& oomph::HyprePreconditioner::amg_strength ( )
inline
double& oomph::HyprePreconditioner::amg_truncation ( )
inline

Access function to AMG_truncation.

Definition at line 925 of file hypre_solver.h.

References oomph::HypreInterface::AMG_truncation.

void oomph::HyprePreconditioner::amg_using_complex_smoothing ( )
inline

Function to select use of 'complex' AMG smoothers as controlled by the flag AMG_complex_smoother.

Definition at line 892 of file hypre_solver.h.

References oomph::HypreInterface::AMG_using_simple_smoothing.

void oomph::HyprePreconditioner::amg_using_simple_smoothing ( )
inline

Function to select use of 'simple' AMG smoothers as controlled by the flag AMG_simple_smoother.

Definition at line 885 of file hypre_solver.h.

References oomph::HypreInterface::AMG_using_simple_smoothing.

Referenced by oomph::Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper::get_elastic_preconditioner_hypre(), and oomph::Hypre_default_settings::set_defaults_for_2D_poisson_problem().

bool& oomph::HyprePreconditioner::amg_using_simple_smoothing_flag ( )
inline

Return function for the AMG_using_simple_smoothing_flag.

Definition at line 898 of file hypre_solver.h.

References oomph::HypreInterface::AMG_using_simple_smoothing.

void oomph::HyprePreconditioner::clean_up_memory ( )
virtual

Function deletes all solver data.

clean_up_memory() deletes any existing Hypre solver and Hypre matrix

Reimplemented from oomph::Preconditioner.

Definition at line 1874 of file hypre_solver.cc.

References oomph::HypreInterface::hypre_clean_up_memory().

Referenced by setup().

void oomph::HyprePreconditioner::disable_delete_matrix ( )
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 995 of file hypre_solver.h.

References Delete_matrix.

void oomph::HyprePreconditioner::disable_doc_time ( )
inline

Disable documentation of preconditioner timings.

Definition at line 859 of file hypre_solver.h.

References Doc_time.

void oomph::HyprePreconditioner::disable_euclid_rowScale ( )
inline

Disable euclid row scaling.

Definition at line 955 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_rowScale.

void oomph::HyprePreconditioner::disable_euclid_using_BJ ( )
inline

Disable use of Block Jacobi,.

so PILU will be used

Definition at line 963 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_using_BJ.

void oomph::HyprePreconditioner::disable_report_my_cumulative_preconditioner_solve_time ( )
inline

Disable reporting of cumulative solve time in destructor.

Definition at line 852 of file hypre_solver.h.

References Report_my_cumulative_preconditioner_solve_time.

void oomph::HyprePreconditioner::enable_delete_matrix ( )
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 989 of file hypre_solver.h.

References Delete_matrix.

void oomph::HyprePreconditioner::enable_doc_time ( )
inline

Enable documentation of preconditioner timings.

Definition at line 856 of file hypre_solver.h.

References Doc_time.

void oomph::HyprePreconditioner::enable_euclid_rowScale ( )
inline

Enable euclid rowScaling.

Definition at line 952 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_rowScale.

void oomph::HyprePreconditioner::enable_euclid_using_BJ ( )
inline

Enable use of Block Jacobi as opposed to PILU.

Definition at line 959 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_using_BJ.

void oomph::HyprePreconditioner::enable_report_my_cumulative_preconditioner_solve_time ( )
inline

Enable reporting of cumulative solve time in destructor.

Definition at line 848 of file hypre_solver.h.

References Report_my_cumulative_preconditioner_solve_time.

double& oomph::HyprePreconditioner::euclid_droptol ( )
inline

Access function to Euclid drop tolerance parameter.

Definition at line 946 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_droptol.

int& oomph::HyprePreconditioner::euclid_level ( )
inline

Access function to Euclid level parameter for ILU(k) factorization.

Definition at line 949 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_level.

unsigned& oomph::HyprePreconditioner::euclid_print_level ( )
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 978 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_print_level.

void oomph::HyprePreconditioner::euclid_using_ILUK ( )
inline

Function to switch on ILU(k) factorization for Euclid (default is ILU(k) factorization)

Definition at line 967 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_using_ILUT.

void oomph::HyprePreconditioner::euclid_using_ILUT ( )
inline

Function to switch on ILUT factorization for Euclid (default is ILU(k) factorization)

Definition at line 971 of file hypre_solver.h.

References oomph::HypreInterface::Euclid_using_ILUT.

unsigned& oomph::HyprePreconditioner::hypre_method ( )
inline
unsigned& oomph::HyprePreconditioner::internal_preconditioner ( )
inline

Access function to Internal_preconditioner flag – specified via enumeration.

Definition at line 866 of file hypre_solver.h.

References oomph::HypreInterface::Internal_preconditioner.

void oomph::HyprePreconditioner::operator= ( const HyprePreconditioner )
inline

Broken assignment operator.

Definition at line 800 of file hypre_solver.h.

References oomph::BrokenCopy::broken_assign().

double& oomph::HyprePreconditioner::parasails_filter ( )
inline

Access function to ParaSails filter parameter.

Definition at line 940 of file hypre_solver.h.

References oomph::HypreInterface::ParaSails_filter.

int& oomph::HyprePreconditioner::parasails_nlevel ( )
inline

Access function to ParaSails nlevel parameter.

Definition at line 934 of file hypre_solver.h.

References oomph::HypreInterface::ParaSails_nlevel.

int& oomph::HyprePreconditioner::parasails_symmetry ( )
inline

Access function to ParaSails symmetry flag.

Definition at line 931 of file hypre_solver.h.

References oomph::HypreInterface::ParaSails_symmetry.

double& oomph::HyprePreconditioner::parasails_thresh ( )
inline

Access function to ParaSails thresh parameter.

Definition at line 937 of file hypre_solver.h.

References oomph::HypreInterface::ParaSails_thresh.

void oomph::HyprePreconditioner::preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
virtual

Function applies solver to vector r for preconditioning. This requires a call to setup(...) first. 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 with the delete_matrix() function.

Preconditioner_solve uses a hypre solver to precondition vector r.

Implements oomph::Preconditioner.

Definition at line 1803 of file hypre_solver.cc.

References oomph::DoubleVector::built(), Context_based_cumulative_npreconditioner_solve, Context_based_cumulative_solve_time, Context_string, Cumulative_npreconditioner_solve, Cumulative_preconditioner_solve_time, oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::HypreInterface::existing_solver(), oomph::HypreInterface::hypre_solve(), My_cumulative_preconditioner_solve_time, oomph::HypreInterface::None, oomph::HypreInterface::Output_info, and oomph::TimingHelpers::timer().

void oomph::HyprePreconditioner::report_cumulative_solve_times ( )
static
void oomph::HyprePreconditioner::reset_cumulative_solve_times ( )
static
void oomph::HyprePreconditioner::set_amg_iterations ( const unsigned &  amg_iterations)
inline
void oomph::HyprePreconditioner::setup ( )
virtual

Function to set up a preconditioner for the linear system defined by matrix_pt. This function is required when preconditioning and must be called before using the preconditioner_solve(...) function. This interface allows HyprePreconditioner to be used as a Preconditioner object for oomph-lib's own IterativeLinearSolver class. Note: matrix_pt must point to an object of type CRDoubleMatrix or DistributedCRDoubleMatrix. Note: Hypre copies matrix data from oomph-lib's CRDoubleMatrix and 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.

An interface to allow HypreSolver to be used as a Preconditioner for the oomph-lib IterativeLinearSolver class. Matrix has to be of type CRDoubleMatrix or DistributedCRDoubleMatrix.

Implements oomph::Preconditioner.

Definition at line 1738 of file hypre_solver.cc.

References oomph::DistributableLinearAlgebraObject::build_distribution(), clean_up_memory(), Context_based_nrow, Context_string, oomph::HypreInterface::Delete_input_data, Delete_matrix, oomph::DistributableLinearAlgebraObject::distribution_pt(), Doc_time, oomph::HypreInterface::hypre_matrix_setup(), oomph::HypreInterface::hypre_solver_setup(), oomph::Preconditioner::matrix_pt(), oomph::DoubleMatrixBase::ncol(), oomph::CRDoubleMatrix::nnz(), oomph::DoubleMatrixBase::nrow(), oomph::DistributableLinearAlgebraObject::nrow(), oomph::CRDoubleMatrix::nrow(), oomph::DistributableLinearAlgebraObject::nrow_local(), oomph::oomph_info, and oomph::HypreInterface::Output_info.

void oomph::HyprePreconditioner::use_BoomerAMG ( )
inline

Function to select BoomerAMG as the preconditioner.

Definition at line 869 of file hypre_solver.h.

References oomph::HypreInterface::BoomerAMG, and oomph::HypreInterface::Hypre_method.

void oomph::HyprePreconditioner::use_Euclid ( )
inline

Function to select use Euclid as the preconditioner.

Definition at line 943 of file hypre_solver.h.

References oomph::HypreInterface::Euclid, and oomph::HypreInterface::Hypre_method.

void oomph::HyprePreconditioner::use_ParaSails ( )
inline

Function to select ParaSails as the preconditioner.

Definition at line 928 of file hypre_solver.h.

References oomph::HypreInterface::Hypre_method, and oomph::HypreInterface::ParaSails.

Member Data Documentation

std::map< std::string, unsigned > oomph::HyprePreconditioner::Context_based_cumulative_npreconditioner_solve
static

Static unsigned that accumulates the number of preconditioner solves of all instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

Definition at line 831 of file hypre_solver.h.

Referenced by preconditioner_solve(), report_cumulative_solve_times(), and reset_cumulative_solve_times().

std::map< std::string, double > oomph::HyprePreconditioner::Context_based_cumulative_solve_time
static

Static double that accumulates the preconditioner solve time of all instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

map of static doubles that accumulates the preconditioner solve time of all instantiations of this class, labeled by

context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

Definition at line 816 of file hypre_solver.h.

Referenced by preconditioner_solve(), report_cumulative_solve_times(), and reset_cumulative_solve_times().

std::map< std::string, unsigned > oomph::HyprePreconditioner::Context_based_nrow
static

Static unsigned that stores nrow for the most recent instantiations of this class, labeled by context string. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

Definition at line 838 of file hypre_solver.h.

Referenced by report_cumulative_solve_times(), reset_cumulative_solve_times(), and setup().

std::string oomph::HyprePreconditioner::Context_string
private

String can be used to provide context for annotation.

Definition at line 1057 of file hypre_solver.h.

Referenced by HyprePreconditioner(), preconditioner_solve(), setup(), and ~HyprePreconditioner().

unsigned oomph::HyprePreconditioner::Cumulative_npreconditioner_solve =0
static

Static unsigned that accumulates the number of preconditioner solves of all instantiations of this class. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

Definition at line 823 of file hypre_solver.h.

Referenced by preconditioner_solve(), report_cumulative_solve_times(), and reset_cumulative_solve_times().

double oomph::HyprePreconditioner::Cumulative_preconditioner_solve_time =0.0
static

Static double that accumulates the preconditioner solve time of all instantiations of this class. Reset it manually, e.g. after every Newton solve, using reset_cumulative_solve_times().

Static double that accumulates the preconditioner solve time of all instantiations of this class. Reset it manually, e.g. after every Newton solve, using.

reset_cumulative_solve_times().

Definition at line 809 of file hypre_solver.h.

Referenced by preconditioner_solve(), report_cumulative_solve_times(), and reset_cumulative_solve_times().

bool oomph::HyprePreconditioner::Delete_matrix
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 1041 of file hypre_solver.h.

Referenced by disable_delete_matrix(), enable_delete_matrix(), HyprePreconditioner(), and setup().

bool oomph::HyprePreconditioner::Doc_time
private

Definition at line 1044 of file hypre_solver.h.

Referenced by disable_doc_time(), enable_doc_time(), HyprePreconditioner(), and setup().

double oomph::HyprePreconditioner::My_cumulative_preconditioner_solve_time
private

Private double that accumulates the preconditioner solve time of thi instantiation of this class. Is reported in destructor if Report_my_cumulative_preconditioner_solve_time is set to true.

Definition at line 1050 of file hypre_solver.h.

Referenced by HyprePreconditioner(), preconditioner_solve(), and ~HyprePreconditioner().

bool oomph::HyprePreconditioner::Report_my_cumulative_preconditioner_solve_time
private

Bool to request report of My_cumulative_preconditioner_solve_time in destructor.

Definition at line 1054 of file hypre_solver.h.

Referenced by disable_report_my_cumulative_preconditioner_solve_time(), enable_report_my_cumulative_preconditioner_solve_time(), HyprePreconditioner(), and ~HyprePreconditioner().


The documentation for this class was generated from the following files: