KASKADE 7 development version
|
An additive overlapping domain decomposition type preconditioner for higher order finite elements applied to elliptic equations. More...
#include <domainDecompositionPreconditioner.hh>
An additive overlapping domain decomposition type preconditioner for higher order finite elements applied to elliptic equations.
The subdomains are the stars around grid vertices. The ansatz functions with a support contained in a subdomain are treated as a block, and the corresponding submatrix is inverted using dense linear algebra. The subdomain corrections are added up.
Space | a finite element space (FEFunctionSpace) |
m | the number of components in the equation |
StorageTag | a tag class for selecting the method of computing and storing approximate inverse local matrices. Common tags are, e.g., DenseInverseStorageTag<double>, DenseCholeskyStorageTag<float>, NestedDissectionStorageTag<float,double>. |
Definition at line 495 of file domainDecompositionPreconditioner.hh.
Public Types | |
using | domain_type = typename Space::template Element< m >::type::StorageType |
using | range_type = domain_type |
typedef X::field_type | field_type |
Public Member Functions | |
template<class Matrix > | |
PatchDomainDecompositionPreconditioner (Space const &space, Matrix const &A, typename Matrix::field_type regularizeForCondition=-1.0, StorageTag storageTag=StorageTag(), int nTasks=0) | |
Constructor. More... | |
virtual Space::Scalar | applyDp (domain_type &x, range_type const &y) |
virtual void | apply (domain_type &x, range_type const &y) |
Applys the preconditioner as \( x \leftarrow P^{-1} y \). More... | |
virtual bool | requiresInitializedInput () const |
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp. More... | |
size_t | storage () const |
Reports the storage size (in bytes) of the preconditioner. More... | |
size_t | flops () const |
reports the number of floating point operations when applying the preconditioner More... | |
virtual void | pre (Space::template Element< m >::type::StorageType &, Space::template Element< m >::type::StorageType &) |
Preconditioner preparation. More... | |
virtual void | post (Space::template Element< m >::type::StorageType &x) |
Preconditioner cleanup. More... | |
virtual field_type | applyDp (Space::template Element< m >::type::StorageType &x, Space::template Element< m >::type::StorageType 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... | |
using Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::domain_type = typename Space::template Element<m>::type::StorageType |
Definition at line 501 of file domainDecompositionPreconditioner.hh.
|
inherited |
Definition at line 211 of file symmetricOperators.hh.
using Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::range_type = domain_type |
Definition at line 502 of file domainDecompositionPreconditioner.hh.
|
inline |
Constructor.
Matrix | the sparse matrix type of the global stiffness matrix |
A | matrix to be preconditioned (symmetric and positive definite) |
regularizeForCondition | aim at the given condition number. No regularization if negative values are provided. |
nTasks | the number of groups in which to split the patches (each group is processed in one task, tasks can be executed in parallel). Nonpositive values mean to choos an appropriate default value. |
For the patch matrices, the preconditioner can perform regularization that can help if rounding errors interfere with badly conditioned patch matrices, which may cause failure of the Cholesky inversion. If regularizeForCondition is positive, we regularize each patch matrix \( A \) as follows:
\[ A \leftarrow A + \alpha I, \quad \alpha = \max_{ij} A_{ij} / \mathrm{regularizeForCondition} \]
Reasonable values for regularizeForCondition are above 1000.
Definition at line 520 of file domainDecompositionPreconditioner.hh.
|
inlinevirtual |
Applys the preconditioner as \( x \leftarrow P^{-1} y \).
[in] | y | the right hand side |
[out] | x | the (approximate) solution |
Definition at line 585 of file domainDecompositionPreconditioner.hh.
|
inlinevirtual |
Definition at line 574 of file domainDecompositionPreconditioner.hh.
|
pure virtualinherited |
Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \).
|
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.
|
inline |
reports the number of floating point operations when applying the preconditioner
Definition at line 642 of file domainDecompositionPreconditioner.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.
Definition at line 620 of file domainDecompositionPreconditioner.hh.
|
inline |
Reports the storage size (in bytes) of the preconditioner.
Minor metadata that does not scale with the matrix size is neglected.
Definition at line 630 of file domainDecompositionPreconditioner.hh.