DUNE PDELab (2.8)

Modules

 Parallel Algebraic Multigrid
 A Parallel Algebraic Multigrid based on Agglomeration.
 
 Fast (sequential) Algebraic Multigrid
 An Algebraic Multigrid based on Agglomeration that saves memory bandwidth.
 

Files

file  overlappingschwarz.hh
 Contains one level overlapping Schwarz preconditioners.
 
file  preconditioners.hh
 Define general preconditioner interface.
 

Classes

class  Dune::NonoverlappingBlockPreconditioner< C, P >
 Nonoverlapping parallel preconditioner. More...
 
class  Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >
 Sequential overlapping Schwarz preconditioner. More...
 
class  Dune::OverlappingSchwarzInitializer< I, S, D >
 Initializer for SuperLU Matrices representing the subdomains. More...
 
struct  Dune::AdditiveSchwarzMode
 Tag that the tells the Schwarz method to be additive. More...
 
struct  Dune::MultiplicativeSchwarzMode
 Tag that tells the Schwarz method to be multiplicative. More...
 
struct  Dune::SymmetricMultiplicativeSchwarzMode
 Tag that tells the Schwarz method to be multiplicative and symmetric. More...
 
class  Dune::DynamicMatrixSubdomainSolver< M, X, Y >
 Exact subdomain solver using Dune::DynamicMatrix<T>::solve. More...
 
struct  Dune::AdderSelector< T, X, S >
 template meta program for choosing how to add the correction. More...
 
struct  Dune::IteratorDirectionSelector< T1, T2, forward >
 Helper template meta program for application of overlapping Schwarz. More...
 
struct  Dune::SeqOverlappingSchwarzApplier< T >
 Helper template meta program for application of overlapping Schwarz. More...
 
struct  Dune::SeqOverlappingSchwarzDomainSize< M >
 
class  Dune::Preconditioner< X, Y >
 Base class for matrix free definition of preconditioners. More...
 
class  Dune::InverseOperator2Preconditioner< O, c >
 Turns an InverseOperator into a Preconditioner. More...
 
class  Dune::SeqSSOR< M, X, Y, l >
 Sequential SSOR preconditioner. More...
 
class  Dune::SeqSOR< M, X, Y, l >
 Sequential SOR preconditioner. More...
 
class  Dune::SeqJac< M, X, Y, l >
 The sequential jacobian preconditioner. More...
 
class  Dune::SeqILU< M, X, Y, l >
 Sequential ILU preconditioner. More...
 
class  Dune::Richardson< X, Y >
 Richardson preconditioner. More...
 
class  Dune::SeqILDL< M, X, Y >
 sequential ILDL preconditioner More...
 

Typedefs

template<class M , class X , class Y , int l = 1>
using Dune::SeqGS = SeqSOR< M, X, Y, l >
 Sequential Gauss Seidel preconditioner. More...
 

Functions

 Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::SeqOverlappingSchwarz (const matrix_type &mat, const rowtodomain_vector &rowToDomain, field_type relaxationFactor=1, bool onTheFly_=true)
 
 Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::SeqOverlappingSchwarz (const matrix_type &mat, const subdomain_vector &subDomains, field_type relaxationFactor=1, bool onTheFly_=true)
 Construct the overlapping Schwarz method. More...
 
virtual void Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::apply (X &v, const X &d)
 Apply the precondtioner. More...
 
 Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::OverlappingAssignerHelper (std::size_t maxlength, const BCRSMatrix< K, Al > &mat_, const X &b_, Y &x_)
 Constructor. More...
 
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::deallocate ()
 Deallocates memory of the local vector.
 
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::resetIndexForNextDomain ()
 Resets the local index to zero.
 
DynamicVector< field_type > & Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::lhs ()
 Get the local left hand side. More...
 
DynamicVector< field_type > & Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::rhs ()
 Get the local right hand side. More...
 
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::relaxResult (field_type relax)
 relax the result. More...
 
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::operator() (const size_type &domainIndex)
 calculate one entry of the local defect. More...
 
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::assignResult (block_type &res)
 Assigns the block to the current local index. At the same time the local defect is calculated for the index and stored in the rhs. Afterwards the is incremented for the next block.
 
 Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::OverlappingAssignerHelper (std::size_t maxlength, const matrix_type &mat, const range_type &b, range_type &x)
 Constructor. More...
 
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::deallocate ()
 Deallocates memory of the local vector. More...
 
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::operator() (const size_type &domain)
 calculate one entry of the local defect. More...
 
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::relaxResult (field_type relax)
 relax the result. More...
 
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::assignResult (block_type &res)
 Assigns the block to the current local index. At the same time the local defect is calculated for the index and stored in the rhs. Afterwards the is incremented for the next block.
 
field_type * Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::lhs ()
 Get the local left hand side. More...
 
field_type * Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::rhs ()
 Get the local right hand side. More...
 
 Dune::OverlappingAssignerILUBase< M, X, Y >::OverlappingAssignerILUBase (std::size_t maxlength, const M &mat, const Y &b, X &x)
 Constructor. More...
 
void Dune::OverlappingAssignerILUBase< M, X, Y >::deallocate ()
 Deallocates memory of the local vector. More...
 
void Dune::OverlappingAssignerILUBase< M, X, Y >::operator() (const size_type &domain)
 calculate one entry of the local defect. More...
 
void Dune::OverlappingAssignerILUBase< M, X, Y >::relaxResult (field_type relax)
 relax the result. More...
 
void Dune::OverlappingAssignerILUBase< M, X, Y >::assignResult (block_type &res)
 Assigns the block to the current local index. At the same time the local defect is calculated for the index and stored in the rhs. Afterwards the is incremented for the next block.
 
X & Dune::OverlappingAssignerILUBase< M, X, Y >::lhs ()
 Get the local left hand side. More...
 
Y & Dune::OverlappingAssignerILUBase< M, X, Y >::rhs ()
 Get the local right hand side. More...
 
void Dune::OverlappingAssignerILUBase< M, X, Y >::resetIndexForNextDomain ()
 Resets the local index to zero.
 

Detailed Description

All of our Krylow solvers are preconditioned versions. There are sequential preconditioners (e,g. SeqJacobi, SeqSOR, SeqSSOR) as well as parallel preconditioners (e.g. AMG, BlockPreconditioner) available for plugging them into the solvers together with matching ScalarProducts.

Some of the available preconditioners (e.g. SeqJacobi, SeqSOR, SeqSSOR)) may be given an aditional int as a template parameter, the block recursion level. These preconditioners can be used on block-recursive matrices with an arbitrary hierarchy depth (eg. BCRSMatrix<BCRSMatrix<FieldMatrix,n,m> > >. Given a block recursion level \(k\) those preconditioners work as normal on the offdiagonal blocks, treating them as traditional matrix entries. For the diagonal values a special procedure applies: If \(k>1\) the diagonal is treated as a matrix itself and the preconditioner is applied recursively on the matrix representing the diagonal value \(D=A_{ii}\) with block level \(k-1\). For the case that \(k=1\) the diagonal is treated as a matrix entry resulting in a linear solve or an identity operation depending on the algorithm.

Typedef Documentation

◆ SeqGS

template<class M , class X , class Y , int l = 1>
using Dune::SeqGS = typedef SeqSOR<M,X,Y,l>

Sequential Gauss Seidel preconditioner.

Wraps the naked ISTL generic block Gauss-Seidel preconditioner into the solver framework.

Template Parameters
MThe matrix type to operate on
XType of the update
YType of the defect
lThe block level to invert. Default is 1

Function Documentation

◆ apply()

template<class M , class X , class TM , class TD , class TA >
void Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::apply ( X &  v,
const X &  d 
)
virtual

Apply the precondtioner.

Apply one step of the preconditioner to the system A(v)=d.

On entry v=0 and d=b-A(x) (although this might not be computed in that way. On exit v contains the update, i.e one step computes \( v = M^{-1} d \) where \( M \) is the approximate inverse of the operator \( A \) characterizing the preconditioner.

Parameters
[out]vThe update to be computed
dThe current defect.

Implements Dune::Preconditioner< X, X >.

◆ deallocate() [1/2]

template<template< class > class S, typename T , typename A >
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::deallocate

Deallocates memory of the local vector.

Warning
memory is released by the destructor as this Functor is copied and the copy needs to still have the data.

◆ deallocate() [2/2]

template<class M , class X , class Y >
void Dune::OverlappingAssignerILUBase< M, X, Y >::deallocate

Deallocates memory of the local vector.

Warning
memory is released by the destructor as this Functor is copied and the copy needs to still have the data.

◆ lhs() [1/3]

template<class K , class Al , class X , class Y >
DynamicVector< typename X::field_type > & Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::lhs
inline

Get the local left hand side.

Returns
The local left hand side.

◆ lhs() [2/3]

template<template< class > class S, typename T , typename A >
OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::field_type * Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::lhs

Get the local left hand side.

Returns
The local left hand side.

◆ lhs() [3/3]

template<class M , class X , class Y >
X & Dune::OverlappingAssignerILUBase< M, X, Y >::lhs

Get the local left hand side.

Returns
The local left hand side.

◆ operator()() [1/3]

template<template< class > class S, typename T , typename A >
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::operator() ( const size_type &  domain)

calculate one entry of the local defect.

Parameters
domainOne index of the domain.

◆ operator()() [2/3]

template<class M , class X , class Y >
void Dune::OverlappingAssignerILUBase< M, X, Y >::operator() ( const size_type &  domain)

calculate one entry of the local defect.

Parameters
domainOne index of the domain.

◆ operator()() [3/3]

template<class K , class Al , class X , class Y >
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::operator() ( const size_type &  domainIndex)

calculate one entry of the local defect.

Parameters
domainIndexOne index of the domain.

◆ OverlappingAssignerHelper() [1/2]

template<class K , class Al , class X , class Y >
Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::OverlappingAssignerHelper ( std::size_t  maxlength,
const BCRSMatrix< K, Al > &  mat_,
const X &  b_,
Y &  x_ 
)

Constructor.

Parameters
maxlengthThe maximum entries over all subdomains.
mat_The global matrix.
b_the global right hand side.
x_the global left hand side.

◆ OverlappingAssignerHelper() [2/2]

template<template< class > class S, typename T , typename A >
Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::OverlappingAssignerHelper ( std::size_t  maxlength,
const matrix_type mat,
const range_type &  b,
range_type &  x 
)

Constructor.

Parameters
maxlengthThe maximum entries over all subdomains.
matThe global matrix.
bthe global right hand side.
xthe global left hand side.

◆ OverlappingAssignerILUBase()

template<class M , class X , class Y >
Dune::OverlappingAssignerILUBase< M, X, Y >::OverlappingAssignerILUBase ( std::size_t  maxlength,
const M &  mat,
const Y &  b,
X &  x 
)

Constructor.

Parameters
maxlengthThe maximum entries over all subdomains.
matThe global matrix.
bthe global right hand side.
xthe global left hand side.

◆ relaxResult() [1/3]

template<class K , class Al , class X , class Y >
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::relaxResult ( field_type  relax)
inline

relax the result.

Parameters
relaxThe relaxation parameter.

◆ relaxResult() [2/3]

template<template< class > class S, typename T , typename A >
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::relaxResult ( field_type  relax)

relax the result.

Parameters
relaxThe relaxation parameter.

◆ relaxResult() [3/3]

template<class M , class X , class Y >
void Dune::OverlappingAssignerILUBase< M, X, Y >::relaxResult ( field_type  relax)

relax the result.

Parameters
relaxThe relaxation parameter.

◆ rhs() [1/3]

template<class K , class Al , class X , class Y >
DynamicVector< typename X::field_type > & Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::rhs
inline

Get the local right hand side.

Returns
The local right hand side.

◆ rhs() [2/3]

template<template< class > class S, typename T , typename A >
OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::field_type * Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::rhs

Get the local right hand side.

Returns
The local right hand side.

◆ rhs() [3/3]

template<class M , class X , class Y >
Y & Dune::OverlappingAssignerILUBase< M, X, Y >::rhs

Get the local right hand side.

Returns
The local right hand side.

◆ SeqOverlappingSchwarz() [1/2]

template<class M , class X , class TM , class TD , class TA >
Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::SeqOverlappingSchwarz ( const matrix_type mat,
const rowtodomain_vector rowToDomain,
field_type  relaxationFactor = 1,
bool  onTheFly_ = true 
)

Construct the overlapping Schwarz method

Parameters
matThe matrix to precondition.
rowToDomainThe mapping of the rows onto the domains.
relaxationFactorrelaxation factor
onTheFly_If true the decomposition of the exact local solvers is computed on the fly for each subdomain and iteration step. If false all decompositions are computed in pre and only forward and backward substitution takes place in the iteration steps.

◆ SeqOverlappingSchwarz() [2/2]

template<class M , class X , class TM , class TD , class TA >
Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >::SeqOverlappingSchwarz ( const matrix_type mat,
const subdomain_vector subDomains,
field_type  relaxationFactor = 1,
bool  onTheFly_ = true 
)

Construct the overlapping Schwarz method.

Parameters
matThe matrix to precondition.
subDomainsArray of sets of rowindices belonging to an overlapping subdomain
relaxationFactorrelaxation factor
onTheFly_If true the decomposition of the exact local solvers is computed on the fly for each subdomain and iteration step. If false all decompositions are computed in pre and only forward and backward substitution takes place in the iteration steps.
Warning
Each rowindex should be part of at least one subdomain!
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Dec 21, 23:30, 2024)