#include <MLSolverUDC.h>
Inheritance diagram for MLSolverUDC::

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) |
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.
|
|
|
|
|
|
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
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. |
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
Reimplemented in NonLinMGtools. |
|
|
Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
compute the residual. Can be implemented by "LinEqAdmFE" or "LinEqSystem". See also "solveSubSystem". Reimplemented in MGtools, NonLinMGtools, and Schwarztools. |
|
|
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. |
|
|
(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. |
|
|
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. |