PCFieldSplitGetSubKSP#

Gets the KSP contexts for all splits

Synopsis#

#include "petscpc.h" 
PetscErrorCode PCFieldSplitGetSubKSP(PC pc, PetscInt *n, KSP *subksp[])

Collective

Input Parameter#

  • pc - the preconditioner context

Output Parameters#

  • n - the number of splits

  • subksp - the array of KSP contexts

Notes#

After PCFieldSplitGetSubKSP() the array of KSPs is to be freed by the user with PetscFree() (not the KSP, just the array that contains them).

You must call PCSetUp() before calling PCFieldSplitGetSubKSP().

If the fieldsplit is of type PC_COMPOSITE_SCHUR, it returns the KSP object used inside the Schur complement and the KSP object used to iterate over the Schur complement. To access all the KSP objects used in PC_COMPOSITE_SCHUR, use PCFieldSplitSchurGetSubKSP().

If the fieldsplit is of type PC_COMPOSITE_GKB, it returns the KSP object used to solve the inner linear system defined by the matrix H in each loop.

Fortran Notes#

You must pass in a KSP array that is large enough to contain all the KSPs. You can call PCFieldSplitGetSubKSP(pc,n,PETSC_NULL_KSP,ierr) to determine how large the KSP array must be.

Developer Notes#

There should be a PCFieldSplitRestoreSubKSP() instead of requiring the user to call PetscFree()

The Fortran interface could be modernized to return directly the array of values.

See Also#

Solving Block Matrices with PCFIELDSPLIT, PC, PCFIELDSPLIT, PCFieldSplitSetFields(), PCFieldSplitSetIS(), PCFieldSplitSchurGetSubKSP()

Level#

advanced

Location#

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

Examples#

src/ksp/ksp/tutorials/ex27.c
src/ksp/ksp/tutorials/ex70.c
src/ksp/ksp/tutorials/ex87.c
src/snes/tutorials/ex70.c
src/ksp/ksp/tutorials/ex43.c

Implementations#

PCFieldSplitGetSubKSP_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