xref: /petsc/src/mat/impls/sell/mpi/mpisell.h (revision d4002b989b2d6051384fadc0d4465c98dea57b78)
1*d4002b98SHong Zhang 
2*d4002b98SHong Zhang #if !defined(__MPISELL_H)
3*d4002b98SHong Zhang #define __MPISELL_H
4*d4002b98SHong Zhang #endif
5*d4002b98SHong Zhang #include <../src/mat/impls/sell/seq/sell.h>
6*d4002b98SHong Zhang 
7*d4002b98SHong Zhang typedef struct {
8*d4002b98SHong Zhang   Mat A,B;                             /* local submatrices: A (diag part),
9*d4002b98SHong Zhang                                            B (off-diag part) */
10*d4002b98SHong Zhang   PetscMPIInt size;                     /* size of communicator */
11*d4002b98SHong Zhang   PetscMPIInt rank;                     /* rank of proc in communicator */
12*d4002b98SHong Zhang 
13*d4002b98SHong Zhang   /* The following variables are used for matrix assembly */
14*d4002b98SHong Zhang   PetscBool   donotstash;               /* PETSC_TRUE if off processor entries dropped */
15*d4002b98SHong Zhang   MPI_Request *send_waits;              /* array of send requests */
16*d4002b98SHong Zhang   MPI_Request *recv_waits;              /* array of receive requests */
17*d4002b98SHong Zhang   PetscInt    nsends,nrecvs;           /* numbers of sends and receives */
18*d4002b98SHong Zhang   PetscScalar *svalues,*rvalues;       /* sending and receiving data */
19*d4002b98SHong Zhang   PetscInt    rmax;                     /* maximum message length */
20*d4002b98SHong Zhang #if defined(PETSC_USE_CTABLE)
21*d4002b98SHong Zhang   PetscTable colmap;
22*d4002b98SHong Zhang #else
23*d4002b98SHong Zhang   PetscInt *colmap;                     /* local col number of off-diag col */
24*d4002b98SHong Zhang #endif
25*d4002b98SHong Zhang   PetscInt *garray;                     /* global index of all off-processor columns */
26*d4002b98SHong Zhang 
27*d4002b98SHong Zhang   /* The following variables are used for matrix-vector products */
28*d4002b98SHong Zhang   Vec        lvec;                 /* local vector */
29*d4002b98SHong Zhang   Vec        diag;
30*d4002b98SHong Zhang   VecScatter Mvctx;                /* scatter context for vector */
31*d4002b98SHong Zhang   PetscBool  roworiented;          /* if true, row-oriented input, default true */
32*d4002b98SHong Zhang 
33*d4002b98SHong Zhang   /* The following variables are for MatGetRow() */
34*d4002b98SHong Zhang   PetscInt    *rowindices;         /* column indices for row */
35*d4002b98SHong Zhang   PetscScalar *rowvalues;          /* nonzero values in row */
36*d4002b98SHong Zhang   PetscBool   getrowactive;        /* indicates MatGetRow(), not restored */
37*d4002b98SHong Zhang 
38*d4002b98SHong Zhang   /* Used by MatDistribute_MPISELL() to allow reuse of previous matrix allocation  and nonzero pattern */
39*d4002b98SHong Zhang   PetscInt *ld;                    /* number of entries per row left of diagona block */
40*d4002b98SHong Zhang } Mat_MPISELL;
41*d4002b98SHong Zhang 
42*d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);
43*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatSetUpMultiply_MPISELL(Mat);
44*d4002b98SHong Zhang 
45*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDisAssemble_MPISELL(Mat);
46*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDuplicate_MPISELL(Mat,MatDuplicateOption,Mat*);
47*d4002b98SHong Zhang 
48*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDestroy_MPISELL_PtAP(Mat);
49*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDestroy_MPISELL(Mat);
50*d4002b98SHong Zhang 
51*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatSetValues_MPISELL(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar [],InsertMode);
52*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDestroy_MPISELL_MatMatMult(Mat);
53*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatSetOption_MPISELL(Mat,MatOption,PetscBool);
54*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatGetSeqNonzeroStructure_MPISELL(Mat,Mat*);
55*d4002b98SHong Zhang 
56*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatSetFromOptions_MPISELL(PetscOptionItems*,Mat);
57*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatMPISELLSetPreallocation_MPISELL(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[]);
58*d4002b98SHong Zhang 
59*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatConvert_MPISELL_MPIAIJ(Mat,MatType,MatReuse,Mat*);
60*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatConvert_MPIAIJ_MPISELL(Mat,MatType,MatReuse,Mat*);
61*d4002b98SHong Zhang 
62*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatSOR_MPISELL(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec);
63*d4002b98SHong Zhang 
64*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatCreateColmap_MPISELL_Private(Mat);
65*d4002b98SHong Zhang PETSC_INTERN PetscErrorCode MatDiagonalScaleLocal_MPISELL(Mat,Vec);
66