1 2 #include <../src/mat/impls/dense/seq/dense.h> 3 4 /* Data stuctures for basic parallel dense matrix */ 5 6 typedef struct { 7 PetscInt nvec; /* this is the n size for the vector one multiplies with */ 8 Mat A; /* local submatrix */ 9 PetscMPIInt size; /* size of communicator */ 10 PetscMPIInt rank; /* rank of proc in communicator */ 11 /* The following variables are used for matrix assembly */ 12 PetscBool donotstash; /* Flag indicationg if values should be stashed */ 13 MPI_Request *send_waits; /* array of send requests */ 14 MPI_Request *recv_waits; /* array of receive requests */ 15 PetscInt nsends,nrecvs; /* numbers of sends and receives */ 16 PetscScalar *svalues,*rvalues; /* sending and receiving data */ 17 PetscInt rmax; /* maximum message length */ 18 19 /* The following variables are used for matrix-vector products */ 20 21 Vec lvec; /* local vector */ 22 VecScatter Mvctx; /* scatter context for vector */ 23 24 PetscBool roworiented; /* if true, row oriented input (default) */ 25 } Mat_MPIDense; 26 27 extern PetscErrorCode MatLoad_MPIDense(Mat,PetscViewer); 28 extern PetscErrorCode MatSetUpMultiply_MPIDense(Mat); 29 extern PetscErrorCode MatGetSubMatrices_MPIDense(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat *[]); 30 extern PetscErrorCode MatEqual_MPIDense(Mat,Mat,PetscBool*); 31 extern PetscErrorCode MatMatMultSymbolic_MPIDense_MPIDense(Mat,Mat,PetscReal,Mat*); 32 extern PetscErrorCode MatMatMult_MPIAIJ_MPIDense(Mat,Mat,MatReuse,PetscReal,Mat*); 33 extern PetscErrorCode MatMatMultSymbolic_MPIAIJ_MPIDense(Mat,Mat,PetscReal,Mat*); 34 extern PetscErrorCode MatMatMultNumeric_MPIAIJ_MPIDense(Mat,Mat,Mat); 35 extern PetscErrorCode MatGetFactor_mpidense_petsc(Mat,MatFactorType,Mat*); 36 37 38