Actual source code: matisimpl.h
1: #ifndef PETSC_MATISIMPL_H
2: #define PETSC_MATISIMPL_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: PetscObjectState lnnzstate; /* nonzero state of local matrix */
26: PetscBool keepassembled; /* store assembled form if needed */
27: Mat assembledA; /* assembled operator */
28: Mat dA; /* For MatGetDiagonalBlock_IS */
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;
36: struct _MatISLocalFields {
37: PetscInt nr, nc;
38: IS *rf, *cf;
39: };
40: typedef struct _MatISLocalFields *MatISLocalFields;
42: struct _MatISPtAP {
43: PetscReal fill;
44: IS cis0, cis1, ris0, ris1;
45: Mat *lP;
46: };
47: typedef struct _MatISPtAP *MatISPtAP;
49: PETSC_EXTERN PetscErrorCode MatISSetMPIXAIJPreallocation_Private(Mat, Mat, PetscBool);
50: #endif // PETSC_MATISIMPL_H