DUNE-FEM (unstable)

an algebraic multigrid method using a Krylov-cycle. More...

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

Public Types

typedef AMG< M, X, S, PI, A > Amg
 The type of the underlying AMG.
 
typedef K KrylovSolver
 The type of the Krylov solver for the cycle.
 
typedef Amg::OperatorHierarchy OperatorHierarchy
 The type of the hierarchy of operators.
 
typedef Amg::CoarseSolver CoarseSolver
 The type of the coarse solver.
 
typedef Amg::ParallelInformation ParallelInformation
 the type of the parallelinformation to use.
 
typedef Amg::SmootherArgs SmootherArgs
 The type of the arguments for construction of the smoothers.
 
typedef Amg::Operator Operator
 the type of the lineatr operator.
 
typedef Amg::Domain Domain
 the type of the domain.
 
typedef Amg::Range Range
 The type of the range.
 
typedef Amg::ParallelInformationHierarchy ParallelInformationHierarchy
 The type of the hierarchy of parallel information.
 
typedef Amg::ScalarProduct ScalarProduct
 The type of the scalar product.
 
typedef X domain_type
 The domain type of the preconditioner.
 
typedef X range_type
 The range type of the preconditioner.
 
typedef X::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)
 
 KAMG (OperatorHierarchy &matrices, CoarseSolver &coarseSolver, const SmootherArgs &smootherArgs, const Parameters &parms, std::size_t maxLevelKrylovSteps=3, double minDefectReduction=1e-1)
 Construct a new amg with a specific coarse solver. More...
 
template<class C >
 KAMG (const Operator &fineOperator, const C &criterion, const SmootherArgs &smootherArgs=SmootherArgs(), std::size_t maxLevelKrylovSteps=3, double minDefectReduction=1e-1, const ParallelInformation &pinfo=ParallelInformation())
 Construct an AMG with an inexact coarse solver based on the smoother. More...
 
void pre (Domain &x, Range &b)
 Prepare the preconditioner. More...
 
void post (Domain &x)
 Clean up. More...
 
void apply (Domain &v, const Range &d)
 Apply one step of the preconditioner to the system A(v)=d. More...
 
virtual void pre (X &x, X &b)=0
 Prepare the preconditioner. More...
 
virtual void apply (X &v, const X &d)=0
 Apply one step of the preconditioner to the system A(v)=d. More...
 

Detailed Description

template<class M, class X, class S, class PI = SequentialInformation, class K = GeneralizedPCGSolver<X>, class A = std::allocator<X>>
class Dune::Amg::KAMG< M, X, S, PI, K, A >

an algebraic multigrid method using a Krylov-cycle.

The implementation is based on the paper [Notay and Vassilevski, 2007]

Template Parameters
MThe type of the linear operator.
XThe type of the range and domain.
PIThe parallel information object. Use SequentialInformation (default) for a sequential AMG, OwnerOverlapCopyCommunication for the parallel case.
KThe type of the Krylov method to use for the cycle.
AThe type of the allocator to use.

Member Function Documentation

◆ apply()

virtual void Dune::Preconditioner< X, X >::apply ( X &  v,
const X &  d 
)
pure virtualinherited

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 \( v = M^{-1} d \) where \( M \) is the approximate inverse of the operator \( A \) characterizing the preconditioner.

Parameters
[out]vThe update to be computed
dThe current defect.

Implemented in Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >, Dune::SeqOverlappingSchwarz< M, X, TM, TS, TA >, Dune::SeqOverlappingSchwarz< M, X, TM, TD, TA >, and Dune::SeqOverlappingSchwarz< M, X, TM, TS, TA >.

◆ pre()

virtual void Dune::Preconditioner< X, X >::pre ( X &  x,
Y &  b 
)
pure virtualinherited

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
xThe left hand side of the equation.
bThe right hand side of the equation.

The documentation for this class was generated from the following files:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 1, 22:29, 2024)