5: #include <petscsf.h>
6: #include <petsc/private/matimpl.h>
8: typedef struct {
9: Mat A; /* the local matrix */
10: VecScatter cctx; /* column scatter */
11: VecScatter rctx; /* row scatter */
12: Vec x,y; /* work space for matrix vector product */
13: Vec counter; /* counter vector */
14: PetscBool pure_neumann;
15: PetscSF sf,csf; /* SFs for rows and cols */
16: PetscInt *sf_rootdata,*sf_leafdata;
17: PetscInt *csf_rootdata,*csf_leafdata;
18: IS getsub_ris,getsub_cis; /* row and column ISs for MatCreateSubMatrix and MAT_REUSE_MATRIX */
19: PetscBool islocalref; /* is a reference to a local submatrix? */
20: PetscBool locempty; /* adapt local matrices for empty rows/cols during MatAssemblyEnd_IS */
21: PetscBool usesetlocal; /* use MatSetValuesLocal on local matrices */
22: } Mat_IS;
24: struct _MatISLocalFields {
25: PetscInt nr,nc;
26: IS *rf,*cf;
27: };
28: typedef struct _MatISLocalFields *MatISLocalFields;
30: PETSC_EXTERN PetscErrorCode MatISSetMPIXAIJPreallocation_Private(Mat,Mat,PetscBool);
31: #endif