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