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