DUNE PDELab (git)

Dune::NonoverlappingBlockPreconditioner< C, P > Class Template Reference

Nonoverlapping parallel preconditioner. More...

#include <dune/istl/novlpschwarz.hh>

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 X::field_type field_type
 The field type of the preconditioner.
 

Public Member Functions

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

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.

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

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


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 24, 23:30, 2024)