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