# PCGAMG
Geometric algebraic multigrid (AMG) preconditioner 
## Options Database Keys

- ***-pc_gamg_type <type,default=agg> -*** one of agg, geo, or classical
- ***-pc_gamg_repartition  <bool,default=false> -*** repartition the degrees of freedom accross the coarse grids as they are determined
- ***-pc_gamg_asm_use_agg <bool,default=false> -*** use the aggregates from the coasening process to defined the subdomains on each level for the PCASM smoother
- ***-pc_gamg_process_eq_limit <limit, default=50> -*** `PCGAMG` will reduce the number of MPI processes used directly on the coarse grids so that there are around <limit>
equations on each process that has degrees of freedom
- ***-pc_gamg_coarse_eq_limit <limit, default=50> -*** Set maximum number of equations on coarsest grid to aim for.
- ***-pc_gamg_reuse_interpolation <bool,default=true> -*** when rebuilding the algebraic multigrid preconditioner reuse the previously computed interpolations (should always be true)
- ***-pc_gamg_threshold[] <thresh,default=[-*** 1,...]> - Before aggregating the graph `PCGAMG` will remove small values from the graph on each level (< 0 does no filtering)
- ***-pc_gamg_threshold_scale <scale,default=1> -*** Scaling of threshold on each coarser grid if not specified



## Options Database Keys for Aggregation

- ***-pc_gamg_agg_nsmooths <nsmooth, default=1> -*** number of smoothing steps to use with smooth aggregation
- ***-pc_gamg_square_graph <n,default=1> -*** alias for pc_gamg_aggressive_coarsening (deprecated)
- ***-pc_gamg_aggressive_coarsening <n,default=1> -*** number of aggressive coarsening (MIS-2) levels from finest.



## Options Database Keys for Multigrid

- ***-pc_mg_cycles <v> -*** v or w, see `PCMGSetCycleType()`
- ***-pc_mg_distinct_smoothup -*** configure the up and down (pre and post) smoothers separately, see PCMGSetDistinctSmoothUp()
- ***-pc_mg_type <multiplicative> -*** (one of) additive multiplicative full kascade
- ***-pc_mg_levels <levels> -*** Number of levels of multigrid to use. GAMG has a heuristic so pc_mg_levels is not usually used with GAMG



## Notes
To obtain good performance for `PCGAMG` for vector valued problems you must
call `MatSetBlockSize()` to indicate the number of degrees of freedom per grid point
call `MatSetNearNullSpace()` (or `PCSetCoordinates()` if solving the equations of elasticity) to indicate the near null space of the operator

See [the Users Manual section on PCGAMG](sec_amg) for more details.




## See Also
 `PCCreate()`, `PCSetType()`, `MatSetBlockSize()`, `PCMGType`, `PCSetCoordinates()`, `MatSetNearNullSpace()`, `PCGAMGSetType()`, `PCGAMGAGG`, `PCGAMGGEO`, `PCGAMGCLASSICAL`, `PCGAMGSetProcEqLim()`,
`PCGAMGSetCoarseEqLim()`, `PCGAMGSetRepartition()`, `PCGAMGRegister()`, `PCGAMGSetReuseInterpolation()`, `PCGAMGASMSetUseAggs()`, `PCGAMGSetUseParallelCoarseGridSolve()`, `PCGAMGSetNlevels()`, `PCGAMGSetThreshold()`, `PCGAMGGetType()`, `PCGAMGSetReuseInterpolation()`, `PCGAMGSetUseSAEstEig()`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/impls/gamg/gamg.c.html#PCGAMG">src/ksp/pc/impls/gamg/gamg.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/gamg/gamg.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)  
