1: #if !defined(_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