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 matchfields
then the submatrix that is solved for this set of fields comes from an off-diagonal block of the matrix andfields_col
provides the column indices for that block
Options Database Key#
-pc_fieldsplit_%d_fields <a,b,..> - indicates the fields to be used in the
%d
’th split
Notes#
Use PCFieldSplitSetIS()
to set a general set of indices as a split.
If the matrix used to construct the preconditioner is MATNEST
then field i refers to the is_row[i]
IS
passed to MatCreateNest()
.
If the matrix used to construct the preconditioner is not MATNEST
then
PCFieldSplitSetFields()
is for defining fields as strided blocks (based on the block size provided to the matrix with MatSetBlocksize()
or
to the PC
with PCFieldSplitSetBlockSize()
). 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()
,
MatSetBlocksize()
, MatCreateNest()
Level#
intermediate
Location#
Examples#
src/ksp/ksp/tutorials/ex70.c
src/ksp/ksp/tutorials/ex43.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