Actual source code: bjacobi.h
3: /*
4: Private data for block Jacobi and block Gauss-Seidel preconditioner.
5: */
6: #include <petsc/private/pcimpl.h>
8: /*
9: This data is general for all implementations
10: */
11: typedef struct {
12: PetscInt n; /* number of global blocks */
13: PetscInt n_local; /* number of blocks in this subcommunicator or in this process */
14: PetscInt first_local; /* number of first block on processor */
15: PetscBool use_true_local; /* use block from true matrix, not preconditioner matrix for local MatMult() */
16: KSP *ksp; /* KSP contexts for blocks or for subcommunicator */
17: void *data; /* implementation-specific data */
18: PetscInt *l_lens; /* lens of each block */
19: PetscInt *g_lens;
20: PetscSubcomm psubcomm; /* for multiple processors per block */
21: } PC_BJacobi;
23: /*
24: This data is specific for certain implementations
25: */
27: /* This is for multiple blocks per processor */
28: typedef struct {
29: Vec *x,*y; /* work vectors for solves on each block */
30: PetscInt *starts; /* starting point of each block */
31: Mat *mat,*pmat; /* submatrices for each block */
32: IS *is; /* for gathering the submatrices */
33: } PC_BJacobi_Multiblock;
35: /* This is for a single block per processor */
36: typedef struct {
37: Vec x,y;
38: } PC_BJacobi_Singleblock;
40: /* This is for multiple processors per block */
41: typedef struct {
42: PC pc; /* preconditioner used on each subcommunicator */
43: Vec xsub,ysub; /* vectors of a subcommunicator to hold parallel vectors of PetscObjectComm((PetscObject)pc) */
44: Mat submats; /* matrix and optional preconditioner matrix belong to a subcommunicator */
45: PetscSubcomm psubcomm;
46: } PC_BJacobi_Multiproc;
47: #endif