xref: /petsc/include/petsc/private/matisimpl.h (revision 0b46e949f18ac28417071477034640c76a0832a0)
1 #pragma once
2 
3 #include <petscsf.h>
4 #include <petsc/private/matimpl.h>
5 
6 typedef struct {
7   Mat          A;       /* the local matrix */
8   VecScatter   cctx;    /* column scatter */
9   VecScatter   rctx;    /* row scatter */
10   Vec          x, y;    /* work space for matrix vector product */
11   Vec          counter; /* counter vector */
12   PetscBool    pure_neumann;
13   PetscSF      sf, csf; /* SFs for rows and cols */
14   PetscInt    *sf_rootdata, *sf_leafdata;
15   PetscInt    *csf_rootdata, *csf_leafdata;
16   IS           getsub_ris, getsub_cis; /* row and column ISs for MatCreateSubMatrix and MAT_REUSE_MATRIX */
17   PetscBool    allow_repeated;         /* allow repeated entries in the local to global map */
18   Mat          islocalref;             /* is a reference to a local submatrix? this is the parent matrix (not ref counted) */
19   PetscBool    locempty;               /* adapt local matrices for empty rows/cols during MatAssemblyEnd_IS */
20   PetscBool    storel2l;               /* carry over local-to-local inherited in MatPtAP */
21   char        *lmattype;
22   PetscScalar *bdiag; /* Used by MatInvertBlockDiagonal_IS */
23 
24   PetscObjectState lnnzstate; /* nonzero state of local matrix */
25 
26   PetscBool keepassembled; /* store assembled form if needed */
27   Mat       assembledA;    /* assembled operator */
28   Mat       dA;            /* For MatGetDiagonalBlock_IS */
29 
30   /* Support for negative or repeated entries in l2map
31      These maps can be different than the ones passed in by the user via
32      MatSetLocalToGlobalMapping */
33   ISLocalToGlobalMapping rmapping, cmapping;
34 } Mat_IS;
35 
36 struct _MatISLocalFields {
37   PetscInt nr, nc;
38   IS      *rf, *cf;
39 };
40 typedef struct _MatISLocalFields *MatISLocalFields;
41 
42 struct _MatISPtAP {
43   PetscReal fill;
44   IS        cis0, cis1, ris0, ris1;
45   Mat      *lP;
46 };
47 typedef struct _MatISPtAP *MatISPtAP;
48