Add GenEO coarse space and preconditioner implementation
-
Review changes -
-
Download -
Patches
-
Plain diff
Adding an implementation of the GenEO coarse space as well as a two-level additive Schwarz preconditioner making use of it. See Spillane et al., 2014, 'Abstract robust coarse spaces for systems of PDEs via generalized eigenproblems in the overlaps'.
This preconditioner allows to gain independence of parameter contrast and number of subdomains and is applicable to a wide range of finite element problems.
This implementation has been applied successfully to simulate highly heterogeneous carbon fiber material at large scale, see http://www.sciencedirect.com/science/article/pii/S0263822317321797?via%3Dihub
.
The framework is designed in a flexible way such that different basis types can be plugged in easily. The two-level additive Schwarz implementation receives a generic coarse basis which in turn can be chosen to be constructed from a per-subdomain local basis. Existing implementations for this local basis are the GenEO basis, a Lipton-Babuska basis (not quite finished yet), and a simple 1D (per subdomain) basis.
As this is a partition of unity method, one generic partition of unity is implemented as well as a smoother one ("Sarkis") which is however restricted 2D YaspGrid-type cases.
How the preconditioner can be applied is shown in the corresponding test. Essentially, it requires setting up two specific additional stiffness-type matrices (tools to conveniently do so are provided). Otherwise, it can be used like any other ISTL preconditioner.
Another application of this is automatically generating multiscale approximations by using the coarse space exclusively. With this framework, that is trivially possible by directly accessing the coarse system in the corresponding 'CoarseSpace' object.
-
Automatically get dimension of DOFs in MultiCommDataHandle -
Where to put everything? -> Adjust header guards -
Changelog entry with short howto
Merge request reports
- version 242c5597ed
- version 23fcccafac
- version 22d6498f48
- version 219bd15b22
- version 204187f6bb
- version 195f0f3083
- version 18947704a5
- version 17ce4f7b8e
- version 161b11d4d2
- version 15290c6285
- version 147d77614b
- version 1311f85c7b
- version 124f2c0028
- version 1184b1a378
- version 1065676dab
- version 9ef425fbf
- version 8074a2f10
- version 7fd151732
- version 615c18cae
- version 56419ac8d
- version 4589577c0
- version 34d06c8ad
- version 2710fcb7e
- version 16a845bea
- master (base)
- latest version16d79abd30 commits,
- version 242c5597ed28 commits,
- version 23fcccafac18 commits,
- version 22d6498f4817 commits,
- version 219bd15b2216 commits,
- version 204187f6bb15 commits,
- version 195f0f308315 commits,
- version 18947704a514 commits,
- version 17ce4f7b8e13 commits,
- version 161b11d4d213 commits,
- version 15290c628513 commits,
- version 147d77614b12 commits,
- version 1311f85c7b11 commits,
- version 124f2c002810 commits,
- version 1184b1a3789 commits,
- version 1065676dab7 commits,
- version 9ef425fbf6 commits,
- version 8074a2f105 commits,
- version 7fd1517324 commits,
- version 615c18cae3 commits,
- version 56419ac8d3 commits,
- version 4589577c03 commits,
- version 34d06c8ad2 commits,
- version 2710fcb7e1 commit,
- version 16a845bea1 commit,
- Side-by-side
- Inline