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