Loading...
Searching...
No Matches
Dune::RestartedGMResSolver< X, Y, F > Class Template Referenceabstract
Iterative Solvers Template Library (ISTL) » Iterative Solvers

implements the Generalized Minimal Residual (GMRes) method More...

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

Inheritance diagram for Dune::RestartedGMResSolver< X, Y, F >:

## Public Types

typedef X | domain_type
| Type of the domain of the operator to be inverted.
typedef X | domain_type
| Type of the domain of the operator to be inverted.
typedef X | range_type
| Type of the range of the operator to be inverted.
typedef X | range_type
| Type of the range of the operator to be inverted.
typedef X::field_type | field_type
| The field type of the operator.
typedef X::field_type | field_type
| The field type of the operator.
typedef FieldTraits< field_type >::real_type | real_type
| The real type of the field type (is the same if using real numbers, but differs for std::complex).
typedef FieldTraits< field_type >::real_type | real_type
| The real type of the field type (is the same if using real numbers, but differs for std::complex).
typedef Simd::Scalar< real_type > | scalar_real_type
| scalar type underlying the field_type
typedef Simd::Scalar< real_type > | scalar_real_type
| scalar type underlying the field_type

## Public Member Functions

| RestartedGMResSolver (const LinearOperator< X, Y > &op, Preconditioner< X, Y > &prec, scalar_real_type reduction, int restart, int maxit, int verbose)
| Set up RestartedGMResSolver solver.
| RestartedGMResSolver (const LinearOperator< X, Y > &op, const ScalarProduct< X > &sp, Preconditioner< X, Y > &prec, scalar_real_type reduction, int restart, int maxit, int verbose)
| Set up RestartedGMResSolver solver.
| RestartedGMResSolver (std::shared_ptr< const LinearOperator< X, Y > > op, std::shared_ptr< Preconditioner< X, X > > prec, const ParameterTree &configuration)
| Constructor.
| RestartedGMResSolver (std::shared_ptr< const LinearOperator< X, Y > > op, std::shared_ptr< const ScalarProduct< X > > sp, std::shared_ptr< Preconditioner< X, X > > prec, const ParameterTree &configuration)
| RestartedGMResSolver (std::shared_ptr< const LinearOperator< X, Y > > op, std::shared_ptr< const ScalarProduct< X > > sp, std::shared_ptr< Preconditioner< X, Y > > prec, scalar_real_type reduction, int restart, int maxit, int verbose)
| Set up RestartedGMResSolver solver.
void | apply (X &x, Y &b, InverseOperatorResult &res) override
| Apply inverse operator.
void | apply (X &x, Y &b, double reduction, InverseOperatorResult &res) override
| Apply inverse operator.
void | apply (X &x, X &b, double reduction, InverseOperatorResult &res) override
| Apply inverse operator with given reduction factor.
virtual void | apply (X &x, X &b, InverseOperatorResult &res)=0
| Apply inverse operator,.
virtual void | apply (X &x, X &b, InverseOperatorResult &res)=0
| Apply inverse operator,.
SolverCategory::Category | category () const override
| Category of the solver (see SolverCategory::Category).
std::string | name () const

## Protected Types

using | fAlloc = ReboundAllocatorType<X,field_type>
| field_type Allocator retrieved from domain type
using | rAlloc = ReboundAllocatorType<X,real_type>
| real_type Allocator retrieved from domain type
using | Iteration = typename IterativeSolver<X,X>::template Iteration<unsigned int>
enum |
enum |

## Protected Member Functions

void | update (X &w, int i, const std::vector< std::vector< field_type, fAlloc > > &H, const std::vector< field_type, fAlloc > &s, const std::vector< X > &v)
template<typename T>
std::enable_if< std::is_same< field_type, real_type >::value, T >::type | conjugate (const T &t)
template<typename T>
std::enable_if<!std::is_same< field_type, real_type >::value, T >::type | conjugate (const T &t)
void | generatePlaneRotation (field_type &dx, field_type &dy, real_type &cs, field_type &sn)
void | applyPlaneRotation (field_type &dx, field_type &dy, real_type &cs, field_type &sn)
void | printHeader (std::ostream &s) const
| helper function for printing header of solver output
void | printHeader (std::ostream &s) const
| helper function for printing header of solver output
void | printOutput (std::ostream &s, const CountType &iter, const DataType &norm, const DataType &norm_old) const
| helper function for printing solver output
void | printOutput (std::ostream &s, const CountType &iter, const DataType &norm) const
| helper function for printing solver output
void | printOutput (std::ostream &s, const CountType &iter, const DataType &norm, const DataType &norm_old) const
| helper function for printing solver output
void | printOutput (std::ostream &s, const CountType &iter, const DataType &norm) const
| helper function for printing solver output

## Protected Attributes

int | _restart
std::shared_ptr< const LinearOperator< X, X > > | _op
std::shared_ptr< Preconditioner< X, X > > | _prec
std::shared_ptr< const ScalarProduct< X > > | _sp
scalar_real_type | _reduction
int | _maxit
int | _verbose
SolverCategory::Category | _category

## Detailed Description

template<class X, class Y = X, class F = Y>
class Dune::RestartedGMResSolver< X, Y, F >

implements the Generalized Minimal Residual (GMRes) method

GMRes solves the unsymmetric linear system Ax = b using the Generalized Minimal Residual method as described the SIAM Templates book (http://www.netlib.org/templates/templates.pdf).

Template Parameters

  X | trial vector, vector type of the solution
  Y | test vector, vector type of the RHS
  F | vector type for orthonormal basis of Krylov space

## Member Typedef Documentation

## domain_type [1/2]

typedef X Dune::InverseOperator< X, X >::domain_type

inherited

Type of the domain of the operator to be inverted.

## domain_type [2/2]

typedef X Dune::InverseOperator< X, X >::domain_type

inherited

Type of the domain of the operator to be inverted.

## fAlloc

template<class X, class Y = X, class F = Y>

using Dune::RestartedGMResSolver< X, Y, F >::fAlloc = ReboundAllocatorType<X,field_type>

protected

field_type Allocator retrieved from domain type

## field_type [1/2]

typedef X::field_type Dune::InverseOperator< X, X >::field_type

inherited

The field type of the operator.

## field_type [2/2]

typedef X::field_type Dune::InverseOperator< X, X >::field_type

inherited

The field type of the operator.

## Iteration

template<class X, class Y = X, class F = Y>

using Dune::RestartedGMResSolver< X, Y, F >::Iteration = typename IterativeSolver<X,X>::template Iteration<unsigned int>

protected

## rAlloc

template<class X, class Y = X, class F = Y>

using Dune::RestartedGMResSolver< X, Y, F >::rAlloc = ReboundAllocatorType<X,real_type>

protected

real_type Allocator retrieved from domain type

## range_type [1/2]

typedef X Dune::InverseOperator< X, X >::range_type

inherited

Type of the range of the operator to be inverted.

## range_type [2/2]

typedef X Dune::InverseOperator< X, X >::range_type

inherited

Type of the range of the operator to be inverted.

## real_type [1/2]

typedef FieldTraits<field_type>::real_type Dune::InverseOperator< X, X >::real_type

inherited

The real type of the field type (is the same if using real numbers, but differs for std::complex).

## real_type [2/2]

typedef FieldTraits<field_type>::real_type Dune::InverseOperator< X, X >::real_type

inherited

The real type of the field type (is the same if using real numbers, but differs for std::complex).

## scalar_real_type [1/2]

typedef Simd::Scalar<real_type> Dune::InverseOperator< X, X >::scalar_real_type

inherited

scalar type underlying the field_type

## scalar_real_type [2/2]

typedef Simd::Scalar<real_type> Dune::InverseOperator< X, X >::scalar_real_type

inherited

scalar type underlying the field_type

## Member Enumeration Documentation

## anonymous enum [1/2]

anonymous enum

protected inherited

## anonymous enum [2/2]

anonymous enum

protected inherited

## Constructor & Destructor Documentation

## RestartedGMResSolver() [1/5]

template<class X, class Y = X, class F = Y>

Dune::RestartedGMResSolver< X, Y, F >::RestartedGMResSolver | ( | const LinearOperator< X, Y > & | op,
|  | Preconditioner< X, Y > & | prec,
|  | scalar_real_type | reduction,
|  | int | restart,
|  | int | maxit,
|  | int | verbose )

inline

Set up RestartedGMResSolver solver.

General constructor to initialize an iterative solver.

Parameters

  op | The operator we solve.
  prec | The preconditioner to apply in each iteration of the loop. Has to inherit from Preconditioner.
  reduction | The relative defect reduction to achieve when applying the operator.
  maxit | The maximum number of iteration steps allowed when applying the operator.
  verbose | The verbosity level.

Verbose levels are:

- 0 : print nothing
- 1 : print initial and final defect and statistics
- 2 : print line for each iteration

Parameters

  restart | number of GMRes cycles before restart

## RestartedGMResSolver() [2/5]

template<class X, class Y = X, class F = Y>

Dune::RestartedGMResSolver< X, Y, F >::RestartedGMResSolver | ( | const LinearOperator< X, Y > & | op,
|  | const ScalarProduct< X > & | sp,
|  | Preconditioner< X, Y > & | prec,
|  | scalar_real_type | reduction,
|  | int | restart,
|  | int | maxit,
|  | int | verbose )

inline

Set up RestartedGMResSolver solver.

General constructor to initialize an iterative solver.

Parameters

  op | The operator we solve.
  sp | The scalar product to use, e. g. SeqScalarproduct.
  prec | The preconditioner to apply in each iteration of the loop. Has to inherit from Preconditioner.
  reduction | The relative defect reduction to achieve when applying the operator.
  maxit | The maximum number of iteration steps allowed when applying the operator.
  verbose | The verbosity level.

Verbose levels are:

- 0 : print nothing
- 1 : print initial and final defect and statistics
- 2 : print line for each iteration

Parameters

  restart | number of GMRes cycles before restart

## RestartedGMResSolver() [3/5]

template<class X, class Y = X, class F = Y>

Dune::RestartedGMResSolver< X, Y, F >::RestartedGMResSolver | ( | std::shared_ptr< const LinearOperator< X, Y > > | op,
|  | std::shared_ptr< Preconditioner< X, X > > | prec,
|  | const ParameterTree & | configuration )

inline

Constructor.

Constructor.

Parameters

  op | The operator we solve
  prec | The preconditioner to apply in each iteration of the loop.
  configuration | ParameterTree containing iterative solver parameters.

ParameterTree Key | Meaning
--- | ---
reduction | The relative defect reduction to achieve when applying the operator
maxit | The maximum number of iteration steps allowed when applying the operator
verbose | The verbosity level

See ISTL_Factory for the ParameterTree layout and examples.

Additional parameter:

ParameterTree Key | Meaning
--- | ---
restart | number of GMRes cycles before restart

See ISTL_Factory for the ParameterTree layout and examples.

## RestartedGMResSolver() [4/5]

template<class X, class Y = X, class F = Y>

Dune::RestartedGMResSolver< X, Y, F >::RestartedGMResSolver | ( | std::shared_ptr< const LinearOperator< X, Y > > | op,
|  | std::shared_ptr< const ScalarProduct< X > > | sp,
|  | std::shared_ptr< Preconditioner< X, X > > | prec,
|  | const ParameterTree & | configuration )

inline

## RestartedGMResSolver() [5/5]

template<class X, class Y = X, class F = Y>

Dune::RestartedGMResSolver< X, Y, F >::RestartedGMResSolver | ( | std::shared_ptr< const LinearOperator< X, Y > > | op,
|  | std::shared_ptr< const ScalarProduct< X > > | sp,
|  | std::shared_ptr< Preconditioner< X, Y > > | prec,
|  | scalar_real_type | reduction,
|  | int | restart,
|  | int | maxit,
|  | int | verbose )

inline

Set up RestartedGMResSolver solver.

Parameters

  op | The operator we solve.
  sp | The scalar product to use, e. g. SeqScalarproduct.
  prec | The preconditioner to apply in each iteration of the loop. Has to inherit from Preconditioner.
  reduction | The relative defect reduction to achieve when applying the operator.
  maxit | The maximum number of iteration steps allowed when applying the operator.
  verbose | The verbosity level.

Verbose levels are:

- 0 : print nothing
- 1 : print initial and final defect and statistics
- 2 : print line for each iteration

Parameters

  restart | number of GMRes cycles before restart

## Member Function Documentation

## apply() [1/5]

virtual void Dune::InverseOperator< X, X >::apply | ( | X & | x,
|  | X & | b,
|  | InverseOperatorResult & | res )

pure virtual inherited

Apply inverse operator,.

Warning
  Note: right hand side b may be overwritten!

Parameters

  x | The left hand side to store the result in.
  b | The right hand side
  res | Object to store the statistics about applying the operator.

Exceptions

  SolverAbort | When the solver detects a problem and cannot continue

Implemented in Dune::BiCGSTABSolver< X >, Dune::CGSolver< X >, Dune::CompleteFCGSolver< X >, Dune::GeneralizedPCGSolver< X >, Dune::GradientSolver< X >, Dune::LoopSolver< X >, Dune::MINRESSolver< X >, Dune::RestartedFCGSolver< X >, and Dune::RestartedGMResSolver< X, X >.

## apply() [2/5]

void Dune::IterativeSolver< X, X >::apply | ( | X & | x,
|  | X & | b,
|  | double | reduction,
|  | InverseOperatorResult & | res )

inline override virtual inherited

Apply inverse operator with given reduction factor.

apply inverse operator, with given convergence criteria.

Warning
  Right hand side b may be overwritten!

Parameters

  x | The left hand side to store the result in.
  b | The right hand side
  reduction | The minimum defect reduction to achieve.
  res | Object to store the statistics about applying the operator.

Exceptions

  SolverAbort | When the solver detects a problem and cannot continue

Implements Dune::InverseOperator< X, X >.

## apply() [3/5]

virtual void Dune::InverseOperator< X, X >::apply | ( | X & | x,
|  | X & | b,
|  | InverseOperatorResult & | res )

pure virtual inherited

Apply inverse operator,.

Warning
  Note: right hand side b may be overwritten!

Parameters

  x | The left hand side to store the result in.
  b | The right hand side
  res | Object to store the statistics about applying the operator.

Exceptions

  SolverAbort | When the solver detects a problem and cannot continue

## apply() [4/5]

template<class X, class Y = X, class F = Y>

void Dune::RestartedGMResSolver< X, Y, F >::apply | ( | X & | x,
|  | Y & | b,
|  | double | reduction,
|  | InverseOperatorResult & | res )

inline override

Apply inverse operator.

apply inverse operator, with given convergence criteria.

Warning
  Right hand side b may be overwritten!

Parameters

  x | The left hand side to store the result in.
  b | The right hand side
  reduction | The minimum defect reduction to achieve.
  res | Object to store the statistics about applying the operator.

Exceptions

  SolverAbort | When the solver detects a problem and cannot continue

Note
  Currently, the RestartedGMResSolver aborts when it detects a breakdown.

## apply() [5/5]

template<class X, class Y = X, class F = Y>

void Dune::RestartedGMResSolver< X, Y, F >::apply | ( | X & | x,
|  | Y & | b,
|  | InverseOperatorResult & | res )

inline override

Apply inverse operator.

Apply inverse operator,.

Warning
  Note: right hand side b may be overwritten!

Parameters

  x | The left hand side to store the result in.
  b | The right hand side
  res | Object to store the statistics about applying the operator.

Exceptions

  SolverAbort | When the solver detects a problem and cannot continue

Note
  Currently, the RestartedGMResSolver aborts when it detects a breakdown.

## applyPlaneRotation()

template<class X, class Y = X, class F = Y>

void Dune::RestartedGMResSolver< X, Y, F >::applyPlaneRotation | ( | field_type & | dx,
|  | field_type & | dy,
|  | real_type & | cs,
|  | field_type & | sn )

inline protected

## category()

SolverCategory::Category Dune::IterativeSolver< X, X >::category | ( |  | ) | const

inline override virtual inherited

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

Implements Dune::InverseOperator< X, X >.

## conjugate() [1/2]

template<class X, class Y = X, class F = Y>
template<typename T>

std::enable_if<!std::is_same< field_type, real_type >::value, T >::type Dune::RestartedGMResSolver< X, Y, F >::conjugate | ( | const T & | t | ) |

inline protected

## conjugate() [2/2]

template<class X, class Y = X, class F = Y>
template<typename T>

std::enable_if< std::is_same< field_type, real_type >::value, T >::type Dune::RestartedGMResSolver< X, Y, F >::conjugate | ( | const T & | t | ) |

inline protected

## generatePlaneRotation()

template<class X, class Y = X, class F = Y>

void Dune::RestartedGMResSolver< X, Y, F >::generatePlaneRotation | ( | field_type & | dx,
|  | field_type & | dy,
|  | real_type & | cs,
|  | field_type & | sn )

inline protected

## name()

std::string Dune::IterativeSolver< X, X >::name | ( |  | ) | const

inline inherited

## printHeader() [1/2]

void Dune::InverseOperator< X, X >::printHeader | ( | std::ostream & | s | ) | const

inline protected inherited

helper function for printing header of solver output

## printHeader() [2/2]

void Dune::InverseOperator< X, X >::printHeader | ( | std::ostream & | s | ) | const

inline protected inherited

helper function for printing header of solver output

## printOutput() [1/4]

void Dune::InverseOperator< X, X >::printOutput | ( | std::ostream & | s,
|  | const CountType & | iter,
|  | const DataType & | norm ) const

inline protected inherited

helper function for printing solver output

## printOutput() [2/4]

void Dune::InverseOperator< X, X >::printOutput | ( | std::ostream & | s,
|  | const CountType & | iter,
|  | const DataType & | norm,
|  | const DataType & | norm_old ) const

inline protected inherited

helper function for printing solver output

## printOutput() [3/4]

void Dune::InverseOperator< X, X >::printOutput | ( | std::ostream & | s,
|  | const CountType & | iter,
|  | const DataType & | norm ) const

inline protected inherited

helper function for printing solver output

## printOutput() [4/4]

void Dune::InverseOperator< X, X >::printOutput | ( | std::ostream & | s,
|  | const CountType & | iter,
|  | const DataType & | norm,
|  | const DataType & | norm_old ) const

inline protected inherited

helper function for printing solver output

## update()

template<class X, class Y = X, class F = Y>

void Dune::RestartedGMResSolver< X, Y, F >::update | ( | X & | w,
|  | int | i,
|  | const std::vector< std::vector< field_type, fAlloc > > & | H,
|  | const std::vector< field_type, fAlloc > & | s,
|  | const std::vector< X > & | v )

inline protected

## Member Data Documentation

## _category

SolverCategory::Category Dune::IterativeSolver< X, X >::_category

protected inherited

## _maxit

int Dune::IterativeSolver< X, X >::_maxit

protected inherited

## _op

std::shared_ptr<const LinearOperator<X,X> > Dune::IterativeSolver< X, X >::_op

protected inherited

## _prec

std::shared_ptr<Preconditioner<X,X> > Dune::IterativeSolver< X, X >::_prec

protected inherited

## _reduction

scalar_real_type Dune::IterativeSolver< X, X >::_reduction

protected inherited

## _restart

template<class X, class Y = X, class F = Y>

int Dune::RestartedGMResSolver< X, Y, F >::_restart

protected

## _sp

std::shared_ptr<const ScalarProduct<X> > Dune::IterativeSolver< X, X >::_sp

protected inherited

## _verbose

int Dune::IterativeSolver< X, X >::_verbose

protected inherited

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

- solvers.hh