Preconditioners
[Iterative Solvers]

Collaboration diagram for Preconditioners:

Classes

class  Dune::OverlappingSchwarzInitializer< I, S >
 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::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >
 Sequential overlapping Schwarz preconditioner. More...
struct  Dune::SeqOverlappingSchwarzDomainSize< M >
struct  Dune::SeqOverlappingSchwarzDomainSize< BCRSMatrix< FieldMatrix< T, n, m >, A > >
class  Dune::Preconditioner< X, Y >
 Base class for matrix free definition of preconditioners. 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::SeqGS< M, X, Y, l >
 Sequential Gauss Seidel preconditioner. More...
class  Dune::SeqJac< M, X, Y, l >
 The sequential jacobian preconditioner. More...
class  Dune::SeqILU0< M, X, Y >
 Sequential ILU0 preconditioner. More...
class  Dune::SeqILUn< M, X, Y >
 Sequential ILU(n) preconditioner. More...
class  Dune::Richardson< X, Y >
 Richardson preconditioner. More...
class  Dune::ParSSOR< M, X, Y, C >
 A parallel SSOR preconditioner. More...
class  Dune::BlockPreconditioner< X, Y, C, T >
 Block parallel preconditioner. More...

Namespaces

namespace  Dune
namespace  Dune::Amg

Modules

 Parallel Algebraic Multigrid
 

A Parallel Algebraic Multigrid based on Agglomeration.


Files

file  overlappingschwarz.hh
 

Contains one level overlapping Schwarz preconditioners.


file  preconditioners.hh
 

Define general preconditioner interface.


Functions

 Dune::OverlappingSchwarzInitializer::OverlappingSchwarzInitializer (InitializerList &il, const IndexSet &indices)
void Dune::OverlappingSchwarzInitializer::addRowNnz (const Iter &row)
void Dune::OverlappingSchwarzInitializer::allocate ()
void Dune::OverlappingSchwarzInitializer::countEntries (const Iter &row, const CIter &col) const
void Dune::OverlappingSchwarzInitializer::calcColstart () const
void Dune::OverlappingSchwarzInitializer::copyValue (const Iter &row, const CIter &col) const
void Dune::OverlappingSchwarzInitializer::createMatrix () const
 Dune::OverlappingSchwarzInitializer::IndexMap::IndexMap ()
void Dune::OverlappingSchwarzInitializer::IndexMap::insert (size_type grow)
const_iterator Dune::OverlappingSchwarzInitializer::IndexMap::find (size_type grow) const
iterator Dune::OverlappingSchwarzInitializer::IndexMap::find (size_type grow)
const_iterator Dune::OverlappingSchwarzInitializer::IndexMap::end () const
iterator Dune::OverlappingSchwarzInitializer::IndexMap::end ()
 Dune::SeqOverlappingSchwarz::SeqOverlappingSchwarz (const matrix_type &mat, const rowtodomain_vector &rowToDomain, field_type relaxationFactor=1)
 Dune::SeqOverlappingSchwarz::SeqOverlappingSchwarz (const matrix_type &mat, const subdomain_vector &subDomains, field_type relaxationFactor=1)
 Construct the overlapping Schwarz method.
virtual void Dune::SeqOverlappingSchwarz::apply (X &v, const X &d)
 Apply the precondtioner.
 Dune::SeqOverlappingSchwarz::Assigner< BlockVector< FieldVector< T, n >, A > >::Assigner (const M &mat, T *rhs, const BlockVector< FieldVector< T, n >, A > &b, const BlockVector< FieldVector< T, n >, A > &x)
void Dune::SeqOverlappingSchwarz::Assigner< BlockVector< FieldVector< T, n >, A > >::operator() (const size_type &domain)

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 perconditioners (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 blockrecursive matrices with an arbitrary hierarchy depths (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.


Function Documentation

template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::addRowNnz ( const Iter row  )  [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::allocate (  )  [inline, inherited]
template<class M , class X, class TM , bool onTheFly, class TA >
void Dune::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >::apply ( X &  v,
const X &  d 
) [inline, virtual, inherited]

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

template<class M, class X , class TM , bool onTheFly, class TA >
template<typename T , typename A , int n>
Dune::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >::Assigner< BlockVector< FieldVector< T, n >, A > >::Assigner ( const M &  mat,
T *  rhs,
const BlockVector< FieldVector< T, n >, A > &  b,
const BlockVector< FieldVector< T, n >, A > &  x 
) [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::calcColstart (  )  const [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::copyValue ( const Iter row,
const CIter col 
) const [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::countEntries ( const Iter row,
const CIter col 
) const [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::createMatrix (  )  const [inline, inherited]
template<class I , class S >
OverlappingSchwarzInitializer< I, S >::IndexMap::iterator Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::end (  )  [inline, inherited]
template<class I , class S >
OverlappingSchwarzInitializer< I, S >::IndexMap::const_iterator Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::end (  )  const [inline, inherited]
template<class I , class S >
OverlappingSchwarzInitializer< I, S >::IndexMap::iterator Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::find ( size_type  grow  )  [inline, inherited]
template<class I , class S >
OverlappingSchwarzInitializer< I, S >::IndexMap::const_iterator Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::find ( size_type  grow  )  const [inline, inherited]
template<class I , class S >
Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::IndexMap (  )  [inline, inherited]
template<class I , class S >
void Dune::OverlappingSchwarzInitializer< I, S >::IndexMap::insert ( size_type  grow  )  [inline, inherited]

References row.

template<class M , class X , class TM , bool onTheFly, class TA >
template<typename T , typename A , int n>
void Dune::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >::Assigner< BlockVector< FieldVector< T, n >, A > >::operator() ( const size_type domain  )  [inline, inherited]

References col.

template<class I , class S >
Dune::OverlappingSchwarzInitializer< I, S >::OverlappingSchwarzInitializer ( InitializerList il,
const IndexSet indices 
) [inline, inherited]
template<class M , class X , class TM , bool onTheFly, class TA >
Dune::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >::SeqOverlappingSchwarz ( const matrix_type mat,
const subdomain_vector subDomains,
field_type  relaxationFactor = 1 
) [inline, inherited]

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
Warning:
Each rowindex should be part of at least one subdomain!

References row.

template<class M , class X , class TM , bool onTheFly, class TA >
Dune::SeqOverlappingSchwarz< M, X, TM, onTheFly, TA >::SeqOverlappingSchwarz ( const matrix_type mat,
const rowtodomain_vector rowToDomain,
field_type  relaxationFactor = 1 
) [inline, inherited]

Construct the overlapping Schwarz method

Parameters:
mat The matrix to precondition.
rowToDomain The mapping of the rows onto the domains.
relaxationFactor relaxation factor

References row.

Generated on Sat Apr 24 11:13:48 2010 for dune-istl by  doxygen 1.6.3