Loading...
Searching...
No Matches
Dune::SeqILDL< M, X, Y > Class Template Reference
Iterative Solvers Template Library (ISTL) » Iterative Solvers » Preconditioners

sequential ILDL preconditioner More...

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

Inheritance diagram for Dune::SeqILDL< M, X, Y >:

## Public Types

typedef std::remove_const_t< M > | matrix_type
| type of matrix the preconditioner is for
typedef X | domain_type
| domain type of the preconditioner
typedef Y | range_type
| range type of the preconditioner
typedef X::field_type | field_type
| 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

## Public Member Functions

| SeqILDL (const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
| Constructor.
| SeqILDL (const matrix_type &A, const ParameterTree &config)
| Constructor.
| SeqILDL (const matrix_type &A, real_field_type relax=real_field_type(1))
| constructor
void | pre (X &x, Y &b) override
| Prepare the preconditioner.
void | apply (X &v, const Y &d) override
| Apply one step of the preconditioner to the system A(v)=d.
void | post (X &x) override
| Clean up.
SolverCategory::Category | category () const override
| Category of the preconditioner (see SolverCategory::Category).

## Detailed Description

template<class M, class X, class Y>
class Dune::SeqILDL< M, X, Y >

sequential ILDL preconditioner

Author
  Martin Nolte

Wraps the naked ISTL generic ILDL preconditioner into the solver framework.

Template Parameters

  M | type of matrix to operate on
  X | type of update
  Y | type of defect

## Member Typedef Documentation

## domain_type

template<class M, class X, class Y>

typedef X Dune::SeqILDL< M, X, Y >::domain_type

domain type of the preconditioner

## field_type

template<class M, class X, class Y>

typedef X::field_type Dune::SeqILDL< M, X, Y >::field_type

field type of the preconditioner

## matrix_type

template<class M, class X, class Y>

typedef std::remove_const_t< M > Dune::SeqILDL< M, X, Y >::matrix_type

type of matrix the preconditioner is for

## range_type

template<class M, class X, class Y>

typedef Y Dune::SeqILDL< M, X, Y >::range_type

range type of the preconditioner

## real_field_type

template<class M, class X, class Y>

typedef FieldTraits<scalar_field_type>::real_type Dune::SeqILDL< M, X, Y >::real_field_type

real scalar type underlying the field_type

## scalar_field_type

template<class M, class X, class Y>

typedef Simd::Scalar<field_type> Dune::SeqILDL< M, X, Y >::scalar_field_type

scalar type underlying the field_type

## Constructor & Destructor Documentation

## SeqILDL() [1/3]

template<class M, class X, class Y>

Dune::SeqILDL< M, X, Y >::SeqILDL | ( | const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > & | A,
|  | const ParameterTree & | configuration )

inline

Constructor.

Parameters

  A | The linear operator to use.
  configuration | ParameterTree containing preconditioner parameters.

ParameterTree Key | Meaning
--- | ---
relaxation | relaxation factor

See ISTL_Factory for the ParameterTree layout and examples.

## SeqILDL() [2/3]

template<class M, class X, class Y>

Dune::SeqILDL< M, X, Y >::SeqILDL | ( | const matrix_type & | A,
|  | const ParameterTree & | config )

inline

Constructor.

Parameters

  A | The matrix to operate on.
  config | ParameterTree containing preconditioner parameters.

ParameterTree Key | Meaning
--- | ---
relaxation | relaxation factor. default=1.0

See ISTL_Factory for the ParameterTree layout and examples.

## SeqILDL() [3/3]

template<class M, class X, class Y>

Dune::SeqILDL< M, X, Y >::SeqILDL | ( | const matrix_type & | A,
|  | real_field_type | relax = real_field_type( 1 ) )

inline explicit

constructor

The constructor copies the matrix A and computes its ILDL decomposition.

Parameters

  [in] | A | matrix to operate on
  [in] | relax | relaxation factor

## Member Function Documentation

## apply()

template<class M, class X, class Y>

void Dune::SeqILDL< M, X, Y >::apply | ( | X & | v,
|  | const Y & | 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< X, Y >.

## category()

template<class M, class X, class Y>

SolverCategory::Category Dune::SeqILDL< M, X, Y >::category | ( |  | ) | const

inline override virtual

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

Implements Dune::Preconditioner< X, Y >.

## post()

template<class M, class X, class Y>

void Dune::SeqILDL< M, X, Y >::post | ( | X & | 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< X, Y >.

## pre()

template<class M, class X, class Y>

void Dune::SeqILDL< M, X, Y >::pre | ( | X & | x,
|  | Y & | 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< X, Y >.

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

- preconditioners.hh