# PCLU
Uses a direct solver, based on LU factorization, as a preconditioner 
## Options Database Keys

- ***-pc_factor_reuse_ordering -*** Activate `PCFactorSetReuseOrdering()`
- ***-pc_factor_mat_solver_type -*** Actives `PCFactorSetMatSolverType()` to choose the direct solver, like superlu
- ***-pc_factor_reuse_fill -*** Activates `PCFactorSetReuseFill()`
- ***-pc_factor_fill <fill> -*** Sets fill amount
- ***-pc_factor_in_place -*** Activates in-place factorization
- ***-pc_factor_mat_ordering_type <nd,rcm,...> -*** Sets ordering routine
- ***-pc_factor_pivot_in_blocks <true,false> -*** allow pivoting within the small blocks during factorization (may increase
stability of factorization.
- ***-pc_factor_shift_type <shifttype> -*** Sets shift type or -1 for the default; use '-help' for a list of available types
- ***-pc_factor_shift_amount <shiftamount> -*** Sets shift amount or -1 for the default
- ***-pc_factor_nonzeros_along_diagonal -*** permutes the rows and columns to try to put nonzero value along the diagonal.
- ***-pc_factor_mat_solver_type <packagename> -*** use an external package for the solve, see `MatSolverType` for possibilities
- ***-mat_solvertype_optionname -*** options for a specific solver package, for example -mat_mumps_cntl_1





## Notes
Not all options work for all matrix formats

Run with -help to see additional options for particular matrix formats or factorization algorithms

Usually this will compute an "exact" solution in one iteration and does
not need a Krylov method (i.e. you can use -ksp_type preonly, or
`KSPSetType`(ksp,`KSPPREONLY`) for the Krylov method


## See Also
 `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `MatSolverType`, `MatGetFactor()`, `PCQR`, `PCSVD`,
`PCILU`, `PCCHOLESKY`, `PCICC`, `PCFactorSetReuseOrdering()`, `PCFactorSetReuseFill()`, `PCFactorGetMatrix()`,
`PCFactorSetFill()`, `PCFactorSetUseInPlace()`, `PCFactorSetMatOrderingType()`, `PCFactorSetColumnPivot()`,
`PCFactorSetPivotInBlocks()`, `PCFactorSetShiftType()`, `PCFactorSetShiftAmount()`
`PCFactorReorderForNonzeroDiagonal()`

## Level
beginner

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/impls/factor/lu/lu.c.html#PCLU">src/ksp/pc/impls/factor/lu/lu.c</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/dm/impls/stag/tutorials/ex4.c.html">src/dm/impls/stag/tutorials/ex4.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex13.c.html">src/ksp/ksp/tutorials/ex13.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex13f90.F90.html">src/ksp/ksp/tutorials/ex13f90.F90.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex52.c.html">src/ksp/ksp/tutorials/ex52.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex52f.F90.html">src/ksp/ksp/tutorials/ex52f.F90.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex53.c.html">src/ksp/ksp/tutorials/ex53.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex61f.F90.html">src/ksp/ksp/tutorials/ex61f.F90.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex68.c.html">src/ksp/ksp/tutorials/ex68.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex69.c.html">src/ksp/ksp/tutorials/ex69.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex77.c.html">src/ksp/ksp/tutorials/ex77.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex77f.F90.html">src/ksp/ksp/tutorials/ex77f.F90.html</A><BR>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/impls/factor/lu/lu.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)  
