:orphan:
# PCML
Use the SNL ML algebraic multigrid preconditioner. 
## Options Database Keys

## Multigrid options(inherited)

- ***-pc_mg_cycle_type <v> -*** v for V cycle, w for W-cycle (`PCMGSetCycleType()`)
- ***-pc_mg_distinct_smoothup -*** Should one configure the up and down smoothers separately (`PCMGSetDistinctSmoothUp()`)
- ***-pc_mg_type <multiplicative> -*** (one of) additive multiplicative full kascade



## ML Options Database Key

- ***-pc_ml_PrintLevel <0> -*** Print level (`ML_Set_PrintLevel()`)
- ***-pc_ml_maxNlevels <10> -*** Maximum number of levels (None)
- ***-pc_ml_maxCoarseSize <1> -*** Maximum coarsest mesh size (`ML_Aggregate_Set_MaxCoarseSize()`)
- ***-pc_ml_CoarsenScheme <Uncoupled> -*** (one of) Uncoupled Coupled MIS METIS
- ***-pc_ml_DampingFactor <1.33333> -*** P damping factor (`ML_Aggregate_Set_DampingFactor()`)
- ***-pc_ml_Threshold <0> -*** Smoother drop tol (`ML_Aggregate_Set_Threshold()`)
- ***-pc_ml_SpectralNormScheme_Anorm <false> -*** Method used for estimating spectral radius (`ML_Set_SpectralNormScheme_Anorm()`)
- ***-pc_ml_repartition <false> -*** Allow ML to repartition levels of the hierarchy (`ML_Repartition_Activate()`)
- ***-pc_ml_repartitionMaxMinRatio <1.3> -*** Acceptable ratio of repartitioned sizes (`ML_Repartition_Set_LargestMinMaxRatio()`)
- ***-pc_ml_repartitionMinPerProc <512> -*** Smallest repartitioned size (`ML_Repartition_Set_MinPerProc()`)
- ***-pc_ml_repartitionPutOnSingleProc <5000> -*** Problem size automatically repartitioned to one processor (`ML_Repartition_Set_PutOnSingleProc()`)
- ***-pc_ml_repartitionType <Zoltan> -*** Repartitioning library to use (`ML_Repartition_Set_Partitioner()`)
- ***-pc_ml_repartitionZoltanScheme <RCB> -*** Repartitioning scheme to use (None)
- ***-pc_ml_Aux <false> -*** Aggregate using auxiliary coordinate-based Laplacian (None)
- ***-pc_ml_AuxThreshold <0.0> -*** Auxiliary smoother drop tol (None)





## Developer Note
The coarser grid matrices and restriction/interpolation
operators are computed by ML, with the matrices converted to PETSc matrices in `MATAIJ` format
and the restriction/interpolation operators wrapped as PETSc shell matrices.


## See Also
 `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `PCMGType`, `PCMG`, `PCHYPRE`, `PCGAMG`,
`PCMGSetLevels()`, `PCMGGetLevels()`, `PCMGSetType()`, `MPSetCycles()`, `PCMGSetDistinctSmoothUp()`,
`PCMGGetCoarseSolve()`, `PCMGSetResidual()`, `PCMGSetInterpolation()`,
`PCMGSetRestriction()`, `PCMGGetSmoother()`, `PCMGGetSmootherUp()`, `PCMGGetSmootherDown()`,
`PCMGSetCycleTypeOnLevel()`, `PCMGSetRhs()`, `PCMGSetX()`, `PCMGSetR()`

## Level
intermediate

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


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


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