Preconditioner base class. Gives an interface to call all other preconditioners through and stores the matrix and communicator pointers. All preconditioners should be derived from this class. More...
#include <preconditioner.h>
Public Member Functions | |
Preconditioner () | |
Constructor. More... | |
Preconditioner (const Preconditioner &) | |
Broken copy constructor. More... | |
void | operator= (const Preconditioner &) |
Broken assignment operator. More... | |
virtual | ~Preconditioner () |
Destructor (empty) More... | |
virtual void | preconditioner_solve (const DoubleVector &r, DoubleVector &z)=0 |
Apply the preconditioner. Pure virtual generic interface function. This method should apply the preconditioner operator to the vector r and return the vector z. 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 void | setup ()=0 |
Setup the preconditioner. Pure virtual generic interface function. More... | |
virtual void | clean_up_memory () |
Clean up memory (empty). Generic interface function. More... | |
virtual DoubleMatrixBase * | matrix_pt () const |
Get function for matrix pointer. More... | |
virtual void | set_matrix_pt (DoubleMatrixBase *matrix_pt) |
Set the matrix pointer. More... | |
virtual const OomphCommunicator * | comm_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) |
![]() | |
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... | |
Private Attributes | |
DoubleMatrixBase * | Matrix_pt |
Storage for a pointer to the matrix. More... | |
const OomphCommunicator * | Comm_pt |
Storage for a pointer to the communicator. Null if the preconditioner should not be distributed. More... | |
double | Setup_time |
The time it takes to set up this preconditioner. More... | |
Additional Inherited Members | |
![]() | |
void | clear_distribution () |
clear the distribution of this distributable linear algebra object More... | |
Preconditioner base class. Gives an interface to call all other preconditioners through and stores the matrix and communicator pointers. All preconditioners should be derived from this class.
Definition at line 58 of file preconditioner.h.
|
inline |
Constructor.
Definition at line 64 of file preconditioner.h.
|
inline |
Broken copy constructor.
Definition at line 67 of file preconditioner.h.
References oomph::BrokenCopy::broken_copy().
|
inlinevirtual |
Destructor (empty)
Definition at line 79 of file preconditioner.h.
References preconditioner_solve().
|
inlinevirtual |
Clean up memory (empty). Generic interface function.
Reimplemented in oomph::HelmholtzGMRESMG< MATRIX >, oomph::HyprePreconditioner, oomph::NavierStokesSchurComplementPreconditioner, oomph::MGPreconditioner< DIM >, oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld, oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld, oomph::BlockTriangularPreconditioner< MATRIX >, oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >, oomph::PseudoElasticPreconditionerOld, oomph::BlockDiagonalPreconditioner< MATRIX >, oomph::PressureBasedSolidLSCPreconditioner, oomph::NewMumpsPreconditioner, oomph::InexactSubBiharmonicPreconditioner, oomph::LagrangeEnforcedFlowPreconditioner, oomph::PseudoElasticPreconditioner, oomph::ExactSubBiharmonicPreconditioner, oomph::MatrixBasedLumpedPreconditioner< MATRIX >, oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >, oomph::PseudoElasticFSIPreconditioner, oomph::BiharmonicPreconditioner, oomph::HelmholtzMGPreconditioner< DIM >, oomph::GeneralPurposeBlockPreconditioner< MATRIX >, oomph::SuperLUPreconditioner, and oomph::TrilinosPreconditionerBase.
Definition at line 127 of file preconditioner.h.
Referenced by oomph::PseudoElasticFSIPreconditioner::clean_up_memory(), oomph::TrilinosAztecOOSolver::clean_up_memory(), and oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >::~MatrixBasedLumpedPreconditioner().
|
inlinevirtual |
Get function for comm pointer.
Definition at line 149 of file preconditioner.h.
References Comm_pt.
Referenced by oomph::PressureBasedSolidLSCPreconditioner::assemble_mass_matrix_diagonal(), set_comm_pt(), oomph::MatrixBasedDiagPreconditioner::setup(), oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >::setup(), oomph::IdentityPreconditioner::setup(), oomph::ILUZeroPreconditioner< CCDoubleMatrix >::setup(), and oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::setup().
|
inlinevirtual |
Get function for matrix pointer.
Reimplemented in oomph::BlockPreconditioner< MATRIX >, and oomph::BlockPreconditioner< CRDoubleMatrix >.
Definition at line 130 of file preconditioner.h.
References Matrix_pt.
Referenced by oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), set_matrix_pt(), oomph::SuperLUPreconditioner::setup(), oomph::MatrixBasedDiagPreconditioner::setup(), setup(), oomph::TrilinosPreconditionerBase::setup(), oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >::setup(), oomph::IdentityPreconditioner::setup(), oomph::ILUZeroPreconditioner< CCDoubleMatrix >::setup(), oomph::ILUZeroPreconditioner< CRDoubleMatrix >::setup(), and oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >::setup().
|
inline |
Broken assignment operator.
Definition at line 73 of file preconditioner.h.
References oomph::BrokenCopy::broken_assign().
|
pure virtual |
Apply the preconditioner. Pure virtual generic interface function. This method should apply the preconditioner operator to the vector r and return the vector z.
Implemented in oomph::HelmholtzGMRESMG< MATRIX >, oomph::HyprePreconditioner, oomph::PseudoElasticPreconditionerScalingHelperOld, oomph::NavierStokesSchurComplementPreconditioner, oomph::MGPreconditioner< DIM >, oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld, oomph::DummyBlockPreconditioner< MATRIX >, oomph::ExactBlockPreconditioner< MATRIX >, oomph::SimpleFSIPreconditioner< MATRIX >, oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld, oomph::BlockTriangularPreconditioner< MATRIX >, oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >, oomph::HelmholtzMGPreconditioner< DIM >, oomph::PseudoElasticPreconditionerOld, oomph::BlockDiagonalPreconditioner< MATRIX >, oomph::ILUZeroPreconditioner< CRDoubleMatrix >, oomph::InexactSubBiharmonicPreconditioner, oomph::NewMumpsPreconditioner, oomph::ILUZeroPreconditioner< CCDoubleMatrix >, oomph::IdentityPreconditioner, oomph::ExactSubBiharmonicPreconditioner, oomph::PressureBasedSolidLSCPreconditioner, oomph::LagrangeEnforcedFlowPreconditioner, oomph::FSIPreconditioner, oomph::PseudoElasticPreconditioner, oomph::PseudoElasticFSIPreconditioner, oomph::BiharmonicPreconditioner, oomph::MatrixBasedLumpedPreconditioner< MATRIX >, oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >, oomph::TrilinosPreconditionerBase, oomph::SuperLUPreconditioner, and oomph::MatrixBasedDiagPreconditioner.
Referenced by oomph::OomphLibPreconditionerEpetraOperator::ApplyInverse(), oomph::PseudoElasticFSIPreconditioner::preconditioner_solve(), oomph::FSIPreconditioner::preconditioner_solve(), oomph::PressureBasedSolidLSCPreconditioner::preconditioner_solve(), oomph::GMRES< MATRIX >::solve_helper(), oomph::HelmholtzGMRESMG< MATRIX >::solve_helper(), oomph::HelmholtzFGMRESMG< MATRIX >::solve_helper(), oomph::GMRES< MATRIX >::update(), oomph::HelmholtzGMRESMG< MATRIX >::update(), and ~Preconditioner().
|
inlinevirtual |
Set the communicator pointer.
Definition at line 171 of file preconditioner.h.
References comm_pt(), and Comm_pt.
Referenced by setup().
|
inlinevirtual |
Set the matrix pointer.
Definition at line 146 of file preconditioner.h.
References matrix_pt(), and Matrix_pt.
Referenced by setup(), and oomph::TrilinosAztecOOSolver::solver_setup().
|
inline |
Setup the preconditioner: store the matrix pointer and the communicator pointer then call preconditioner specific setup() function.
Definition at line 90 of file preconditioner.h.
References oomph::LinearAlgebraDistribution::communicator_pt(), oomph::DistributableLinearAlgebraObject::distribution_pt(), matrix_pt(), set_comm_pt(), set_matrix_pt(), setup(), Setup_time, and oomph::TimingHelpers::timer().
Referenced by oomph::PseudoElasticFSIPreconditioner::setup(), oomph::FSIPreconditioner::setup(), oomph::LagrangeEnforcedFlowPreconditioner::setup(), oomph::PressureBasedSolidLSCPreconditioner::setup(), oomph::NavierStokesSchurComplementPreconditioner::setup(), oomph::GMRES< MATRIX >::solve_helper(), oomph::HelmholtzGMRESMG< MATRIX >::solve_helper(), oomph::HelmholtzFGMRESMG< MATRIX >::solve_helper(), and oomph::TrilinosAztecOOSolver::solver_setup().
|
inline |
Compatability layer for old preconditioners where problem pointers were needed. The problem pointer is only used to get a communicator pointer.
Definition at line 116 of file preconditioner.h.
References oomph::ObsoleteCode::obsolete(), and setup().
|
pure virtual |
Setup the preconditioner. Pure virtual generic interface function.
Implemented in oomph::HelmholtzGMRESMG< MATRIX >, oomph::NavierStokesExactPreconditioner< MATRIX >, oomph::HyprePreconditioner, oomph::PseudoElasticPreconditionerScalingHelperOld, oomph::NavierStokesSchurComplementPreconditioner, oomph::MGPreconditioner< DIM >, oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld, oomph::DummyBlockPreconditioner< MATRIX >, oomph::ExactBlockPreconditioner< MATRIX >, oomph::SimpleFSIPreconditioner< MATRIX >, oomph::HelmholtzMGPreconditioner< DIM >, oomph::PseudoElasticPreconditionerSubsidiaryPreconditionerOld, oomph::BlockTriangularPreconditioner< MATRIX >, oomph::InnerIterationPreconditioner< SOLVER, PRECONDITIONER >, oomph::PressureBasedSolidExactPreconditioner< MATRIX >, oomph::BlockDiagonalPreconditioner< MATRIX >, oomph::PseudoElasticPreconditionerOld, oomph::ILUZeroPreconditioner< CRDoubleMatrix >, oomph::InexactSubBiharmonicPreconditioner, oomph::ILUZeroPreconditioner< CCDoubleMatrix >, oomph::NewMumpsPreconditioner, oomph::ExactSubBiharmonicPreconditioner, oomph::IdentityPreconditioner, oomph::PressureBasedSolidLSCPreconditioner, oomph::LagrangeEnforcedFlowPreconditioner, oomph::MatrixBasedLumpedPreconditioner< MATRIX >, oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >, oomph::FSIPreconditioner, oomph::PseudoElasticPreconditioner, oomph::MatrixBasedLumpedPreconditioner< MATRIX >, oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >, oomph::PseudoElasticFSIPreconditioner, oomph::BiharmonicPreconditioner, oomph::MatrixBasedLumpedPreconditioner< MATRIX >, oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >, oomph::TrilinosPreconditionerBase, oomph::MatrixBasedDiagPreconditioner, and oomph::SuperLUPreconditioner.
Referenced by oomph::NavierStokesSchurComplementPreconditioner::disable_accept_non_NavierStokesElementWithDiagonalMassMatrices_elements(), oomph::HelmholtzMGPreconditioner< DIM >::iterations(), oomph::MatrixBasedLumpedPreconditioner< oomph::CRDoubleMatrix >::operator=(), setup(), oomph::PseudoElasticFSIPreconditioner::setup(), and oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::setup().
|
inline |
Returns the time to setup the preconditioner.
Definition at line 175 of file preconditioner.h.
References Setup_time, and turn_into_subsidiary_block_preconditioner().
Referenced by oomph::FSIPreconditioner::setup().
|
inlinevirtual |
Virtual interface function for making a preconditioner a subsidiary of a block preconditioner. By default nothing is needed, but if this preconditioner is also a block preconditioner then things need to happen. There's an assumption here that the block preconditioner will be in CR form but since that assumption is hard coded all over BlockPreconditioner we're safe.
Reimplemented in oomph::BlockPreconditioner< CRDoubleMatrix >.
Definition at line 185 of file preconditioner.h.
Referenced by setup_time().
|
inlinevirtual |
Virtual interface function for making a preconditioner a subsidiary of a block preconditioner. By default nothing is needed, but if this preconditioner is also a block preconditioner then things need to happen. Version for coarsening dof-types.
Reimplemented in oomph::BlockPreconditioner< CRDoubleMatrix >.
Definition at line 193 of file preconditioner.h.
|
private |
Storage for a pointer to the communicator. Null if the preconditioner should not be distributed.
Definition at line 204 of file preconditioner.h.
Referenced by comm_pt(), and set_comm_pt().
|
private |
Storage for a pointer to the matrix.
Definition at line 200 of file preconditioner.h.
Referenced by matrix_pt(), and set_matrix_pt().
|
private |
The time it takes to set up this preconditioner.
Definition at line 207 of file preconditioner.h.
Referenced by setup(), and setup_time().