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  

MLSolverUDC Class Reference

user dep. code for specifying subspace-solvers and space transfer. More...

#include <MLSolverUDC.h>

Inheritance diagram for MLSolverUDC::

HandleId MGtools NonLinMGtools Schwarztools List of all members.

Public Methods

 MLSolverUDC ()
virtual ~MLSolverUDC ()
virtual SpaceId getNoOfSpaces () const=0
virtual void setStart (LinEqVector &x, SpaceId space, StartVectorMode start)
virtual bool solveSubSystem (LinEqVector &b, LinEqVector &x, SpaceId space, StartVectorMode start, MLSolverMode mode=SUBSPACE)=0
virtual void residual (LinEqVector &b, LinEqVector &x, LinEqVector &r, SpaceId space)
virtual void matVec (const LinEqVector &b, LinEqVector &x, SpaceId space)
virtual bool transfer (const LinEqVector &fv, SpaceId fi, LinEqVector &tv, SpaceId ti, bool add_to_t=false, MLTransferMode=TRANSFER)=0
virtual int getWorkTransfer (SpaceId fi, SpaceId ti, const PrecondWork work_tp) const=0
virtual real getStorageTransfer (SpaceId fi, SpaceId ti) const=0
virtual int getWorkSolve (SpaceId space, const PrecondWork work_tp) const=0
virtual real getStorageSolve (SpaceId space) const=0
virtual String comment ()
virtual bool ok (int level=1)

Detailed Description

user dep. code for specifying subspace-solvers and space transfer.

NAME: MLSolverUDC - user dep. code for specifying subspace-solvers and space transfer

DESCRIPTION:

The class serves as base class for a user derived subclass where the splitting of a space into Subspaces is defined.

This class also serves as a base class for several auxiliary set up procedures for special domain decomposition and multi-grid methods.


Constructor & Destructor Documentation

MLSolverUDC::MLSolverUDC ( )
 

MLSolverUDC::~MLSolverUDC ( ) [virtual]
 


Member Function Documentation

String MLSolverUDC::comment ( ) [virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

SpaceId MLSolverUDC::getNoOfSpaces ( ) const [pure virtual]
 

should return the number of different spaces and sub-spaces involved. For multigrid this is the number of grids. For domain decomposition methods this is the number of all sub-domains plus one for the global domain plus the number of coarse spaces involved (if there are some). The spaces are identified by numbers form 1 to "getNoOfSpaces". This Id is of type "SpaceId".

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

real MLSolverUDC::getStorageSolve ( SpaceId space ) const [pure virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

real MLSolverUDC::getStorageTransfer ( SpaceId fi,
SpaceId ti ) const [pure virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

int MLSolverUDC::getWorkSolve ( SpaceId space,
const PrecondWork work_tp ) const [pure virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

int MLSolverUDC::getWorkTransfer ( SpaceId fi,
SpaceId ti,
const PrecondWork work_tp ) const [pure virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

void MLSolverUDC::matVec ( const LinEqVector & f,
LinEqVector & x,
SpaceId space ) [virtual]
 

Reimplemented in NonLinMGtools.

bool MLSolverUDC::ok ( int level = 1 ) [virtual]
 

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

void MLSolverUDC::residual ( LinEqVector & b,
LinEqVector & x,
LinEqVector & r,
SpaceId space ) [virtual]
 

compute the residual. Can be implemented by "LinEqAdmFE" or "LinEqSystem". See also "solveSubSystem".

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

void MLSolverUDC::setStart ( LinEqVector & x,
SpaceId space,
StartVectorMode start ) [virtual]
 

set the vector according to the "StartVectorMode" flag. "USER_START" simply means a void operation. The state "ZERO_START" is also used often. In some "MLSolver" algorithms it is necessary to set a start vector independent of the solution of a equation system. Standard implementation is a "fill" command for the vector.

bool MLSolverUDC::solveSubSystem ( LinEqVector & b,
LinEqVector & x,
SpaceId space,
StartVectorMode start,
MLSolverMode mode = SUBSPACE ) [pure virtual]
 

(approximate) solution of the subspace problem, set up the linear or nonlinear system of equations and solve it. Can be implemented using "LinEqAdmFE", "LinEqSystem" or "NonLinEqSolver". The system may has been assembled previously or may be assembled now (less efficient). This function is called several times for each space with different right hand sides. Note: For domain decomposition methods also boundary conditions may change for each call.

Take care of the "StartVectorMode" flag in the case of iterative solvers. Direct solvers can also be used. Direct solvers are not appropriate for every space, but only for small sub-spaces. The "MLSolverMode" flag indicates, whether the solver is called in the forward loop or in the backward loop. In the multigrid context the names pre-smoothing and post-smoothing are common. Some "MLSolver" algorithms only use the default forward loop (e.g. the additive versions) and the flag can be ignored. If both loops are present and the total algorithm should be symmetric, the sub-domain solvers in the forward loop or in the backward loop have to be adjoint. If you want to implement different forward (pre) and backward (post) solvers, use the flag to branch.

The return value indicates, whether the solution was actually computed and the solution is valid. For a multigrid without pre-smoother for example, a call of the pre-smoother would just return "false" without touching the solution vector.

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.

bool MLSolverUDC::transfer ( const LinEqVector & fv,
SpaceId fi,
LinEqVector & tv,
SpaceId ti,
bool add_to_t = false,
MLTransferMode = TRANSFER ) [pure virtual]
 

usually a projection of a vector from one space to another space. Can be implemented by class "Proj" or inherited classes. Arguments are the identifiers of source and destination spaces and a flag indicating, whether the result should be written or added. This flag can be passed to the "apply" function of "Proj". Often the transfer i to j is adjoint to the transfer j to i. It is then useful to set up only one "Proj" from i to j and to use the "TRANSPOSED" flag for the adjoint transfer from j to i. Note: For multigrid "Proj" has to be set up from coarse to fine, not reverse.

The return value indicates, whether a transfer was actually formed. For a domain decomposition algorithm and a transfer between non intersecting domains a value "false" may be returned. In combination with the flag for adding the solution, the destination vector would not be touched. This can enable the "MLSolver" algorithm to discard further calls of this transfer operator (not implemented now).

Reimplemented in MGtools, NonLinMGtools, and Schwarztools.


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