PCFieldSplitSetFields#
Sets the fields that define one particular split in PCFIELDSPLIT
Synopsis#
#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 usedn - 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
Notes#
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, PC
, PCFieldSplitGetSubKSP()
, PCFIELDSPLIT
, PCFieldSplitSetBlockSize()
, PCFieldSplitSetIS()
, PCFieldSplitRestrictIS()
Level#
intermediate
Location#
Examples#
src/ksp/ksp/tutorials/ex43.c
src/ksp/ksp/tutorials/ex70.c
src/ksp/ksp/tutorials/ex42.c
Implementations#
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