Loading...
Searching...
No Matches
Dune::Amg::KAmgTwoGrid< AMG > Class Template Referenceabstract
Iterative Solvers Template Library (ISTL) » Iterative Solvers » Preconditioners » Parallel Algebraic Multigrid

Two grid operator for AMG with Krylov cycle. More...

`#include <dune/istl/paamg/kamg.hh>`

Inheritance diagram for Dune::Amg::KAmgTwoGrid< AMG >:

## Public Types

typedef AMG::Domain | domain_type
| The domain type of the preconditioner.
typedef AMG::Range | range_type
| The range type of the preconditioner.
typedef AMG::Domain::field_type | field_type
| The field type of the preconditioner.

## Public Member Functions

virtual SolverCategory::Category | category () const
| Category of the preconditioner (see SolverCategory::Category).
| KAmgTwoGrid (AMG &amg, std::shared_ptr< InverseOperator< Domain, Range > > coarseSolver)
| Constructor.
void | pre (typename AMG::Domain &x, typename AMG::Range &b)
| Prepare the preconditioner.
void | post (typename AMG::Domain &x)
| Clean up.
void | apply (typename AMG::Domain &v, const typename AMG::Range &d)
| Apply one step of the preconditioner to the system A(v)=d.
InverseOperator< Domain, Range > * | coarseSolver ()
| Get a pointer to the coarse grid solver.
void | setLevelContext (std::shared_ptr< typename AMG::LevelContext > p)
| Set the level context pointer.
| ~KAmgTwoGrid ()
| Destructor.
virtual void | pre (AMG::Domain &x, AMG::Range &b)=0
| Prepare the preconditioner.
virtual void | apply (AMG::Domain &v, const AMG::Range &d)=0
| Apply one step of the preconditioner to the system A(v)=d.
virtual void | post (AMG::Domain &x)=0
| Clean up.

## Detailed Description

template<class AMG>
class Dune::Amg::KAmgTwoGrid< AMG >

Two grid operator for AMG with Krylov cycle.

Template Parameters

  AMG | The type of the underlying agglomeration AMG.

## Member Typedef Documentation

## domain_type

typedef AMG::Domain Dune::Preconditioner< AMG::Domain, AMG::Range >::domain_type

inherited

The domain type of the preconditioner.

## field_type

typedef AMG::Domain::field_type Dune::Preconditioner< AMG::Domain, AMG::Range >::field_type

inherited

The field type of the preconditioner.

## range_type

typedef AMG::Range Dune::Preconditioner< AMG::Domain, AMG::Range >::range_type

inherited

The range type of the preconditioner.

## Constructor & Destructor Documentation

## KAmgTwoGrid()

template<class AMG>

Dune::Amg::KAmgTwoGrid< AMG >::KAmgTwoGrid | ( | AMG & | amg,
|  | std::shared_ptr< InverseOperator< Domain, Range > > | coarseSolver )

inline

Constructor.

Parameters

  amg | The underlying amg. It is used as the storage for the hierarchic data structures.
  coarseSolver | The solver used for the coarse grid correction.

## ~KAmgTwoGrid()

template<class AMG>

Dune::Amg::KAmgTwoGrid< AMG >::~KAmgTwoGrid | ( |  | ) |

inline

Destructor.

## Member Function Documentation

## apply() [1/2]

template<class AMG>

void Dune::Amg::KAmgTwoGrid< AMG >::apply | ( | typename AMG::Domain & | v,
|  | const typename AMG::Range & | d )

inline

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.

## apply() [2/2]

virtual void Dune::Preconditioner< AMG::Domain, AMG::Range >::apply | ( | AMG::Domain & | v,
|  | const AMG::Range & | d )

pure virtual inherited

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.

## category()

template<class AMG>

virtual SolverCategory::Category Dune::Amg::KAmgTwoGrid< AMG >::category | ( |  | ) | const

inline virtual

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

Implements Dune::Preconditioner< AMG::Domain, AMG::Range >.

## coarseSolver()

template<class AMG>

InverseOperator< Domain, Range > * Dune::Amg::KAmgTwoGrid< AMG >::coarseSolver | ( |  | ) |

inline

Get a pointer to the coarse grid solver.

Returns
  The coarse grid solver.

## post() [1/2]

template<class AMG>

void Dune::Amg::KAmgTwoGrid< AMG >::post | ( | typename AMG::Domain & | x | ) |

inline

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.

## post() [2/2]

virtual void Dune::Preconditioner< AMG::Domain, AMG::Range >::post | ( | AMG::Domain & | x | ) |

pure virtual inherited

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.

## pre() [1/2]

template<class AMG>

void Dune::Amg::KAmgTwoGrid< AMG >::pre | ( | typename AMG::Domain & | x,
|  | typename AMG::Range & | b )

inline

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.

## pre() [2/2]

virtual void Dune::Preconditioner< AMG::Domain, AMG::Range >::pre | ( | AMG::Domain & | x,
|  | AMG::Range & | b )

pure virtual inherited

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

Parameters

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

## setLevelContext()

template<class AMG>

void Dune::Amg::KAmgTwoGrid< AMG >::setLevelContext | ( | std::shared_ptr< typename AMG::LevelContext > | p | ) |

inline

Set the level context pointer.

Parameters

  p | The pointer to set it to.

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

- amg.hh
- kamg.hh