PCFieldSplitSetSchurPre#

Indicates from what operator the preconditioner is constructed for the Schur complement. The default is the A11 matrix.

Synopsis#

Collective

Input Parameters#

Options Database Keys#

  • -pc_fieldsplit_schur_precondition <self,selfp,user,a11,full> - default is a11. See notes for meaning of various arguments

  • -fieldsplit_1_pc_type - the preconditioner algorithm that is used to construct the preconditioner from the operator

Notes#

If ptype is

  • a11 - the preconditioner for the Schur complement is generated from the block diagonal part of the preconditioner matrix associated with the Schur complement (i.e. A11), not the Schur complement matrix

  • 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

  • user - the preconditioner for the Schur complement is generated from the user provided matrix (pre argument to this function).

  • 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

  • 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

When solving a saddle point problem, where the A11 block is identically zero, using a11 as the ptype only makes sense with the additional option -fieldsplit_1_pc_type none. Usually for saddle point problems one would use a ptype of self and -fieldsplit_1_pc_type lsc which uses the least squares commutator to compute a preconditioner for the Schur complement.

Developer Note#

The name of this function and the option -pc_fieldsplit_schur_precondition are inconsistent; precondition should be used everywhere.

See Also#

Solving Block Matrices with PCFIELDSPLIT, PC, PCFieldSplitGetSchurPre(), PCFieldSplitGetSubKSP(), PCFIELDSPLIT, PCFieldSplitSetFields(), PCFieldSplitSchurPreType, MatSchurComplementSetAinvType(), PCLSC, PCFieldSplitSetSchurFactType()

Level#

intermediate

Location#

src/ksp/pc/impls/fieldsplit/fieldsplit.c

Examples#

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

Implementations#

PCFieldSplitSetSchurPre_FieldSplit() in src/ksp/pc/impls/fieldsplit/fieldsplit.c


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