18965ea79SLois Curfman McInnes 2*7c4f633dSBarry Smith #include "../src/mat/impls/dense/seq/dense.h" 38965ea79SLois Curfman McInnes 4052cd425SLois Curfman McInnes /* Data stuctures for basic parallel dense matrix */ 5052cd425SLois Curfman McInnes 68965ea79SLois Curfman McInnes typedef struct { 713f74950SBarry Smith PetscInt nvec; /* this is the n size for the vector one multiplies with */ 8bad5519cSBarry Smith Mat A; /* local submatrix */ 913f74950SBarry Smith PetscMPIInt size; /* size of communicator */ 1013f74950SBarry Smith PetscMPIInt rank; /* rank of proc in communicator */ 118965ea79SLois Curfman McInnes /* The following variables are used for matrix assembly */ 12273d9f13SBarry Smith PetscTruth donotstash; /* Flag indicationg if values should be stashed */ 138965ea79SLois Curfman McInnes MPI_Request *send_waits; /* array of send requests */ 148965ea79SLois Curfman McInnes MPI_Request *recv_waits; /* array of receive requests */ 1513f74950SBarry Smith PetscInt nsends,nrecvs; /* numbers of sends and receives */ 16ea709b57SSatish Balay PetscScalar *svalues,*rvalues; /* sending and receiving data */ 1713f74950SBarry Smith PetscInt rmax; /* maximum message length */ 188965ea79SLois Curfman McInnes 198965ea79SLois Curfman McInnes /* The following variables are used for matrix-vector products */ 208965ea79SLois Curfman McInnes 218965ea79SLois Curfman McInnes Vec lvec; /* local vector */ 22bad5519cSBarry Smith VecScatter Mvctx; /* scatter context for vector */ 23052cd425SLois Curfman McInnes 24273d9f13SBarry Smith PetscTruth roworiented; /* if true, row oriented input (default) */ 258965ea79SLois Curfman McInnes } Mat_MPIDense; 2697304618SKris Buschelman 27a313700dSBarry Smith EXTERN PetscErrorCode MatLoad_MPIDense(PetscViewer, const MatType,Mat*); 28dfbe8321SBarry Smith EXTERN PetscErrorCode MatSetUpMultiply_MPIDense(Mat); 2913f74950SBarry Smith EXTERN PetscErrorCode MatGetSubMatrices_MPIDense(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat *[]); 306e4ee0c6SHong Zhang EXTERN PetscErrorCode MatEqual_MPIDense(Mat,Mat,PetscTruth*); 314ae313f4SHong Zhang EXTERN PetscErrorCode MatMatMultSymbolic_MPIDense_MPIDense(Mat,Mat,PetscReal,Mat*); 324ae313f4SHong Zhang EXTERN PetscErrorCode MatMatMult_MPIAIJ_MPIDense(Mat,Mat,MatReuse,PetscReal,Mat*); 334ae313f4SHong Zhang EXTERN PetscErrorCode MatMatMultSymbolic_MPIAIJ_MPIDense(Mat,Mat,PetscReal,Mat*); 344ae313f4SHong Zhang EXTERN PetscErrorCode MatMatMultNumeric_MPIAIJ_MPIDense(Mat,Mat,Mat); 3501b82886SBarry Smith 3601b82886SBarry Smith #if defined(PETSC_HAVE_PLAPACK) 3701b82886SBarry Smith EXTERN_C_BEGIN 3801b82886SBarry Smith #include "PLA.h" 3901b82886SBarry Smith EXTERN_C_END 4001b82886SBarry Smith 4101b82886SBarry Smith typedef struct { 4201b82886SBarry Smith PLA_Obj A,pivots; 4301b82886SBarry Smith PLA_Template templ; 4401b82886SBarry Smith MPI_Datatype datatype; 45eae6fb2eSBarry Smith PetscInt nb,rstart; 4601b82886SBarry Smith VecScatter ctx; 4701b82886SBarry Smith IS is_pla,is_petsc; 4801b82886SBarry Smith PetscTruth pla_solved; 49ab235cb6SHong Zhang /* following parameters might not be useful in new-solvers */ 50ab235cb6SHong Zhang MPI_Comm comm_2d; 51ab235cb6SHong Zhang MatStructure mstruct; 52ab235cb6SHong Zhang PetscMPIInt nprows,npcols; 53ab235cb6SHong Zhang PetscInt nb_alg,ierror; 54ab235cb6SHong Zhang PetscTruth CleanUpPlapack; 556c995c7dSHong Zhang 566c995c7dSHong Zhang PetscMPIInt Plapack_nprows,Plapack_npcols,Plapack_ierror,Plapack_nb_alg; 576c995c7dSHong Zhang MPI_Comm Plapack_comm_2d; 5801b82886SBarry Smith } Mat_Plapack; 5901b82886SBarry Smith 606c995c7dSHong Zhang 6101b82886SBarry Smith #endif 62