3#ifndef DUNE_AMG_KAMG_HH
4#define DUNE_AMG_KAMG_HH
70 *levelContext_->update=0;
71 *levelContext_->rhs =
d;
72 *levelContext_->lhs = v;
74 presmooth(*levelContext_, amg_.preSteps_);
76 amg_.moveToCoarseLevel(*levelContext_);
82 coarseSolver_->apply(x, b,
res);
83 *levelContext_->update=x;
89 v=*levelContext_->update;
118 std::shared_ptr<InverseOperator<Domain,Range> > coarseSolver_;
120 std::shared_ptr<typename AMG::LevelContext> levelContext_;
138 template<
class M,
class X,
class S,
class PI=SequentialInformation,
263 std::
size_t maxLevelKrylovSteps;
266 double levelDefectReduction;
280 std::
size_t ksteps,
double reduction)
285 template<
class M,
class X,
class S,
class P,
class K,
class A>
288 std::size_t
ksteps,
double reduction)
290 maxLevelKrylovSteps(
ksteps), levelDefectReduction(reduction)
293 template<
class M,
class X,
class S,
class P,
class K,
class A>
298 std::size_t
ksteps,
double reduction,
304 template<
class M,
class X,
class S,
class P,
class K,
class A>
308 std::size_t
ksteps,
double reduction,
311 maxLevelKrylovSteps(
ksteps), levelDefectReduction(reduction)
315 template<
class M,
class X,
class S,
class P,
class K,
class A>
319 scalarproducts.reserve(amg.levels());
320 ksolvers.reserve(amg.levels());
322 typename OperatorHierarchy::ParallelMatrixHierarchy::Iterator
323 matrix = amg.matrices_->matrices().coarsest();
325 pinfo = amg.matrices_->parallelInformation().coarsest();
326 bool hasCoarsest=(amg.levels()==amg.maxlevels());
329 if(matrix==amg.matrices_->matrices().finest())
337 std::ostringstream
s;
339 if(matrix!=amg.matrices_->matrices().finest())
341 scalarproducts.push_back(std::shared_ptr<typename Amg::ScalarProduct>(Amg::ScalarProductChooser::construct(*pinfo)));
342 std::shared_ptr<InverseOperator<Domain,Range> >
ks =
343 std::shared_ptr<InverseOperator<Domain,Range> >(
new KrylovSolver(*matrix, *(scalarproducts.back()),
344 *(ksolvers.back()), levelDefectReduction,
345 maxLevelKrylovSteps, 0));
349 if(matrix==amg.matrices_->matrices().finest())
355 template<
class M,
class X,
class S,
class P,
class K,
class A>
362 template<
class M,
class X,
class S,
class P,
class K,
class A>
365 if(ksolvers.size()==0)
369 amg.solver_->apply(v,
td,
res);
372 typedef typename Amg::LevelContext LevelContext;
373 std::shared_ptr<LevelContext>
levelContext(
new LevelContext);
375 typedef typename std::vector<std::shared_ptr<KAmgTwoGrid<Amg> > >::iterator Iter;
378 ksolvers.back()->apply(v,
d);
382 template<
class M,
class X,
class S,
class P,
class K,
class A>
385 return amg.maxlevels();
Define general preconditioner interface.
void apply(Domain &v, const Range &d)
Apply one step of the preconditioner to the system A(v)=d.
Definition kamg.hh:363
X Domain
The domain type.
Definition amg.hh:78
std::size_t maxlevels()
Definition kamg.hh:383
SmootherTraits< Smoother >::Arguments SmootherArgs
The argument type for the construction of the smoother.
Definition amg.hh:91
M Operator
The matrix operator type.
Definition amg.hh:64
void post(Domain &x)
Clean up.
Definition kamg.hh:356
X Range
The range type.
Definition amg.hh:80
void presmooth(LevelContext &levelContext, size_t steps)
Apply pre smoothing on the current level.
Definition smoother.hh:408
void postsmooth(LevelContext &levelContext, size_t steps)
Apply post smoothing on the current level.
Definition smoother.hh:430
KAMG(const OperatorHierarchy &matrices, CoarseSolver &coarseSolver, const SmootherArgs &smootherArgs, std::size_t gamma, std::size_t preSmoothingSteps=1, std::size_t postSmoothingSteps=1, std::size_t maxLevelKrylovSteps=3, double minDefectReduction=1e-1)
Construct a new amg with a specific coarse solver.
Definition kamg.hh:276
void pre(Domain &x, Range &b)
Prepare the preconditioner.
Definition kamg.hh:316
PI ParallelInformation
The type of the parallel information. Either OwnerOverlapCommunication or another type describing the...
Definition amg.hh:71
@ category
The solver category.
Definition amg.hh:95
Definition basearray.hh:19
Statistics about compression achieved in implicit mode.
Definition bcrsmatrix.hh:81
an algebraic multigrid method using a Krylov-cycle.
Definition kamg.hh:141
Amg::Domain Domain
the type of the domain.
Definition kamg.hh:158
Amg::SmootherArgs SmootherArgs
The type of the arguments for construction of the smoothers.
Definition kamg.hh:154
Amg::ParallelInformation ParallelInformation
the type of the parallelinformation to use.
Definition kamg.hh:152
Amg::CoarseSolver CoarseSolver
The type of the coarse solver.
Definition kamg.hh:150
Amg::OperatorHierarchy OperatorHierarchy
The type of the hierarchy of operators.
Definition kamg.hh:148
Amg::Range Range
The type of the range.
Definition kamg.hh:160
Amg::ScalarProduct ScalarProduct
The type of the scalar product.
Definition kamg.hh:164
AMG< M, X, S, PI, A > Amg
The type of the underlying AMG.
Definition kamg.hh:144
Amg::Operator Operator
the type of the lineatr operator.
Definition kamg.hh:156
Amg::ParallelInformationHierarchy ParallelInformationHierarchy
The type of the hierarchy of parallel information.
Definition kamg.hh:162
@ category
The solver category.
Definition kamg.hh:168
K KrylovSolver
The type of the Krylov solver for the cycle.
Definition kamg.hh:146
Two grid operator for AMG with Krylov cycle.
Definition kamg.hh:31
void pre(typename AMG::Domain &x, typename AMG::Range &b)
Prepare the preconditioner.
Definition kamg.hh:55
KAmgTwoGrid(AMG &amg, std::shared_ptr< InverseOperator< Domain, Range > > coarseSolver)
Constructor.
Definition kamg.hh:50
~KAmgTwoGrid()
Destructor.
Definition kamg.hh:111
@ category
The solver category.
Definition kamg.hh:40
void post(typename AMG::Domain &x)
Clean up.
Definition kamg.hh:61
void setLevelContext(std::shared_ptr< typename AMG::LevelContext > p)
Set the level context pointer.
Definition kamg.hh:105
InverseOperator< Domain, Range > * coarseSolver()
Get a pointer to the coarse grid solver.
Definition kamg.hh:96
void apply(typename AMG::Domain &v, const typename AMG::Range &d)
Apply one step of the preconditioner to the system A(v)=d.
Definition kamg.hh:67
Parallel algebraic multigrid based on agglomeration.
Definition amg.hh:56
The hierarchies build by the coarsening process.
Definition hierarchy.hh:317
All parameters for AMG.
Definition parameters.hh:391
Base class for matrix free definition of preconditioners.
Definition preconditioner.hh:26
Base class for scalar product and norm computation.
Definition scalarproducts.hh:44
Statistics about the application of an inverse operator.
Definition solver.hh:32