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
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
-
M The matrix type to operate on X Type of the update Y Type of the defect l The block level to invert. Default is 1
Function Documentation
◆ apply()
|
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] v The update to be computed d The current defect.
Implements Dune::Preconditioner< X, X >.
◆ deallocate() [1/2]
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]
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]
|
inline |
Get the local left hand side.
- Returns
- The local left hand side.
◆ lhs() [2/3]
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]
X & Dune::OverlappingAssignerILUBase< M, X, Y >::lhs |
Get the local left hand side.
- Returns
- The local left hand side.
◆ operator()() [1/3]
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::operator() | ( | const size_type & | domain | ) |
calculate one entry of the local defect.
- Parameters
-
domain One index of the domain.
◆ operator()() [2/3]
void Dune::OverlappingAssignerILUBase< M, X, Y >::operator() | ( | const size_type & | domain | ) |
calculate one entry of the local defect.
- Parameters
-
domain One index of the domain.
◆ operator()() [3/3]
void Dune::OverlappingAssignerHelper< DynamicMatrixSubdomainSolver< BCRSMatrix< K, Al >, X, Y >, false >::operator() | ( | const size_type & | domainIndex | ) |
calculate one entry of the local defect.
- Parameters
-
domainIndex One index of the domain.
◆ OverlappingAssignerHelper() [1/2]
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
-
maxlength The maximum entries over all subdomains. mat_ The global matrix. b_ the global right hand side. x_ the global left hand side.
◆ OverlappingAssignerHelper() [2/2]
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
-
maxlength The maximum entries over all subdomains. mat The global matrix. b the global right hand side. x the global left hand side.
◆ OverlappingAssignerILUBase()
Dune::OverlappingAssignerILUBase< M, X, Y >::OverlappingAssignerILUBase | ( | std::size_t | maxlength, |
const M & | mat, | ||
const Y & | b, | ||
X & | x | ||
) |
Constructor.
- Parameters
-
maxlength The maximum entries over all subdomains. mat The global matrix. b the global right hand side. x the global left hand side.
◆ relaxResult() [1/3]
|
inline |
relax the result.
- Parameters
-
relax The relaxation parameter.
◆ relaxResult() [2/3]
void Dune::OverlappingAssignerHelper< S< BCRSMatrix< T, A > >, true >::relaxResult | ( | field_type | relax | ) |
relax the result.
- Parameters
-
relax The relaxation parameter.
◆ relaxResult() [3/3]
void Dune::OverlappingAssignerILUBase< M, X, Y >::relaxResult | ( | field_type | relax | ) |
relax the result.
- Parameters
-
relax The relaxation parameter.
◆ rhs() [1/3]
|
inline |
Get the local right hand side.
- Returns
- The local right hand side.
◆ rhs() [2/3]
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]
Y & Dune::OverlappingAssignerILUBase< M, X, Y >::rhs |
Get the local right hand side.
- Returns
- The local right hand side.
◆ SeqOverlappingSchwarz() [1/2]
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
-
mat The matrix to precondition. rowToDomain The mapping of the rows onto the domains. relaxationFactor relaxation 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]
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
-
mat The matrix to precondition. subDomains Array of sets of rowindices belonging to an overlapping subdomain relaxationFactor relaxation 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!