dune-istl 2.11
Loading...
Searching...
No Matches
Dune::NonoverlappingBlockPreconditioner< C, P > Class Template Reference

Nonoverlapping parallel preconditioner. More...

#include <dune/istl/novlpschwarz.hh>

Inheritance diagram for Dune::NonoverlappingBlockPreconditioner< C, P >:
Inheritance graph

Public Types

typedef P::domain_type domain_type
 The domain type of the preconditioner.
typedef P::range_type range_type
 The range type of the preconditioner.
typedef C communication_type
 The type of the communication object.
typedef P::domain_type::field_type field_type
 The field type of the preconditioner.

Public Member Functions

 NonoverlappingBlockPreconditioner (P &p, const communication_type &c)
 Constructor.
 NonoverlappingBlockPreconditioner (const std::shared_ptr< P > &p, const communication_type &c)
 Constructor.
void pre (domain_type &x, range_type &b) override
 Prepare the preconditioner.
void apply (domain_type &v, const range_type &d) override
 Apply the preconditioner.
template<bool forward>
void apply (X &v, const Y &d)
 Apply one step of the preconditioner to the system A(v)=d.
void post (domain_type &x) override
 Clean up.
SolverCategory::Category category () const override
 Category of the preconditioner (see SolverCategory::Category).

Friends

struct Amg::ConstructionTraits< NonoverlappingBlockPreconditioner< C, P > >

Detailed Description

template<class C, class P>
class Dune::NonoverlappingBlockPreconditioner< C, P >

Nonoverlapping parallel preconditioner.

This is essentially a wrapper that takes a sequential preconditioner. In each step the sequential preconditioner is applied and then all owner data points are updated on all other processes.

Member Typedef Documentation

◆ communication_type

template<class C, class P>
typedef C Dune::NonoverlappingBlockPreconditioner< C, P >::communication_type

The type of the communication object.

◆ domain_type

template<class C, class P>
typedef P::domain_type Dune::NonoverlappingBlockPreconditioner< C, P >::domain_type

The domain type of the preconditioner.

◆ field_type

typedef P::domain_type::field_type Dune::Preconditioner< P::domain_type, P::range_type >::field_type
inherited

The field type of the preconditioner.

◆ range_type

template<class C, class P>
typedef P::range_type Dune::NonoverlappingBlockPreconditioner< C, P >::range_type

The range type of the preconditioner.

Constructor & Destructor Documentation

◆ NonoverlappingBlockPreconditioner() [1/2]

template<class C, class P>
Dune::NonoverlappingBlockPreconditioner< C, P >::NonoverlappingBlockPreconditioner ( P & p,
const communication_type & c )
inline

Constructor.

constructor gets all parameters to operate the prec.

Parameters
pThe sequential preconditioner.
cThe communication object for syncing overlap and copy data points. (E.~g. OwnerOverlapCopyCommunication )

◆ NonoverlappingBlockPreconditioner() [2/2]

template<class C, class P>
Dune::NonoverlappingBlockPreconditioner< C, P >::NonoverlappingBlockPreconditioner ( const std::shared_ptr< P > & p,
const communication_type & c )
inline

Constructor.

constructor gets all parameters to operate the prec.

Parameters
pThe sequential preconditioner.
cThe communication object for syncing overlap and copy data points. (E.~g. OwnerOverlapCopyCommunication )

Member Function Documentation

◆ apply() [1/2]

template<class C, class P>
void Dune::NonoverlappingBlockPreconditioner< C, P >::apply ( domain_type & v,
const range_type & d )
inlineoverridevirtual

Apply the preconditioner.

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< P::domain_type, P::range_type >.

◆ apply() [2/2]

template<class C, class P>
template<bool forward>
void Dune::NonoverlappingBlockPreconditioner< C, P >::apply ( X & v,
const Y & d )
inlinevirtual

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< P::domain_type, P::range_type >.

◆ category()

template<class C, class P>
SolverCategory::Category Dune::NonoverlappingBlockPreconditioner< C, P >::category ( ) const
inlineoverridevirtual

Category of the preconditioner (see SolverCategory::Category).

Implements Dune::Preconditioner< P::domain_type, P::range_type >.

◆ post()

template<class C, class P>
void Dune::NonoverlappingBlockPreconditioner< C, P >::post ( domain_type & x)
inlineoverridevirtual

Clean up.

Clean up.

This method is called after the last apply call for the linear system to be solved. Memory may be deallocated safely here. x is the solution of the linear equation.

Parameters
xThe right hand side of the equation.

Implements Dune::Preconditioner< P::domain_type, P::range_type >.

◆ pre()

template<class C, class P>
void Dune::NonoverlappingBlockPreconditioner< C, P >::pre ( domain_type & x,
range_type & b )
inlineoverridevirtual

Prepare the preconditioner.

Prepare the preconditioner.

A solver solves a linear operator equation A(x)=b by applying one or several steps of the preconditioner. The method pre() is called before the first apply operation. b and x are right hand side and solution vector of the linear system respectively. It may. e.g., scale the system, allocate memory or compute a (I)LU decomposition. Note: The ILU decomposition could also be computed in the constructor or with a separate method of the derived method if several linear systems with the same matrix are to be solved.

Note
if a preconditioner is copied (e.g. for a second thread) again the pre() method has to be called to ensure proper memory management.
X x(0.0);
Y b = ...; // rhs
prec.pre(x,b); // prepare the preconditioner
prec.apply(x,b); // can be called multiple times now...
prec.post(x); // cleanup internal state
Base class for matrix free definition of preconditioners.
Definition preconditioner.hh:33
Parameters
xThe left hand side of the equation.
bThe right hand side of the equation.

Implements Dune::Preconditioner< P::domain_type, P::range_type >.

◆ Amg::ConstructionTraits< NonoverlappingBlockPreconditioner< C, P > >

template<class C, class P>
friend struct Amg::ConstructionTraits< NonoverlappingBlockPreconditioner< C, P > >
friend

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