#include <Meros_LSCPreconditionerFactory.h>
Public Member Functions | |
Constructors/initializers/accessors | |
| LSCPreconditionerFactory () | |
| Default constructor. | |
| LSCPreconditionerFactory (RefCountPtr< ParameterList > azFParams, RefCountPtr< ParameterList > azBBtParams) | |
| Constructor for Pressure Convection-Diffusion preconditioner factory. Takes an AztecOO parameter list for the F (convection-diffusion) solve and the B*Bt solve. | |
Overridden from PreconditionerFactoryBase | |
| bool | isCompatible (const LinearOpSourceBase< double > &fwdOpSrc) const |
Check that a LinearOperator object is compatible with *this factory object. | |
| RefCountPtr< PreconditionerBase< double > > | createPrec () const |
Create an (uninitialized) LinearOperator object to be initalized as the preconditioner later in this->initializePrecOp(). | |
| void | initializePrec (const RefCountPtr< const LinearOpSourceBase< double > > &fwdOpSrc, PreconditionerBase< double > *precOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED) const |
| Initialize the LSCPreconditioner object. | |
| void | uninitializePrec (PreconditionerBase< double > *prec, RefCountPtr< const LinearOpSourceBase< double > > *fwdOpSrc, ESupportSolveUse *supportSolveUse=NULL) const |
| Uninitialize the LSCPreconditioner object. | |
Overridden from ParameterListAcceptor | |
| void | setParameterList (RefCountPtr< ParameterList > const ¶mList) |
| RefCountPtr< ParameterList > | getParameterList () |
| RefCountPtr< ParameterList > | unsetParameterList () |
| RefCountPtr< const ParameterList > | getParameterList () const |
| RefCountPtr< const Teuchos::ParameterList > | getValidParameters () const |
Note that the LSC preconditioner assumes that we are using a stable discretization an a uniform mesh.
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], $](form_0.png)
where
is the Schur complement
. 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] $](form_3.png)
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.
|
|
Create an (uninitialized)
Note that on output |
1.3.9.1