Actual source code: bjacobi.h

  1: #ifndef __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