oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER > Class Template Reference

#include <general_purpose_preconditioners.h>

+ Inheritance diagram for oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >:

Public Member Functions

 InnerIterationPreconditioner ()
 Constructor. More...
 
 ~InnerIterationPreconditioner ()
 
void clean_up_memory ()
 Clean up memory (empty). Generic interface function. More...
 
void setup ()
 
void preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 
doubletolerance ()
 Access to convergence tolerance of the inner iteration solver. More...
 
unsignedmax_iter ()
 Access to max. number of iterations of the inner iteration solver. More...
 
SOLVER * solver_pt ()
 
PRECONDITIONER * preconditioner_pt ()
 
- Public Member Functions inherited from oomph::Preconditioner
 Preconditioner ()
 Constructor. More...
 
 Preconditioner (const Preconditioner &)=delete
 Broken copy constructor. More...
 
void operator= (const Preconditioner &)=delete
 Broken assignment operator. More...
 
virtual ~Preconditioner ()
 Destructor (empty) More...
 
virtual void preconditioner_solve_transpose (const DoubleVector &r, DoubleVector &z)
 
void setup (DoubleMatrixBase *matrix_pt)
 
void setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt)
 
void enable_silent_preconditioner_setup ()
 Set up the block preconditioner quietly! More...
 
void disable_silent_preconditioner_setup ()
 Be verbose in the block preconditioner setup. 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)=delete
 Broken copy constructor. More...
 
void operator= (const DistributableLinearAlgebraObject &)=delete
 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)
 
void build_distribution (const LinearAlgebraDistribution &dist)
 

Private Attributes

SOLVER * Solver_pt
 pointer to the underlying solver More...
 
PRECONDITIONER * Preconditioner_pt
 pointer to the underlying preconditioner More...
 

Additional Inherited Members

- Protected Member Functions inherited from oomph::DistributableLinearAlgebraObject
void clear_distribution ()
 
- Protected Attributes inherited from oomph::Preconditioner
bool Silent_preconditioner_setup
 Boolean to indicate whether or not the build should be done silently. More...
 
std::ostream * Stream_pt
 Pointer to the output stream – defaults to std::cout. More...
 

Detailed Description

template<class SOLVER, class PRECONDITIONER>
class oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >

A preconditioner for performing inner iteration preconditioner solves. The template argument SOLVER specifies the inner iteration solver (which must be derived from IterativeLinearSolver) and the template argument PRECONDITIONER specifies the preconditioner for the inner iteration iterative solver. Note: For no preconditioning use the IdentityPreconditioner.

Constructor & Destructor Documentation

◆ InnerIterationPreconditioner()

template<class SOLVER , class PRECONDITIONER >
oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::InnerIterationPreconditioner ( )
inline

Constructor.

366  {
367  // create the solver
368  Solver_pt = new SOLVER;
369 
370  // create the preconditioner
371  Preconditioner_pt = new PRECONDITIONER;
372 
373 #ifdef PARANOID
374  // paranoid check that the solver is an iterative solver and
375  // the preconditioner is a preconditioner
376  if (dynamic_cast<IterativeLinearSolver*>(Solver_pt) == 0)
377  {
378  throw OomphLibError(
379  "The template argument SOLVER must be of type IterativeLinearSolver",
382  }
383  if (dynamic_cast<Preconditioner*>(Preconditioner_pt) == 0)
384  {
385  throw OomphLibError(
386  "The template argument PRECONDITIONER must be of type Preconditioner",
389  }
390 #endif
391 
392  // ensure the solver does not re-setup the preconditioner
393  Solver_pt->disable_setup_preconditioner_before_solve();
394 
395  // pass the preconditioner to the solver
396  Solver_pt->preconditioner_pt() = Preconditioner_pt;
397  }
SOLVER * Solver_pt
pointer to the underlying solver
Definition: general_purpose_preconditioners.h:478
PRECONDITIONER * Preconditioner_pt
pointer to the underlying preconditioner
Definition: general_purpose_preconditioners.h:481
Preconditioner()
Constructor.
Definition: preconditioner.h:57
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Preconditioner_pt, and oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt.

◆ ~InnerIterationPreconditioner()

Member Function Documentation

◆ clean_up_memory()

template<class SOLVER , class PRECONDITIONER >
void oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::clean_up_memory ( )
inlinevirtual

Clean up memory (empty). Generic interface function.

Reimplemented from oomph::Preconditioner.

408  {
409  Preconditioner_pt->clean_up_memory();
410  Solver_pt->clean_up_memory();
411  }

References oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Preconditioner_pt, and oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt.

◆ max_iter()

template<class SOLVER , class PRECONDITIONER >
unsigned& oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::max_iter ( )
inline

Access to max. number of iterations of the inner iteration solver.

460  {
461  return Solver_pt->max_iter();
462  }

References oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt.

Referenced by oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::setup().

◆ preconditioner_pt()

template<class SOLVER , class PRECONDITIONER >
PRECONDITIONER* oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::preconditioner_pt ( )
inline

◆ preconditioner_solve()

template<class SOLVER , class PRECONDITIONER >
void oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::preconditioner_solve ( const DoubleVector r,
DoubleVector z 
)
inlinevirtual

Preconditioner solve method. Performs the specified number of Krylov iterations preconditioned with the specified preconditioner

Implements oomph::Preconditioner.

448  {
449  Solver_pt->resolve(r, z);
450  }
r
Definition: UniformPSDSelfTest.py:20

References UniformPSDSelfTest::r, and oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt.

◆ setup()

template<class SOLVER , class PRECONDITIONER >
void oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::setup ( )
inlinevirtual

Preconditioner setup method. Setup the preconditioner for the inner iteration solver.

Implements oomph::Preconditioner.

416  {
417  // set the distribution
420  if (dist_pt != 0)
421  {
422  this->build_distribution(dist_pt->distribution_pt());
423  }
424  else
425  {
426  LinearAlgebraDistribution dist(comm_pt(), matrix_pt()->nrow(), false);
427  this->build_distribution(dist);
428  }
429 
430  // Setup the inner iteration preconditioner (For some reason we need to
431  // remind the compiler that there is also a function named setup in the
432  // base class.)
433  Preconditioner_pt->Preconditioner::setup(matrix_pt());
434 
435  // setup the solverready for resolve
436  unsigned max_iter = Solver_pt->max_iter();
437  Solver_pt->max_iter() = 1;
438  DoubleVector x(this->distribution_pt(), 0.0);
439  DoubleVector y(x);
440  Solver_pt->enable_resolve();
441  Solver_pt->solve(matrix_pt(), x, y);
442  Solver_pt->max_iter() = max_iter;
443  }
std::vector< double > DoubleVector
loads clump configuration
Definition: ClumpInput.h:26
LinearAlgebraDistribution * distribution_pt() const
access to the LinearAlgebraDistribution
Definition: linear_algebra_distribution.h:457
unsigned nrow() const
access function to the number of global rows.
Definition: linear_algebra_distribution.h:463
void build_distribution(const LinearAlgebraDistribution *const dist_pt)
Definition: linear_algebra_distribution.h:507
DistributableLinearAlgebraObject()
Default constructor - create a distribution.
Definition: linear_algebra_distribution.h:438
unsigned & max_iter()
Access to max. number of iterations of the inner iteration solver.
Definition: general_purpose_preconditioners.h:459
virtual DoubleMatrixBase * matrix_pt() const
Get function for matrix pointer.
Definition: preconditioner.h:150
virtual const OomphCommunicator * comm_pt() const
Get function for comm pointer.
Definition: preconditioner.h:171
Scalar * y
Definition: level1_cplx_impl.h:128
list x
Definition: plotDoE.py:28

References oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::Preconditioner::comm_pt(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::Preconditioner::matrix_pt(), oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::max_iter(), oomph::DistributableLinearAlgebraObject::nrow(), oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Preconditioner_pt, oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt, plotDoE::x, and y.

◆ solver_pt()

template<class SOLVER , class PRECONDITIONER >
SOLVER* oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::solver_pt ( )
inline

◆ tolerance()

template<class SOLVER , class PRECONDITIONER >
double& oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::tolerance ( )
inline

Access to convergence tolerance of the inner iteration solver.

454  {
455  return Solver_pt->tolerance();
456  }

References oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::Solver_pt.

Member Data Documentation

◆ Preconditioner_pt

◆ Solver_pt


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