A preconditioner based on the Uzawa algorithm for saddle-point problems of the form \( \begin{pmatrix} A & B \\ C & D \end{pmatrix} \begin{pmatrix} u\\ p \end{pmatrix} = \begin{pmatrix} f\\ g \end{pmatrix} \). More...
#include <dumux/linear/preconditioners.hh>
A preconditioner based on the Uzawa algorithm for saddle-point problems of the form \( \begin{pmatrix} A & B \\ C & D \end{pmatrix} \begin{pmatrix} u\\ p \end{pmatrix} = \begin{pmatrix} f\\ g \end{pmatrix} \).
This preconditioner is especially suited for solving the incompressible (Navier-)Stokes equations. Here, \(D = 0\) and \(B = C^T\) if \(\rho = 1\). We do not expect good convergence if energy or mass transport is considered.
See: Benzi, M., Golub, G. H., & Liesen, J. (2005). Numerical solution of saddle point problems. Acta numerica, 14, 1-137 [11] and
Ho, N., Olson, S. D., & Walker, H. F. (2017). Accelerating the Uzawa algorithm. SIAM Journal on Scientific Computing, 39(5), S461-S476 [29]
M | Type of the matrix. |
X | Type of the update. |
Y | Type of the defect. |
l | Preconditioner block level (for compatibility reasons, unused). |
Public Types | |
using | matrix_type = M |
The matrix type the preconditioner is for. More... | |
using | domain_type = X |
The domain type of the preconditioner. More... | |
using | range_type = Y |
The range type of the preconditioner. More... | |
using | field_type = typename X::field_type |
The field type of the preconditioner. More... | |
using | scalar_field_type = Dune::Simd::Scalar< field_type > |
Scalar type underlying the field_type. More... | |
Public Member Functions | |
SeqUzawa (const M &mat, const Dune::ParameterTree ¶ms) | |
Constructor. More... | |
virtual void | pre (X &x, Y &b) |
Prepare the preconditioner. More... | |
virtual void | apply (X &update, const Y ¤tDefect) |
Apply the preconditioner. More... | |
virtual void | post (X &x) |
Clean up. More... | |
virtual Dune::SolverCategory::Category | category () const |
Category of the preconditioner (see SolverCategory::Category) More... | |
using Dumux::SeqUzawa< M, X, Y, l >::domain_type = X |
The domain type of the preconditioner.
using Dumux::SeqUzawa< M, X, Y, l >::field_type = typename X::field_type |
The field type of the preconditioner.
using Dumux::SeqUzawa< M, X, Y, l >::matrix_type = M |
The matrix type the preconditioner is for.
using Dumux::SeqUzawa< M, X, Y, l >::range_type = Y |
The range type of the preconditioner.
using Dumux::SeqUzawa< M, X, Y, l >::scalar_field_type = Dune::Simd::Scalar<field_type> |
Scalar type underlying the field_type.
|
inline |
Constructor.
mat | The matrix to operate on. |
params | Collection of paramters. |
|
inlinevirtual |
Apply the preconditioner.
update | The update to be computed. |
currentDefect | The current defect. |
|
inlinevirtual |
Category of the preconditioner (see SolverCategory::Category)
|
inlinevirtual |
Clean up.
|
inlinevirtual |
Prepare the preconditioner.