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