1 #ifndef _KAIJ_H 2 #define _KAIJ_H 3 4 #include <../src/mat/impls/aij/mpi/mpiaij.h> 5 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; 17 18 typedef struct { 19 KAIJHEADER 20 } Mat_SeqKAIJ; 21 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; 30 31 #endif 32