KASKADE 7 development version
Public Types | Public Member Functions | List of all members
Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex > Class Template Referenceabstract

An additive overlapping domain decomposition type preconditioner for higher order finite elements applied to elliptic equations. More...

#include <domainDecompositionPreconditioner.hh>

Detailed Description

template<class Space, int m, class StorageTag, class SparseMatrixIndex = std::size_t>
class Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >

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.

Template Parameters
Spacea finite element space (FEFunctionSpace)
mthe number of components in the equation
StorageTaga 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.

Inheritance diagram for Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >:
Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType, Space::template Element< m >::type::StorageType >

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...
 

Member Typedef Documentation

◆ domain_type

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
using Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::domain_type = typename Space::template Element<m>::type::StorageType

Definition at line 501 of file domainDecompositionPreconditioner.hh.

◆ field_type

typedef X::field_type Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType , Space::template Element< m >::type::StorageType >::field_type
inherited

Definition at line 211 of file symmetricOperators.hh.

◆ range_type

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
using Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::range_type = domain_type

Definition at line 502 of file domainDecompositionPreconditioner.hh.

Constructor & Destructor Documentation

◆ PatchDomainDecompositionPreconditioner()

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
template<class Matrix >
Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::PatchDomainDecompositionPreconditioner ( Space const &  space,
Matrix const &  A,
typename Matrix::field_type  regularizeForCondition = -1.0,
StorageTag  storageTag = StorageTag(),
int  nTasks = 0 
)
inline

Constructor.

Template Parameters
Matrixthe sparse matrix type of the global stiffness matrix
Parameters
Amatrix to be preconditioned (symmetric and positive definite)
regularizeForConditionaim at the given condition number. No regularization if negative values are provided.
nTasksthe 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.

Member Function Documentation

◆ apply()

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
virtual void Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::apply ( domain_type x,
range_type const &  y 
)
inlinevirtual

Applys the preconditioner as \( x \leftarrow P^{-1} y \).

Parameters
[in]ythe right hand side
[out]xthe (approximate) solution

Definition at line 585 of file domainDecompositionPreconditioner.hh.

◆ applyDp() [1/2]

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
virtual Space::Scalar Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::applyDp ( domain_type x,
range_type const &  y 
)
inlinevirtual

Definition at line 574 of file domainDecompositionPreconditioner.hh.

◆ applyDp() [2/2]

virtual field_type Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType , Space::template Element< m >::type::StorageType >::applyDp ( Space::template Element< m >::type::StorageType &  x,
Space::template Element< m >::type::StorageType const &  y 
)
pure virtualinherited

Computes \( x \leftarrow By \) and returns \( \langle By, y \rangle \).

◆ category()

virtual Dune::SolverCategory::Category Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType , Space::template Element< m >::type::StorageType >::category ( ) const
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.

◆ flops()

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
size_t Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::flops ( ) const
inline

reports the number of floating point operations when applying the preconditioner

Definition at line 642 of file domainDecompositionPreconditioner.hh.

◆ post()

virtual void Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType , Space::template Element< m >::type::StorageType >::post ( Space::template Element< m >::type::StorageType &  x)
inlinevirtualinherited

Preconditioner cleanup.

The provided default implementation does nothing.

Definition at line 225 of file symmetricOperators.hh.

◆ pre()

virtual void Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType , Space::template Element< m >::type::StorageType >::pre ( Space::template Element< m >::type::StorageType &  ,
Space::template Element< m >::type::StorageType &   
)
inlinevirtualinherited

Preconditioner preparation.

The provided default implementation does nothing.

Definition at line 218 of file symmetricOperators.hh.

◆ requiresInitializedInput()

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
virtual bool Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::requiresInitializedInput ( ) const
inlinevirtual

Returns true if the target vector x has to be initialized to zero before calling apply or applyDp.

Implements Kaskade::SymmetricPreconditioner< Space::template Element< m >::type::StorageType, Space::template Element< m >::type::StorageType >.

Definition at line 620 of file domainDecompositionPreconditioner.hh.

◆ storage()

template<class Space , int m, class StorageTag , class SparseMatrixIndex = std::size_t>
size_t Kaskade::PatchDomainDecompositionPreconditioner< Space, m, StorageTag, SparseMatrixIndex >::storage ( ) const
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.


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