KASKADE 7 development version
|
An agglomeration-based preconditioner for elliptic problems discretized with higher-order Lagrange finite elements. More...
#include <agglomerationPreconditioner.hh>
An agglomeration-based preconditioner for elliptic problems discretized with higher-order Lagrange finite elements.
This implements an additive two-level subspace correction preconditioner. The first (fine) level consists of the individual ansatz functions, i.e. a Jacobi preconditioner. The second (coarse) level consists of functions constant one on a single cell, zero on cells not incident to vertices of that cell, and something else in between. A drawback of the approach is that the projected Galerkin matrix on the coarse space is denser than a usual linear FE stiffness matrix. Thus, the coarse space functions span individual subspaces (which realizes a Jacobi smoother on the coarse space), such that we only need to store the diagonal of the projected Galerkin matrix.
For higher order ansatz spaces, the dimension of the coarse space is quite small.
Operator | the Galerkin operator |
The Galerkin operator type can satisfy either the Dune::AssembledLinearOperator interface or, by specialization, be an AssembledGalerkinOperator of block size 1 x 1. For the Dune::AssembledLinearOperator, the matrix type has to implement the Dune::BCRSMatrix interface, the domain and range types have to implement the Dune::BlockVector interface (e.g. FunctionSpaceElement).
Definition at line 157 of file agglomerationPreconditioner.hh.
Public Member Functions | |
template<class Space > | |
AgglomerationPreconditioner (Operator const &opA, Space const &space) | |
Constructor. More... | |
virtual void | apply (domain_type &x, range_type const &y) |
Computes \( x \leftarrow By \). More... | |
virtual field_type | applyDp (domain_type &x, range_type const &y) |
Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \). More... | |
virtual bool | requiresInitializedInput () const |
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp. More... | |
virtual void | pre (Operator::domain_type &, Operator::range_type &) |
Preconditioner preparation. More... | |
virtual void | post (Operator::domain_type &x) |
Preconditioner cleanup. More... | |
virtual field_type | applyDp (Operator::domain_type &x, Operator::range_type const &y)=0 |
Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \). More... | |
virtual Dune::SolverCategory::Category | category () const override |
returns the category of the operator More... | |
Static Public Attributes | |
static int const | category = Dune::SolverCategory::sequential |
|
inline |
Constructor.
Space | Lagrangian finite element space |
opA | the assembled symmetric Galerkin operator |
space | the Lagrangian FE space with which the operator A is discretized |
Definition at line 179 of file agglomerationPreconditioner.hh.
|
inlinevirtual |
Computes \( x \leftarrow By \).
Definition at line 187 of file agglomerationPreconditioner.hh.
|
inlinevirtual |
Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \).
Definition at line 196 of file agglomerationPreconditioner.hh.
|
pure virtualinherited |
Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \).
Implemented in Kaskade::JacobiPreconditionerDetail::JacobiPreconditionerBase< Operator::matrix_type, Operator::domain_type, Operator::range_type >.
|
inlineoverridevirtualinherited |
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 242 of file symmetricOperators.hh.
|
inlinevirtualinherited |
Preconditioner cleanup.
The provided default implementation does nothing.
Definition at line 225 of file symmetricOperators.hh.
|
inlinevirtualinherited |
Preconditioner preparation.
The provided default implementation does nothing.
Definition at line 218 of file symmetricOperators.hh.
|
inlinevirtual |
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp.
Implements Kaskade::SymmetricPreconditioner< Operator::domain_type, Operator::range_type >.
Definition at line 205 of file agglomerationPreconditioner.hh.
|
static |
Definition at line 170 of file agglomerationPreconditioner.hh.