:orphan:
# PCFieldSplitSchurPreType
Determines how to precondition a Schur complement 
## Synopsis
```
typedef enum {
  PC_FIELDSPLIT_SCHUR_PRE_SELF,
  PC_FIELDSPLIT_SCHUR_PRE_SELFP,
  PC_FIELDSPLIT_SCHUR_PRE_A11,
  PC_FIELDSPLIT_SCHUR_PRE_USER,
  PC_FIELDSPLIT_SCHUR_PRE_FULL
} PCFieldSplitSchurPreType;
```

## Values

- ***`PC_FIELDSPLIT_SCHUR_PRE_SELF` -*** the preconditioner for the Schur complement is generated from the symbolic representation of the Schur complement matrix:
The only preconditioner that currently works with this symbolic representation matrix object is `PCLSC`
- ***`PC_FIELDSPLIT_SCHUR_PRE_SELFP` -*** the preconditioning for the Schur complement is generated from an explicitly-assembled approximation Sp = A11 - A10 inv(diag(A00)) A01
This is only a good preconditioner when diag(A00) is a good preconditioner for A00. Optionally, A00 can be
lumped before extracting the diagonal using the additional option `-fieldsplit_1_mat_schur_complement_ainv_type lump`
- ***`PC_FIELDSPLIT_SCHUR_PRE_A11` -*** the preconditioner for the Schur complement is generated from the block diagonal part of the matrix used to define the preconditioner,
associated with the Schur complement (i.e. A11), not the Schur complement matrix
- ***`PC_FIELDSPLIT_SCHUR_PRE_USER` -*** the preconditioner for the Schur complement is generated from the user provided matrix (pre argument
to this function).
- ***`PC_FIELDSPLIT_SCHUR_PRE_FULL` -*** the preconditioner for the Schur complement is generated from the exact Schur complement matrix representation
computed internally by `PCFIELDSPLIT` (this is expensive) useful mostly as a test that the Schur complement approach can work for your problem





## See Also
 [](sec_pc), `PCFIELDSPLIT`, `PCFieldSplitSetSchurPre()`, `PC`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/include/petscpctypes.h.html#PCFieldSplitSchurPreType">include/petscpctypes.h</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/dm/impls/stag/tutorials/ex4.c.html">src/dm/impls/stag/tutorials/ex4.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex70.c.html">src/snes/tutorials/ex70.c</A><BR>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/include/petscpctypes.h)


[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)  
