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

A parallel SSOR preconditioner. More...

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

Inheritance diagram for Dune::ParSSOR< M, X, Y, C >:

## Public Types

typedef M | matrix_type
| The matrix type the preconditioner is for.
typedef X | domain_type
| The domain type of the preconditioner.
typedef Y | range_type
| The range type of the preconditioner.
typedef X::field_type | field_type
| The field type of the preconditioner.
typedef C | communication_type
| The type of the communication object.

## Public Member Functions

| ParSSOR (const matrix_type &A, int n, field_type w, const communication_type &c)
| Constructor.
void | pre (X &x, Y &b) override
| Prepare the preconditioner.
void | apply (X &v, const Y &d) override
| Apply the preconditioner.
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 C>
class Dune::ParSSOR< M, X, Y, C >

A parallel SSOR preconditioner.

Template Parameters

  M | The type of the sequential matrix to use, e.g. BCRSMatrix or another matrix type fulfilling the matrix interface of ISTL.
  X | The type of the sequential vector to use for the left hand side, e.g. BlockVector or another type fulfilling the ISTL vector interface.
  Y | The type of the sequential vector to use for the right hand side, e..g. BlockVector or another type fulfilling the ISTL vector interface.
  C | The type of the communication object. This must either be OwnerOverlapCopyCommunication or a type implementing the same interface.

## Member Typedef Documentation

## communication_type

template<class M, class X, class Y, class C>

typedef C Dune::ParSSOR< M, X, Y, C >::communication_type

The type of the communication object.

## domain_type

template<class M, class X, class Y, class C>

typedef X Dune::ParSSOR< M, X, Y, C >::domain_type

The domain type of the preconditioner.

## field_type

template<class M, class X, class Y, class C>

typedef X::field_type Dune::ParSSOR< M, X, Y, C >::field_type

The field type of the preconditioner.

## matrix_type

template<class M, class X, class Y, class C>

typedef M Dune::ParSSOR< M, X, Y, C >::matrix_type

The matrix type the preconditioner is for.

## range_type

template<class M, class X, class Y, class C>

typedef Y Dune::ParSSOR< M, X, Y, C >::range_type

The range type of the preconditioner.

## Constructor & Destructor Documentation

## ParSSOR()

template<class M, class X, class Y, class C>

Dune::ParSSOR< M, X, Y, C >::ParSSOR | ( | const matrix_type & | A,
|  | int | n,
|  | field_type | w,
|  | const communication_type & | c )

inline

Constructor.

constructor gets all parameters to operate the prec.

Parameters

  A | The matrix to operate on.
  n | The number of iterations to perform.
  w | The relaxation factor.
  c | The communication object for syncing overlap and copy data points. (E.~g. OwnerOverlapCopyCommunication )

## Member Function Documentation

## apply()

template<class M, class X, class Y, class C>

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

## category()

template<class M, class X, class Y, class C>

SolverCategory::Category Dune::ParSSOR< M, X, Y, C >::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, class C>

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

## pre()

template<class M, class X, class Y, class C>

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

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

- schwarz.hh