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