KASKADE 7 development version
Public Types | Public Member Functions | List of all members
Kaskade::TaylorHoodPreconditioner< X > Class Template Reference

Constraint preconditioner for Taylor-Hood discretizations of incompressibility problems. More...

#include <taylorHoodPreconditioner.hh>

Detailed Description

template<class X>
class Kaskade::TaylorHoodPreconditioner< X >

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.

See also
SymmetricTaylorHoodPreconditioner.

Note that this does not (yet) include a coarse space correction, and is therefore rather a smoother.

Template Parameters
Xthe 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.
Warning
This preconditioner assumes that Lagrange finite elements have been used for discretization.

Literature:

Definition at line 200 of file taylorHoodPreconditioner.hh.

Inheritance diagram for Kaskade::TaylorHoodPreconditioner< X >:

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
 

Member Typedef Documentation

◆ domain_type

template<class X >
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.

◆ field_type

template<class X >
using Kaskade::TaylorHoodPreconditioner< X >::field_type = typename X::field_type

Definition at line 220 of file taylorHoodPreconditioner.hh.

◆ range_type

template<class X >
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.

◆ Scalar

template<class X >
using Kaskade::TaylorHoodPreconditioner< X >::Scalar = field_type

Definition at line 221 of file taylorHoodPreconditioner.hh.

Constructor & Destructor Documentation

◆ TaylorHoodPreconditioner() [1/2]

template<class X >
template<class AGOP , class VelocitySpace >
Kaskade::TaylorHoodPreconditioner< X >::TaylorHoodPreconditioner ( AGOP const &  K,
VelocitySpace const &  velocitySpace 
)
inline

Constructor.

Template Parameters
AGOPan AssembledGalerkinOperator type

Definition at line 229 of file taylorHoodPreconditioner.hh.

◆ TaylorHoodPreconditioner() [2/2]

template<class X >
template<class MatrixA , class MatrixB , class MatrixBt , class VelocitySpace >
Kaskade::TaylorHoodPreconditioner< X >::TaylorHoodPreconditioner ( MatrixA const &  A,
MatrixB const &  B,
MatrixBt const &  Bt,
VelocitySpace const &  velocitySpace 
)
inline

Constructor.

Template Parameters
MatrixAthe 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.

Member Function Documentation

◆ apply() [1/2]

template<class X >
virtual void Kaskade::TaylorHoodPreconditioner< X >::apply ( domain_type x,
range_type const &  y 
)
inlineoverridevirtual

Appliess the symmetric preconditioner as \( x \leftarrow \hat{K}^{-1} y \).

Parameters
[out]xthe (approximate) solution
[in]ythe 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().

◆ apply() [2/2]

template<class X >
void Kaskade::TaylorHoodPreconditioner< X >::apply ( domain_type x,
range_type const &  y,
TaylorHoodPreconditionerFlavour  flavour 
) const
inline

Applies the preconditioner either as presmoother, postsmoother, or in its symmetric flavour.

Parameters
[out]xthe (approximate) solution
[in]ythe right hand side
[in]flavourchooses between symmetric, pre- and post-smoothing options

Definition at line 346 of file taylorHoodPreconditioner.hh.

◆ category()

template<class X >
virtual Dune::SolverCategory::Category Kaskade::TaylorHoodPreconditioner< X >::category ( ) const
inlineoverridevirtual

Definition at line 434 of file taylorHoodPreconditioner.hh.

◆ post()

template<class X >
virtual void Kaskade::TaylorHoodPreconditioner< X >::post ( domain_type x)
inlineoverridevirtual

Definition at line 433 of file taylorHoodPreconditioner.hh.

◆ pre()

template<class X >
virtual void Kaskade::TaylorHoodPreconditioner< X >::pre ( domain_type x,
range_type  
)
inlineoverridevirtual

Definition at line 432 of file taylorHoodPreconditioner.hh.

◆ requiresInitializedInput()

template<class X >
virtual bool Kaskade::TaylorHoodPreconditioner< X >::requiresInitializedInput ( ) const
inlinevirtual

Definition at line 427 of file taylorHoodPreconditioner.hh.


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