Diffpack Documentation

(Functionality not available, requires installation of an additional Diffpack Toolbox)


Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

AddMultigrid Class Reference

abstract additive multigrid algorithm. More...

#include <Multigrid.h>

Inheritance diagram for AddMultigrid::

Multigrid MLSolver HandleId List of all members.

Public Methods

 AddMultigrid (const MLSolver_prm &pm)
 ~AddMultigrid ()
virtual String description () const
virtual int getWork (const PrecondWork work_tp) const
virtual bool solve (StartVectorMode start)

Detailed Description

abstract additive multigrid algorithm.

NAME: AddMultigrid - abstract additive multigrid algorithm

DESCRIPTION:

Implements the additive version of a multigrid cycle. One version of it sometimes is called the "BPX" preconditioner. The different sub-domains here are the different grids. The grids themselves can be Lattice Grids, structured or unstructured grids, or adaptively refined grids. The algorithm usually is used as a preconditioner. With a proper scaling it could be used as a iterative solver, but there is no scaling available now

The coarse grid is number 1, the fine grid is number "getNoOfSpaces". The grids all cover the same geometric domain, but differ in the resolution or grid size. For standard applications the grids are nested and the grid sizes double form fine to coarse. However, in general the grids need not be nested.

The "Proj" operators will usually be used to implement the grid transfers for "transfer" of "MLSolverUDC". Only the transfers from i to i+1 (prolongation) and the adjoint transfers from i+1 to i (restriction) are used. Both operations should really be adjoint if using it as a symmetric preconditioner. The transfers can be implemented very efficiently for nested grids which grid sizes double. For non nested grids this transfers are more expensive.

The approximate solvers for the different grids usually are called smoothers. The solver for the coarsest grid number 1 can be exact, e.g. a direct solver, but does not have to be exact. It is not useful to use additional exact solvers for linear problems. Hence the other solvers are iterative solvers. Usually it is sufficient to use a small fixed number of iterations. Note that the optimal relaxation for over-relaxation iterations differs from the optimal value used for single-grid (standard) applications. There is only one kind of smoother for every grid. In the case of adaptively refined grids, the iteration can be restricted to the refined parts of the grid. The original version of the "BPX" algorithm uses a direct coarse solver and one Jacobi iteration for each of the finer grids. This is at least equivalent version for the constant coefficient case.

There is no "gamma" parameter. The algorithm is always a V-cycle.

In the case you want to have a symmetric multigrid, take care that the transfers i to i+1 and i+1 to i are adjoint and that the smoothing is symmetric, too. Standard choices are "Jacobi" and "SSOR". This is useful for self-adjoint differential operators and symmetric solvers like "ConjGrad".

For further reading see e.g. Bramble, Pasciak, Xu "Parallel Multilevel Preconditioners", Math. Comp. 55, 1990, 1-22.


Constructor & Destructor Documentation

AddMultigrid::AddMultigrid ( const MLSolver_prm & pm )
 

See class "MLSolver".

AddMultigrid::~AddMultigrid ( ) [inline]
 


Member Function Documentation

String AddMultigrid::description ( ) const [virtual]
 

Reimplemented from Multigrid.

int AddMultigrid::getWork ( const PrecondWork work_tp ) const [virtual]
 

estimate work. Estimates are compatible with estimates for linear solvers.

Reimplemented from Multigrid.

bool AddMultigrid::solve ( StartVectorMode start ) [virtual]
 

solves the system. The function implements the algorithm and will probably never be called by the user directly. Data vectors have to be attached during initialization. The actual algorithm determines exactly, which vectors are needed and checks, whether they have been attached. The start vector is given by a value "StartVectorMode".

Reimplemented from Multigrid.


The documentation for this class was generated from the following file:
Copyright © 2003 inuTech GmbH. All rights reserved.