Loading...
Searching...
No Matches
Dune::NonoverlappingBlockPreconditioner< C, P > Class Template Reference
Iterative Solvers Template Library (ISTL) » Iterative Solvers » Preconditioners

Nonoverlapping parallel preconditioner. More...

`#include <dune/istl/novlpschwarz.hh>`

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

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

  p | The sequential preconditioner.
  c | The 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

  p | The sequential preconditioner.
  c | The 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 )

inline override virtual

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 where is the approximate inverse of the operator characterizing the preconditioner.

Parameters

  [out] | v | The update to be computed
  | d | The 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 )

inline virtual

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 where is the approximate inverse of the operator characterizing the preconditioner.

Parameters

  [out] | v | The update to be computed
  | d | The 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

inline override virtual

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

inline override virtual

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

  x | The 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 )

inline override virtual

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
Preconditioner<X,Y> prec(...);
prec.pre(x,b); // prepare the preconditioner
prec.apply(x,b); // can be called multiple times now...
prec.post(x); // cleanup internal state
Dune::Preconditioner
Base class for matrix free definition of preconditioners.
Definition preconditioner.hh:33

Parameters

  x | The left hand side of the equation.
  b | The right hand side of the equation.

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

## Friends And Related Symbol Documentation

## 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:

- novlpschwarz.hh