#include <Meros_PCDPreconditionerFactory.h>
Public Member Functions | |
Constructors/initializers/accessors | |
PCDPreconditionerFactory () | |
Default constructor. | |
PCDPreconditionerFactory (RCP< const LinearOpWithSolveFactoryBase< double > > const &FSolveStrategy, RCP< const LinearOpWithSolveFactoryBase< double > > const &ApSolveStrategy) | |
Constructor for Pressure Convection-Diffusion preconditioner factory. Takes an AztecOO parameter list for the F (convection-diffusion) solve and the Ap (pressure Poisson) solve. | |
PCDPreconditionerFactory (RCP< const LinearOpWithSolveFactoryBase< double > > const &FSolveStrategy, RCP< const LinearOpWithSolveFactoryBase< double > > const &ApSolveStrategy, RCP< const LinearOpWithSolveFactoryBase< double > > const &QpSolveStrategy) | |
Constructor for Pressure Convection-Diffusion preconditioner factory. Takes an AztecOO parameter list for the F (convection-diffusion) solve the Ap (pressure Poisson) solve, and the Qp (pressure mass matrix) solve. | |
Overridden from PreconditionerFactoryBase | |
bool | isCompatible (const LinearOpSourceBase< double > &fwdOpSrc) const |
Check that a LinearOperator object is compatible with *this factory object. | |
RCP< PreconditionerBase< double > > | createPrec () const |
Create an (uninitialized) LinearOperator object to be initalized as the preconditioner later in this->initializePrecOp() . | |
void | initializePrec (const RCP< const LinearOpSourceBase< double > > &fwdOpSrc, PreconditionerBase< double > *precOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED) const |
Initialize the PCDPreconditioner object. | |
void | uninitializePrec (PreconditionerBase< double > *prec, RCP< const LinearOpSourceBase< double > > *fwdOpSrc, ESupportSolveUse *supportSolveUse=NULL) const |
Uninitialize the PCDPreconditioner object. | |
Overridden from ParameterListAcceptor | |
void | setParameterList (RCP< ParameterList > const ¶mList) |
| |
RCP< ParameterList > | getNonconstParameterList () |
| |
RCP< ParameterList > | unsetParameterList () |
| |
RCP< const ParameterList > | getParameterList () const |
| |
RCP< const Teuchos::ParameterList > | getValidParameters () const |
| |
Private Attributes | |
RCP< ParameterList > | validPL_ |
RCP< ParameterList > | paramList_ |
RCP< const LinearOpWithSolveFactoryBase < double > > | FSolveStrategy_ |
RCP< const LinearOpWithSolveFactoryBase < double > > | ApSolveStrategy_ |
RCP< const LinearOpWithSolveFactoryBase < double > > | QpSolveStrategy_ |
Meros 1.0 currently implements the PCD preconditioner, a.k.a. Fp preconditioner.
The LDU factors of a saddle point system are given as follows:
where is the Schur complement
. A pressure convection-diffusion style preconditioner is then given by
where for is an approximation to the Schur complement S.
To apply the above preconditioner, we need a linear solver on the (0,0) block and an approximation to the inverse of the Schur complement.
To build a concrete preconditioner object, we will also need a 2x2 block Thyra matrix or the 4 separate blocks as either Thyra or Epetra matrices. If Thyra, assumes each block is a Thyra EpetraMatrix.
Meros::PCDPreconditionerFactory::PCDPreconditionerFactory | ( | ) |
Default constructor.
PCDPreconditionerFactory::PCDPreconditionerFactory | ( | RCP< const LinearOpWithSolveFactoryBase< double > > const & | FSolveStrategy, | |
RCP< const LinearOpWithSolveFactoryBase< double > > const & | ApSolveStrategy | |||
) |
Constructor for Pressure Convection-Diffusion preconditioner factory. Takes an AztecOO parameter list for the F (convection-diffusion) solve and the Ap (pressure Poisson) solve.
PCDPreconditionerFactory::PCDPreconditionerFactory | ( | RCP< const LinearOpWithSolveFactoryBase< double > > const & | FSolveStrategy, | |
RCP< const LinearOpWithSolveFactoryBase< double > > const & | ApSolveStrategy, | |||
RCP< const LinearOpWithSolveFactoryBase< double > > const & | QpSolveStrategy | |||
) |
Constructor for Pressure Convection-Diffusion preconditioner factory. Takes an AztecOO parameter list for the F (convection-diffusion) solve the Ap (pressure Poisson) solve, and the Qp (pressure mass matrix) solve.
RCP< PreconditionerBase< double > > PCDPreconditionerFactory::createPrec | ( | ) | const |
Create an (uninitialized) LinearOperator
object to be initalized as the preconditioner later in this->initializePrecOp()
.
Note that on output return->domain().get()==NULL
may be true which means that the operator is not fully initialized. In fact, the output operator object is not guaranteed to be fully initialized until after it is passed through this->initializePrecOp()
.
Teuchos::RCP< Teuchos::ParameterList > PCDPreconditionerFactory::getNonconstParameterList | ( | ) |
Teuchos::RCP< const Teuchos::ParameterList > PCDPreconditionerFactory::getParameterList | ( | ) | const |
Teuchos::RCP< const Teuchos::ParameterList > PCDPreconditionerFactory::getValidParameters | ( | ) | const |
void PCDPreconditionerFactory::initializePrec | ( | const RCP< const LinearOpSourceBase< double > > & | fwdOpSrc, | |
PreconditionerBase< double > * | precOp, | |||
const ESupportSolveUse | supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED | |||
) | const |
Initialize the PCDPreconditioner object.
bool PCDPreconditionerFactory::isCompatible | ( | const LinearOpSourceBase< double > & | fwdOpSrc | ) | const |
Check that a LinearOperator
object is compatible with *this
factory object.
void Meros::PCDPreconditionerFactory::setParameterList | ( | RCP< ParameterList > const & | paramList | ) |
void PCDPreconditionerFactory::uninitializePrec | ( | PreconditionerBase< double > * | prec, | |
RCP< const LinearOpSourceBase< double > > * | fwdOpSrc, | |||
ESupportSolveUse * | supportSolveUse = NULL | |||
) | const |
Uninitialize the PCDPreconditioner object.
Teuchos::RCP< Teuchos::ParameterList > PCDPreconditionerFactory::unsetParameterList | ( | ) |
RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::ApSolveStrategy_ [private] |
RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::FSolveStrategy_ [private] |
RCP<ParameterList> Meros::PCDPreconditionerFactory::paramList_ [private] |
Referenced by getNonconstParameterList(), getParameterList(), and unsetParameterList().
RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::QpSolveStrategy_ [private] |
RCP<ParameterList> Meros::PCDPreconditionerFactory::validPL_ [mutable, private] |
Referenced by getValidParameters().