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

An inexact Uzawa type solver for solving symmetric saddle point systems. More...

#include <uzawa.hh>

Detailed Description

template<class X, class Y>
class Kaskade::UzawaSolver< X, Y >

An inexact Uzawa type solver for solving symmetric saddle point systems.

\[ \begin{array}{cc} A & B^T \\ B & \end{array}\begin{matrix}{c} u \\ \lambda \end{matrix} = \begin{matrix}{c} f \\ g \end{matrix} \]

It implements an inexact preconditioned conjugate gradient method for the Schur complement \( S = BA^{-1}B^T\). The iteration is terminated once the preconditioned residual energy drops below a prescribed reduction factor times the solution energy, i.e. \( r^T\hat S^{-1} S \hat S^{-1} r \le \mathrm{TOL}^2 p^T S p \).

Template Parameters
Xthe linear space of the primal variable \( u \)
Ythe linear space of the dual variable \( \lambda \)

Definition at line 55 of file uzawa.hh.

Inheritance diagram for Kaskade::UzawaSolver< X, Y >:

Public Types

using domain_type = LinearProductSpace< typename X::field_type, boost::fusion::vector< X, Y > >
 The domain type \( X \times Y \) of the Uzawa iteration. More...
 
using range_type = domain_type
 
typedef X::field_type field_type
 
typedef field_type Scalar
 
typedef domain_type Domain
 
typedef range_type Range
 

Public Member Functions

 UzawaSolver (Dune::LinearOperator< X, X > &A_, Dune::InverseOperator< X, X > &invA_, Dune::LinearOperator< X, Y > &B_, Dune::LinearOperator< Y, X > &Bt_, Dune::Preconditioner< Y, Y > &precS_, double reduction_, int maxit_, int verbose_)
 Constructor. More...
 
virtual void apply (Domain &x, Range &b, Dune::InverseOperatorResult &res) override
 Solves the saddle point system \( K x = b \). More...
 
virtual void apply (Domain &x, Range &b, double reduction_, Dune::InverseOperatorResult &res)
 
void apply (Domain &x, Range &b)
 
virtual Dune::SolverCategory::Category category () const override
 returns the category of the operator More...
 

Member Typedef Documentation

◆ Domain

template<class X , class Y >
typedef domain_type Kaskade::UzawaSolver< X, Y >::Domain

Definition at line 70 of file uzawa.hh.

◆ domain_type

template<class X , class Y >
using Kaskade::UzawaSolver< X, Y >::domain_type = LinearProductSpace<typename X::field_type,boost::fusion::vector<X,Y> >

The domain type \( X \times Y \) of the Uzawa iteration.

This is the LinearProductSpace of X and Y

Definition at line 66 of file uzawa.hh.

◆ field_type

template<class X , class Y >
typedef X::field_type Kaskade::UzawaSolver< X, Y >::field_type

Definition at line 68 of file uzawa.hh.

◆ Range

template<class X , class Y >
typedef range_type Kaskade::UzawaSolver< X, Y >::Range

Definition at line 71 of file uzawa.hh.

◆ range_type

template<class X , class Y >
using Kaskade::UzawaSolver< X, Y >::range_type = domain_type

Definition at line 67 of file uzawa.hh.

◆ Scalar

template<class X , class Y >
typedef field_type Kaskade::UzawaSolver< X, Y >::Scalar

Definition at line 69 of file uzawa.hh.

Constructor & Destructor Documentation

◆ UzawaSolver()

template<class X , class Y >
Kaskade::UzawaSolver< X, Y >::UzawaSolver ( Dune::LinearOperator< X, X > &  A_,
Dune::InverseOperator< X, X > &  invA_,
Dune::LinearOperator< X, Y > &  B_,
Dune::LinearOperator< Y, X > &  Bt_,
Dune::Preconditioner< Y, Y > &  precS_,
double  reduction_,
int  maxit_,
int  verbose_ 
)
inline

Constructor.

Parameters
A_the linear operator \( A : X \to X \)
invA_the (approximate) inverse operator \( A^{-1}: X \to X \), needs to be a subclass of Dune::InverseOperator<X,X>
B_the linear operaotr \( B: X\to Y \)
Bt_the linear operator \( B^T : Y\to X\)
precS_the Schur complement preconditioner \( P: Y\to Y \), \( P\approx S \)
reduction_the default required reduction in preconditioned Schur complement's residual
maxit_the maximum number of iterations
verbose_printing level to stdout (0=silent, 1=result, 2=every iteration)

All the given linear operators and the Schur preconditioner are kept by reference, and have to exist during the lifetime of the UzawaSolver object.

Definition at line 89 of file uzawa.hh.

Member Function Documentation

◆ apply() [1/3]

template<class X , class Y >
void Kaskade::UzawaSolver< X, Y >::apply ( Domain x,
Range b 
)
inline

Definition at line 237 of file uzawa.hh.

◆ apply() [2/3]

template<class X , class Y >
virtual void Kaskade::UzawaSolver< X, Y >::apply ( Domain x,
Range b,
double  reduction_,
Dune::InverseOperatorResult &  res 
)
inlinevirtual

Definition at line 231 of file uzawa.hh.

◆ apply() [3/3]

template<class X , class Y >
virtual void Kaskade::UzawaSolver< X, Y >::apply ( Domain x,
Range b,
Dune::InverseOperatorResult &  res 
)
inlineoverridevirtual

Solves the saddle point system \( K x = b \).

Parameters
[in,out]xsolution. On entry, an initial guess is provided.
[in]bright hand side. This will not be modified.
Returns
the initial preconditioned residual energy norm squared

Definition at line 112 of file uzawa.hh.

Referenced by Kaskade::UzawaSolver< X, Y >::apply().

◆ category()

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

returns the category of the operator

From the Dune doxygen documentation it is unclear what this is supposed to mean. We return a dummy here.

Definition at line 248 of file uzawa.hh.


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