oomph::IdentityPreconditioner Class Reference

The Identity Preconditioner. More...

#include <preconditioner.h>

+ Inheritance diagram for oomph::IdentityPreconditioner:

Public Member Functions

 IdentityPreconditioner ()
 
 IdentityPreconditioner (const IdentityPreconditioner &)=delete
 Broken copy constructor. More...
 
void operator= (const IdentityPreconditioner &)=delete
 Broken assignment operator. More...
 
virtual ~IdentityPreconditioner ()
 Destructor (empty) More...
 
virtual void setup ()
 setup method - just sets the distribution More...
 
virtual void preconditioner_solve (const DoubleVector &r, DoubleVector &z)
 
void preconditioner_solve_transpose (const DoubleVector &r, DoubleVector &z)
 
- 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...
 
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 void clean_up_memory ()
 Clean up memory (empty). Generic interface function. 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)
 

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

The Identity Preconditioner.

Constructor & Destructor Documentation

◆ IdentityPreconditioner() [1/2]

oomph::IdentityPreconditioner::IdentityPreconditioner ( )
inline
255 {}

◆ IdentityPreconditioner() [2/2]

oomph::IdentityPreconditioner::IdentityPreconditioner ( const IdentityPreconditioner )
delete

Broken copy constructor.

◆ ~IdentityPreconditioner()

virtual oomph::IdentityPreconditioner::~IdentityPreconditioner ( )
inlinevirtual

Destructor (empty)

264 {}

Member Function Documentation

◆ operator=()

void oomph::IdentityPreconditioner::operator= ( const IdentityPreconditioner )
delete

Broken assignment operator.

◆ preconditioner_solve()

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

Apply the preconditioner. This method should apply the preconditioner operator to the vector r and return the vector z.

Implements oomph::Preconditioner.

293  {
294 #ifdef PARANOID
295  if (*r.distribution_pt() != *this->distribution_pt())
296  {
297  std::ostringstream error_message_stream;
298  error_message_stream
299  << "The r vector must have the same distribution as the "
300  "preconditioner. "
301  << "(this is the same as the matrix passed to setup())";
302  throw OomphLibError(error_message_stream.str(),
305  }
306  if (z.built())
307  {
308  if (*z.distribution_pt() != *this->distribution_pt())
309  {
310  std::ostringstream error_message_stream;
311  error_message_stream
312  << "The z vector distribution has been setup; it must have the "
313  << "same distribution as the r vector (and preconditioner).";
314  throw OomphLibError(error_message_stream.str(),
317  }
318  }
319 #endif
320 
321  // apply
322  z = r;
323  }
r
Definition: UniformPSDSelfTest.py:20
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::DoubleVector::built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and UniformPSDSelfTest::r.

Referenced by preconditioner_solve_transpose().

◆ preconditioner_solve_transpose()

void oomph::IdentityPreconditioner::preconditioner_solve_transpose ( const DoubleVector r,
DoubleVector z 
)
inlinevirtual

Apply the preconditioner. This method should apply the preconditioner operator to the vector r and return the vector z.

Reimplemented from oomph::Preconditioner.

329  {
330  // Applying the preconditioner to the transposed system is exactly the
331  // same as applying the preconditioner to the original system
333  }
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Definition: preconditioner.h:292

References preconditioner_solve(), and UniformPSDSelfTest::r.

◆ setup()

virtual void oomph::IdentityPreconditioner::setup ( )
inlinevirtual

setup method - just sets the distribution

Implements oomph::Preconditioner.

268  {
269  // first attempt to cast to DistributableLinearAlgebraObject
270  DistributableLinearAlgebraObject* dist_matrix_pt =
272 
273  // if it is a distributable matrix
274  if (dist_matrix_pt != 0)
275  {
276  // store the distribution
277  this->build_distribution(dist_matrix_pt->distribution_pt());
278  }
279  // else it is not a distributable matrix
280  else
281  {
282  // # of rows in the matrix
283  unsigned n_row = matrix_pt()->nrow();
284 
285  LinearAlgebraDistribution dist(comm_pt(), n_row, false);
286  this->build_distribution(dist);
287  }
288  }
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
virtual unsigned long nrow() const =0
Return the number of rows of the matrix.
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

References oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::Preconditioner::comm_pt(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::Preconditioner::matrix_pt(), and oomph::DoubleMatrixBase::nrow().


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