PCFieldSplitSetSchurPre#
Indicates from what operator the preconditioner is constructucted for the Schur complement. The default is the A11 matrix.
Synopsis#
#include "petscpc.h"
PetscErrorCode PCFieldSplitSetSchurPre(PC pc, PCFieldSplitSchurPreType ptype, Mat pre)
Collective
Input Parameters#
pc - the preconditioner context
ptype - which matrix to use for preconditioning the Schur complement:
PC_FIELDSPLIT_SCHUR_PRE_A11
(default),PC_FIELDSPLIT_SCHUR_PRE_SELF
,PC_FIELDSPLIT_SCHUR_PRE_USER
,PC_FIELDSPLIT_SCHUR_PRE_SELFP
, andPC_FIELDSPLIT_SCHUR_PRE_FULL
pre - matrix to use for preconditioning, or
NULL
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 preconditioner that currently works with this symbolic representation matrix object is the
PCLSC
preconditioneruser - 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.
See Also#
Solving Block Matrices, PC
, PCFieldSplitGetSchurPre()
, PCFieldSplitGetSubKSP()
, PCFIELDSPLIT
, PCFieldSplitSetFields()
, PCFieldSplitSchurPreType
,
MatSchurComplementSetAinvType()
, PCLSC
,
PCFieldSplitSchurPreType
Level#
intermediate
Location#
Examples#
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