Meros::PCDPreconditionerFactory Class Reference

Factory for building pressure convection-diffusion style block preconditioner. This class of preconditioners were originally proposed by Kay, Loghin, and Wathen (ref) and Silvester, Elman, Kay, and Wathen (ref). More...

#include <Meros_PCDPreconditionerFactory.h>

Collaboration diagram for Meros::PCDPreconditionerFactory:

Collaboration graph
[legend]

List of all members.

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 &paramList)
 
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_


Detailed Description

Factory for building pressure convection-diffusion style block preconditioner. This class of preconditioners were originally proposed by Kay, Loghin, and Wathen (ref) and Silvester, Elman, Kay, and Wathen (ref).

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:

$ \left[ \begin{array}{cc} A & B^T \\ B & C \end{array} \right] = \left[ \begin{array}{cc} I & \\ BF^{-1} & I \end{array} \right] \left[ \begin{array}{cc} F & \\ & -S \end{array} \right] \left[ \begin{array}{cc} I & F^{-1} B^T \\ & I \end{array} \right], $

where $S$ is the Schur complement $S = B F^{-1} B^T - C$. A pressure convection-diffusion style preconditioner is then given by

$ P^{-1} = \left[ \begin{array}{cc} F & B^T \\ & -\tilde S \end{array} \right]^{-1} = \left[ \begin{array}{cc} F^{-1} & \\ & I \end{array} \right] \left[ \begin{array}{cc} I & -B^T \\ & I \end{array} \right] \left[ \begin{array}{cc} I & \\ & -\tilde S^{-1} \end{array} \right] $

where for $\tilde S$ 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.


Constructor & Destructor Documentation

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.


Member Function Documentation

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 (  ) 

References paramList_.

Teuchos::RCP< const Teuchos::ParameterList > PCDPreconditionerFactory::getParameterList (  )  const

References paramList_.

Teuchos::RCP< const Teuchos::ParameterList > PCDPreconditionerFactory::getValidParameters (  )  const

References validPL_.

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 (  ) 

References paramList_.


Member Data Documentation

RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::ApSolveStrategy_ [private]

RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::FSolveStrategy_ [private]

RCP<ParameterList> Meros::PCDPreconditionerFactory::paramList_ [private]

RCP<const LinearOpWithSolveFactoryBase<double> > Meros::PCDPreconditionerFactory::QpSolveStrategy_ [private]

RCP<ParameterList> Meros::PCDPreconditionerFactory::validPL_ [mutable, private]

Referenced by getValidParameters().


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