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

Public Methods | |
| SchwarzDD (const MLSolver_prm &pm) | |
| ~SchwarzDD () | |
| virtual bool | solve (StartVectorMode start) |
| virtual String | description () const |
| virtual int | getWork (const PrecondWork work_tp) const |
| virtual real | getStorage () const |
Protected Methods | |
| virtual SpaceId | noOfOverlapSpaces () const |
NAME: SchwarzDD - overlapping Schwarz iteration
DESCRIPTION:
Implements the alternating (multiplicative) Schwarz iteration for multiple domains. It can be used as a preconditioner, an iterative solver or a nonlinear solver.
The different sub-domains here are the different overlapping domains. They have the numbers 1 to "getNoOfSpaces"-1. The domain number "getNoOfSpaces" is the global domain, on which one wants to solve the differential equations. It is the union of all sub-domains. The sub-domains have to overlap for reasons of convergence. The rate of convergence depends on the size of the overlap. A large overlap usually means a fast convergence. However this also means larger sub-domains and more expensive sub-domain solution.
The "Proj" operators will usually be used to implement the grid transfers for "transfer" of "MLSolverUDC". If the grids are aligned properly, the transfer is just a copy operation, copying some elements of one verctor to different locations in the destination vector (and setting all other components to zero).
The solvers for the different sub-domains 1 to "getNoOfSpaces"-1 may be exact or approximative. No solver is required for the global domain number "getNoOfSpaces". The original method uses exact sub-domain solvers.
Note: The sub-domain solvers have to implement a special treatment of the boundary conditions: All sub-domain boundaries, which are not part of the boundary of the global domain, called inner boundaries, are meant to have Dirichlet boundary conditions "EssBC". The value of the solution vector at the point is the value, which has to be prescribed as the Dirichlet value at that point. (=Do not change these values during solution). Hence the boundary conditions change for every call of "solveSubSystem".
For further reading see e.g. H. A. Schwarz, Vierteljahresschrift der naturforschenden Gesellschaft in $`Zu}rich`$, 15, 1870
|
|
See class "MLSolver". |
|
|
|
|
|
Reimplemented from MLSolver. Reimplemented in AddSchwarzDD, SymSchwarzDD, and CoarseAddCoarseSchwarzDD. |
|
|
estimate storage. Estimates are compatible with estimates for linear solvers. Reimplemented from MLSolver. Reimplemented in AddSchwarzDD. |
|
|
estimate work. Estimates are compatible with estimates for linear solvers. Reimplemented from MLSolver. Reimplemented in AddSchwarzDD, and SymSchwarzDD. |
|
|
Reimplemented in CoarseAddCoarseSchwarzDD. |
|
|
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 MLSolver. Reimplemented in AddSchwarzDD, SymSchwarzDD, and CoarseAddCoarseSchwarzDD. |