# PCHMG
For multiple component PDE problems constructs a hierarchy of restriction operators to coarse grid problems using the submatrix of a single component with either `PCHYPRE` or `PCGAMG`. The same restriction operators are used for each of the components of the PDE with `PCMG` resulting in a much more efficient to build and apply preconditioner than using `PCGAMG` on the entire system. 
## Options Database Keys

- ***-pc_hmg_reuse_interpolation <true | false> -*** Whether or not to reuse the interpolations for new matrix values. It can potentially save compute time.
- ***-pc_hmg_use_subspace_coarsening  <true | false> -*** Whether or not to use subspace coarsening (that is, coarsen a submatrix).
- ***-hmg_inner_pc_type <hypre, gamg, ...> -*** What method is used to coarsen matrix
- ***-pc_hmg_use_matmaij <true | false> -*** Whether or not to use `MATMAIJ` for multicomponent problems for saving memory





## Note
`MatSetBlockSize()` must be called on the linear system matrix to set the number of components of the PDE.


## References

- **** -*** Fande Kong, Yaqi Wang, Derek R Gaston, Cody J Permann, Andrew E Slaughter, Alexander D Lindsay, Richard C Martineau, A highly parallel multilevel
Newton-Krylov-Schwarz method with subspace-based coarsening and partition-based balancing for the multigroup neutron transport equations on
3D unstructured meshes, arXiv preprint arXiv:1903.03659, 2019



## See Also
 `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `PCMG`, `PCHYPRE`, `PCHMG`, `PCGetCoarseOperators()`, `PCGetInterpolations()`,
`PCHMGSetReuseInterpolation()`, `PCHMGSetUseSubspaceCoarsening()`, `PCHMGSetInnerPCType()`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/impls/hmg/hmg.c.html#PCHMG">src/ksp/pc/impls/hmg/hmg.c</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex4.c.html">src/ksp/ksp/tutorials/ex4.c.html</A><BR>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/impls/hmg/hmg.c)


[Index of all PC routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
