1: #ifndef _KAIJ_H 2: #define _KAIJ_H 4: #include <../src/mat/impls/aij/mpi/mpiaij.h> 6: #define KAIJHEADER \ 7: PetscInt p, q; \ 8: Mat AIJ; \ 9: PetscScalar *S; \ 10: PetscScalar *T; \ 11: PetscScalar *ibdiag; \ 12: PetscBool ibdiagvalid, getrowactive, isTI; \ 13: struct { \ 14: PetscBool setup; \ 15: PetscScalar *w, *work, *t, *arr, *y; \ 16: } sor; 18: typedef struct { 19: KAIJHEADER 20: } Mat_SeqKAIJ; 22: typedef struct { 23: KAIJHEADER 24: Mat OAIJ; /* sequential KAIJ matrix that corresponds to off-diagonal matrix entries (diagonal entries are stored in 'AIJ') */ 25: Mat A; /* AIJ matrix describing the blockwise action of the KAIJ matrix; compare with struct member 'AIJ' in sequential case */ 26: VecScatter ctx; /* update ghost points for parallel case */ 27: Vec w; /* work space for ghost values for parallel case */ 28: PetscObjectState state; /* state of the matrix A when AIJ and OIJ were last updated */ 29: } Mat_MPIKAIJ; 31: #endif