Actual source code: matisimpl.h
1: #pragma once
3: #include <petscsf.h>
4: #include <petsc/private/matimpl.h>
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: 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);