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