HMG
Overview
HMG stands for High-performance (Hybrid) MultiGrid method. HMG's essential idea is to separate a multigrid method into two steps; matrix coarsening and level solvers. The main motivation of HMG in the first place is to use HYPRE to do matrix coarsening and generate interpolations and use PETSc preconditioners/solvers as level solvers. However, the code is more general, and it can use other codes such as GAMG or a user code to generate interpolations.
Example 1
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type'
petsc_options_value = 'hmg'
[]
This configuration uses HYPRE to generate interpolations and uses SOR preconditioners from PETSc as level solvers.
Example 2
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hmg_use_subspace_coarsening'
petsc_options_value = 'hmg true'
petsc_options = '-snes_view'
[]
If there are multiple nonlinear variables, this configuration will reuse interpolations generated for the first nonlinear variable for all other variables. This will significantly speedup preconditioner setup. A complete toy example is (moose/test/tests/preconditioners/hmg/diffusion_hmg.i). We also demonstrate this capability for realistic neutron transport calculations in the following paper:
@article{kong2020highly,
title={{A Highly Parallel Multilevel Newton--Krylov--Schwarz Method with Subspace-Based Coarsening and Partition-Based Balancing for the Multigroup Neutron Transport Equation on Three-Dimensional Unstructured Meshes}},
author={Kong, Fande and Wang, Yaqi and Gaston, Derek R and Permann, Cody J and Slaughter, Andrew E and Lindsay, Alexander D and DeHart, Mark D and Martineau, Richard C},
journal={SIAM Journal on Scientific Computing},
volume={42},
number={5},
pages={C193--C220},
year={2020},
publisher={SIAM}
}