Loading...
Searching...
No Matches
Dune::InverseOperator2Preconditioner< O, c > Class Template Reference
Iterative Solvers Template Library (ISTL) » Iterative Solvers » Preconditioners

Turns an InverseOperator into a Preconditioner. More...

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

Inheritance diagram for Dune::InverseOperator2Preconditioner< O, c >:

## Public Types

typedef O::domain_type | domain_type
| The domain type of the preconditioner.
typedef O::range_type | range_type
| The range type of the preconditioner.
typedef range_type::field_type | field_type
| The field type of the preconditioner.
typedef Simd::Scalar< field_type > | scalar_field_type
| scalar type underlying the field_type
typedef FieldTraits< scalar_field_type >::real_type | real_field_type
| real scalar type underlying the field_type
typedef O | InverseOperator
| type of the wrapped inverse operator

## Public Member Functions

| InverseOperator2Preconditioner (InverseOperator &inverse_operator)
| Construct the preconditioner from the solver.
void | pre (domain_type &, range_type &) override
| Prepare the preconditioner.
void | apply (domain_type &v, const range_type &d) override
| Apply one step of the preconditioner to the system A(v)=d.
void | post (domain_type &) override
| Clean up.
SolverCategory::Category | category () const override
| Category of the preconditioner (see SolverCategory::Category).

## Detailed Description

template<class O, int c = -1>
class Dune::InverseOperator2Preconditioner< O, c >

Turns an InverseOperator into a Preconditioner.

Template Parameters

  O | The type of the inverse operator to wrap.

## Member Typedef Documentation

## domain_type

template<class O, int c = -1>

typedef O::domain_type Dune::InverseOperator2Preconditioner< O, c >::domain_type

The domain type of the preconditioner.

## field_type

template<class O, int c = -1>

typedef range_type::field_type Dune::InverseOperator2Preconditioner< O, c >::field_type

The field type of the preconditioner.

## InverseOperator

template<class O, int c = -1>

typedef O Dune::InverseOperator2Preconditioner< O, c >::InverseOperator

type of the wrapped inverse operator

## range_type

template<class O, int c = -1>

typedef O::range_type Dune::InverseOperator2Preconditioner< O, c >::range_type

The range type of the preconditioner.

## real_field_type

template<class O, int c = -1>

typedef FieldTraits<scalar_field_type>::real_type Dune::InverseOperator2Preconditioner< O, c >::real_field_type

real scalar type underlying the field_type

## scalar_field_type

template<class O, int c = -1>

typedef Simd::Scalar<field_type> Dune::InverseOperator2Preconditioner< O, c >::scalar_field_type

scalar type underlying the field_type

## Constructor & Destructor Documentation

## InverseOperator2Preconditioner()

template<class O, int c = -1>

Dune::InverseOperator2Preconditioner< O, c >::InverseOperator2Preconditioner | ( | InverseOperator & | inverse_operator | ) |

inline

Construct the preconditioner from the solver.

Parameters

  inverse_operator | The inverse operator to wrap.

## Member Function Documentation

## apply()

template<class O, int c = -1>

void Dune::InverseOperator2Preconditioner< O, c >::apply | ( | domain_type & | v,
|  | const range_type & | d )

inline override 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< O::domain_type, O::range_type >.

## category()

template<class O, int c = -1>

SolverCategory::Category Dune::InverseOperator2Preconditioner< O, c >::category | ( |  | ) | const

inline override virtual

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

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

## post()

template<class O, int c = -1>

void Dune::InverseOperator2Preconditioner< O, c >::post | ( | domain_type & | x | ) |

inline override virtual

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

## pre()

template<class O, int c = -1>

void Dune::InverseOperator2Preconditioner< O, c >::pre | ( | domain_type & | x,
|  | range_type & | b )

inline override virtual

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

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

- preconditioners.hh