1 #pragma once 2 3 #include <../src/mat/impls/aij/mpi/mpiaij.h> 4 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; 16 17 typedef struct { 18 KAIJHEADER 19 } Mat_SeqKAIJ; 20 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; 29