xref: /petsc/src/mat/impls/kaij/kaij.h (revision 66af8762ec03dbef0e079729eb2a1734a35ed7ff)
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