KASKADE 7 development version
|
Constraint preconditioner for Taylor-Hood discretizations of incompressibility problems. More...
#include <taylorHoodPreconditioner.hh>
Constraint preconditioner for Taylor-Hood discretizations of incompressibility problems.
Incompressibility problems like Stokes, Navier-Stokes, or Lamé-Navier equations lead to symmetric saddle point problems
\[ \begin{bmatrix} A & B^T \\ B \end{bmatrix} \begin{bmatrix}u \\ p \end{bmatrix} = \begin{bmatrix} f \\ 0 \end{bmatrix}, \]
with \( A \in \mathbb{R}^{n\times n}\) spd and \( B\in\mathbb{R}^{m\times n}\) full rank, \( m < n \), or \( K x = b \) for short. This class is an overlapping restricted additive Schwarz (RAS) smoother \( \hat K^{-1} \) of the form \( \hat{K}^{-1} = \sum_i P_i K_i^{-1} R_i^T \), where \( i \) runs through all grid vertices (or, equivalently, the associated patches around the vertices), \( R_i^T \) is a corresponding restriction, \( P_i \) a corresponding prolongation, and \( K_i \) is a submatrix of \( K \) corresponding to the velocity degrees of freedom local to the patch \( i \) and pressure degrees of freedom incident to the velocity dofs.
The preconditioner comes in three flavours, to be chosen by providing a TaylorHoodPreconditionerFlavour flag to the apply() method. They differ in the choice of restriction \( R_i^T \) and prolongation \( P_i \), which are given in terms of a (pseudo-diagonal) matrix \( D \) counting for each (velocity and pressure) dof the number of patches containing the dof. With a slight abuse of notation, we denote by powers of \( D \) elementwise powers.
If PRESMOOTH and POSTSMOOTH flavours (which are transposes of each other) are applied multiplicatively, the resulting two-step preconditioner is a symmetric constraint preconditioner. Symmetry is obtained as in symmetric Gauß-Seidel. The constrains are satisfied because the postsmoother ensures this.
Since \( A \) is assumed to be positive definite (at least on the nullspace of \( B \), one may wish to apply a conjugate gradient solver on \( \mathop\mathrm{ker} B \). This is achieved by projecting the start value onto the nullspace by applying the (nonsymmetric) preconditioner once with flavour POSTSMOOTH, and subsequently applying the symmetrized multiplicative version.
Note that this does not (yet) include a coarse space correction, and is therefore rather a smoother.
X | the linear space of velocity and pressure \( U \times P \). This is a LinearProductSpace of Dune::BlockVector<Dune::FieldVector>, with U entries of dimension dim and P entries of dimension 1. This is, e.g., returned by the assembler's rhs method. |
Literature:
Definition at line 200 of file taylorHoodPreconditioner.hh.
Public Types | |
using | domain_type = X |
The domain type \( U \times P \) of the saddle point system. More... | |
using | range_type = domain_type |
The range type \( U \times P \) of the saddle point system. More... | |
using | field_type = typename X::field_type |
using | Scalar = field_type |
Public Member Functions | |
template<class AGOP , class VelocitySpace > | |
TaylorHoodPreconditioner (AGOP const &K, VelocitySpace const &velocitySpace) | |
Constructor. More... | |
template<class MatrixA , class MatrixB , class MatrixBt , class VelocitySpace > | |
TaylorHoodPreconditioner (MatrixA const &A, MatrixB const &B, MatrixBt const &Bt, VelocitySpace const &velocitySpace) | |
Constructor. More... | |
virtual void | apply (domain_type &x, range_type const &y) override |
Appliess the symmetric preconditioner as \( x \leftarrow \hat{K}^{-1} y \). More... | |
void | apply (domain_type &x, range_type const &y, TaylorHoodPreconditionerFlavour flavour) const |
Applies the preconditioner either as presmoother, postsmoother, or in its symmetric flavour. More... | |
virtual bool | requiresInitializedInput () const |
virtual void | pre (domain_type &x, range_type &) override |
virtual void | post (domain_type &x) override |
virtual Dune::SolverCategory::Category | category () const override |
using Kaskade::TaylorHoodPreconditioner< X >::domain_type = X |
The domain type \( U \times P \) of the saddle point system.
Definition at line 209 of file taylorHoodPreconditioner.hh.
using Kaskade::TaylorHoodPreconditioner< X >::field_type = typename X::field_type |
Definition at line 220 of file taylorHoodPreconditioner.hh.
using Kaskade::TaylorHoodPreconditioner< X >::range_type = domain_type |
The range type \( U \times P \) of the saddle point system.
Note that this is (on the discrete linear algebra side) the same as the domain type, (since the saddle point system is symmetric), even though the preconditioner itself is not necessarily symmetric.
Definition at line 218 of file taylorHoodPreconditioner.hh.
using Kaskade::TaylorHoodPreconditioner< X >::Scalar = field_type |
Definition at line 221 of file taylorHoodPreconditioner.hh.
|
inline |
Constructor.
AGOP | an AssembledGalerkinOperator type |
Definition at line 229 of file taylorHoodPreconditioner.hh.
|
inline |
Constructor.
MatrixA | the type of matrix \( A \) with \( 1 \times 1 \) sized entries. Such matrices are obtained from the assembler (or AssembledGalerkinOperator). |
Definition at line 243 of file taylorHoodPreconditioner.hh.
|
inlineoverridevirtual |
Appliess the symmetric preconditioner as \( x \leftarrow \hat{K}^{-1} y \).
[out] | x | the (approximate) solution |
[in] | y | the right hand side |
Definition at line 334 of file taylorHoodPreconditioner.hh.
Referenced by Kaskade::TaylorHoodPreconditioner< X >::apply(), Kaskade::SymmetricTaylorHoodPreconditioner< AGOP >::apply(), and Kaskade::SymmetricTaylorHoodPreconditioner< AGOP >::init().
|
inline |
Applies the preconditioner either as presmoother, postsmoother, or in its symmetric flavour.
[out] | x | the (approximate) solution |
[in] | y | the right hand side |
[in] | flavour | chooses between symmetric, pre- and post-smoothing options |
Definition at line 346 of file taylorHoodPreconditioner.hh.
|
inlineoverridevirtual |
Definition at line 434 of file taylorHoodPreconditioner.hh.
|
inlineoverridevirtual |
Definition at line 433 of file taylorHoodPreconditioner.hh.
|
inlineoverridevirtual |
Definition at line 432 of file taylorHoodPreconditioner.hh.
|
inlinevirtual |
Definition at line 427 of file taylorHoodPreconditioner.hh.