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