Skip to main content
`Ctrl`+`K`

# PCFieldSplitSchurPreType

Determines how to precondition a Schur complement arising with the `PCType` of `PCFIELDSPLIT`

## 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 preconditioners that currently work with this symbolic representation matrix object are `PCLSC` and `PCHPDDM`

- `PC_FIELDSPLIT_SCHUR_PRE_SELFP` - the preconditioning for the Schur complement is generated from an explicitly-assembled approximation \(Sp = A11 - A10 diag(A00)^{-1} 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 \(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

Preconditioners, `PCFIELDSPLIT`, `PCFieldSplitSetSchurPre()`, `PC`

## Level

intermediate

## Location

include/petscpctypes.h

## Examples

src/ksp/ksp/tutorials/ex87.c

## Examples

src/dm/impls/stag/tutorials/ex4.c
src/snes/tutorials/ex70.c

Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages