Reference documentation for deal.II version GIT 3779fa9eb4 20230928 13:00:02+00:00

Classes that have to do with multigrid algorithms.
The main class with implementation of the multigrid scheme is Multigrid with its function Multigrid::cycle(). It uses the following abstract classes in order to perform the multigrid cycle:
Additionally, there is a class PreconditionMG, which is a wrapper around Multigrid with the standard interface of deal.II Preconditioners and Relaxation Operators. PreconditionMG also uses the classes inheriting from MGTransferBase, for instance MGTransferPrebuilt, where it uses MGTransferPrebuilt::copy_to_mg() and MGTransferPrebuilt::copy_from_mg_add(), which transfer between the global vector and the level vectors.
Finally, we have several auxiliary classes, namely MGLevelObject, which stores an object on each level*
See the step16, step16b, and step39 example programs on how to use this functionality.
Using multigrid methods on adaptively refined meshes involves more infrastructure than with regular refinement. First, in order to keep the complexity optimal, we need to decide how to do the smoothing on each level. And to this end, we have to define what a level is in the sense of multilevel decomposition.
First, we define that a level in the multigrid sense is constituted by all cells of a certain level in the mesh hierarchy. Thus, smoothing on a certain level is restricted to the subdomain which consists of cells of this level or finer. This is usually referred to as local smoothing. The advantage of this definition is, that level matrices for the multigrid scheme can be assembled easily by traversing to all cells of a certain level, and that these level matrices do not contain hanging nodes.
The disadvantage of this decomposition is, that we need additional matrices to handle the issues that arise at refinement edges. Furthermore, the treatment is different, depending on whether the method is continuous (thus having degrees of freedom on the refinement edge) or discontinuous (employs flux matrices at the refinement edge). While these matrices are small, we have to assemble them and notify the multigrid method of them.