Actual source code: matis.h
4: #include <petscsf.h>
5: #include <petsc/private/matimpl.h>
7: typedef struct {
8: Mat A; /* the local matrix */
9: VecScatter cctx; /* column scatter */
10: VecScatter rctx; /* row scatter */
11: Vec x,y; /* work space for matrix vector product */
12: Vec counter; /* counter vector */
13: PetscBool pure_neumann;
14: PetscSF sf,csf; /* SFs for rows and cols */
15: PetscInt *sf_rootdata,*sf_leafdata;
16: PetscInt *csf_rootdata,*csf_leafdata;
17: IS getsub_ris,getsub_cis; /* row and column ISs for MatCreateSubMatrix and MAT_REUSE_MATRIX */
18: PetscBool islocalref; /* is a reference to a local submatrix? */
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 */
24: /* Support for negative or repeated entries in l2map
25: These maps can be different than the ones passed in by the user via
26: MatSetLocalToGlobalMapping */
27: ISLocalToGlobalMapping rmapping, cmapping;
28: } Mat_IS;
30: struct _MatISLocalFields {
31: PetscInt nr,nc;
32: IS *rf,*cf;
33: };
34: typedef struct _MatISLocalFields *MatISLocalFields;
36: struct _MatISPtAP {
37: PetscReal fill;
38: IS cis0,cis1,ris0,ris1;
39: Mat *lP;
40: };
41: typedef struct _MatISPtAP *MatISPtAP;
43: PETSC_EXTERN PetscErrorCode MatISSetMPIXAIJPreallocation_Private(Mat,Mat,PetscBool);
44: #endif