Skip to content

Add GenEO coarse space and preconditioner implementation

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 hilghly 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

Merge request reports