Actual source code: bjacobi.h

      1: #pragma once
      2: /*
      3:     Private data for block Jacobi and block Gauss-Seidel preconditioner.
      4: */
      5: #include <petsc/private/pcimpl.h>

      7: /*
      8:        This data is general for all implementations
      9: */
     10: typedef struct {
     11:   PetscInt     n;              /* number of global blocks */
     12:   PetscInt     n_local;        /* number of blocks in this subcommunicator or in this process */
     13:   PetscInt     first_local;    /* number of first block on processor */
     14:   PetscBool    use_true_local; /* use block from true matrix, not the matrix used to construct the preconditioner for local MatMult() */
     15:   KSP         *ksp;            /* KSP contexts for blocks or for subcommunicator */
     16:   void        *data;           /* implementation-specific data */
     17:   PetscInt    *l_lens;         /* lens of each block */
     18:   PetscInt    *g_lens;
     19:   PetscSubcomm psubcomm; /* for multiple processors per block */
     20: } PC_BJacobi;

     22: /*
     23:        This data is specific for certain implementations
     24: */

     26: /*  This is for multiple blocks per processor */
     27: typedef struct {
     28:   Vec      *x, *y;      /* work vectors for solves on each block */
     29:   PetscInt *starts;     /* starting point of each block */
     30:   Mat      *mat, *pmat; /* submatrices for each block */
     31:   IS       *is;         /* for gathering the submatrices */
     32: } PC_BJacobi_Multiblock;

     34: /*  This is for a single block per processor */
     35: typedef struct {
     36:   Vec x, y;
     37: } PC_BJacobi_Singleblock;

     39: /*  This is for multiple processors per block */
     40: typedef struct {
     41:   PC           pc;         /* preconditioner used on each subcommunicator */
     42:   Vec          xsub, ysub; /* vectors of a subcommunicator to hold parallel vectors of PetscObjectComm((PetscObject)pc) */
     43:   Mat          submats;    /* the matrices belong to a subcommunicator */
     44:   PetscSubcomm psubcomm;
     45: } PC_BJacobi_Multiproc;