Sets the fields that define one particular split in PCFIELDSPLIT


#include "petscpc.h" 
PetscErrorCode PCFieldSplitSetFields(PC pc, const char splitname[], PetscInt n, const PetscInt *fields, const PetscInt *fields_col)

Logically Collective

Input Parameters#

  • pc - the preconditioner context

  • splitname - name of this split, if NULL the number of the split is used

  • n - the number of fields in this split

  • fields - the fields in this split

  • fields_col - generally the same as fields, if it does not match fields then the matrix block that is solved for this set of fields comes from an off-diagonal block of the matrix and fields_col provides the column indices for that block


Use PCFieldSplitSetIS() to set a general set of indices as a split.

PCFieldSplitSetFields() is for defining fields as strided blocks. For example, if the block size is three then one can define a split as 0, or 1 or 2 or 0,1 or 0,2 or 1,2 which mean 0xx3xx6xx9xx12 … x1xx4xx7xx … xx2xx5xx8xx.. 01x34x67x… 0x1x3x5x7.. x12x45x78x…. where the numbered entries indicate what is in the split.

This function is called once per split (it creates a new split each time). Solve options for this split will be available under the prefix -fieldsplit_SPLITNAME_.

PCFieldSplitSetIS() does not support having a fields_col different from fields

Developer Notes#

This routine does not actually create the IS representing the split, that is delayed until PCSetUp_FieldSplit(), because information about the vector/matrix layouts may not be available when this routine is called.

See Also#

Solving Block Matrices with PCFIELDSPLIT, PC, PCFieldSplitGetSubKSP(), PCFIELDSPLIT, PCFieldSplitSetBlockSize(), PCFieldSplitSetIS(), PCFieldSplitRestrictIS()








PCFieldSplitSetFields_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