1*052cd425SLois Curfman McInnes /* $Id: mpidense.h,v 1.4 1995/11/03 02:49:37 bsmith Exp curfman $ */ 28965ea79SLois Curfman McInnes 38965ea79SLois Curfman McInnes #include "dense.h" 48965ea79SLois Curfman McInnes 5*052cd425SLois Curfman McInnes /* Data stuctures for basic parallel dense matrix */ 6*052cd425SLois Curfman McInnes 7*052cd425SLois Curfman McInnes /* Structure to hold the information for factorization of a dense matrix */ 8*052cd425SLois Curfman McInnes typedef struct { 9*052cd425SLois Curfman McInnes int nlnr; /* number of local rows downstream */ 10*052cd425SLois Curfman McInnes int nbr, pnbr; /* Down and upstream neighbors */ 11*052cd425SLois Curfman McInnes int tag; 12*052cd425SLois Curfman McInnes int k; /* Blocking factor (unused as yet) */ 13*052cd425SLois Curfman McInnes int k2; /* Blocking factor for solves */ 14*052cd425SLois Curfman McInnes int use_bcast; 15*052cd425SLois Curfman McInnes double *temp; 16*052cd425SLois Curfman McInnes } FactCtx; 17*052cd425SLois Curfman McInnes 18*052cd425SLois Curfman McInnes #define PIPEPHASE (ctx->phase == 0) 19*052cd425SLois Curfman McInnes /* This stucture is used in the pipe send/recv routines */ 20*052cd425SLois Curfman McInnes typedef struct { 21*052cd425SLois Curfman McInnes int nbr, pnbr; 22*052cd425SLois Curfman McInnes int nlnr, nlptr, *nlrows; 23*052cd425SLois Curfman McInnes int currow; 24*052cd425SLois Curfman McInnes int up; /* Are we moving up or down in row number? */ 25*052cd425SLois Curfman McInnes int tag; 26*052cd425SLois Curfman McInnes int phase; 27*052cd425SLois Curfman McInnes int use_bcast; 28*052cd425SLois Curfman McInnes int nsend; 29*052cd425SLois Curfman McInnes int nrecv; 30*052cd425SLois Curfman McInnes } PSPPipe; 3167e560aaSBarry Smith 328965ea79SLois Curfman McInnes typedef struct { 338965ea79SLois Curfman McInnes int *rowners, *cowners; /* ranges owned by each processor */ 348965ea79SLois Curfman McInnes int m, n; /* local rows and columns */ 358965ea79SLois Curfman McInnes int M, N; /* global rows and columns */ 368965ea79SLois Curfman McInnes int rstart, rend; /* starting and ending owned rows */ 37bad5519cSBarry Smith Mat A; /* local submatrix */ 388965ea79SLois Curfman McInnes int size; /* size of communicator */ 398965ea79SLois Curfman McInnes int rank; /* rank of proc in communicator */ 408965ea79SLois Curfman McInnes 418965ea79SLois Curfman McInnes /* The following variables are used for matrix assembly */ 428965ea79SLois Curfman McInnes 438965ea79SLois Curfman McInnes int assembled; /* MatAssemble has been called */ 448965ea79SLois Curfman McInnes InsertMode insertmode; /* mode for MatSetValues */ 458965ea79SLois Curfman McInnes Stash stash; /* stash for non-local elements */ 468965ea79SLois Curfman McInnes MPI_Request *send_waits; /* array of send requests */ 478965ea79SLois Curfman McInnes MPI_Request *recv_waits; /* array of receive requests */ 488965ea79SLois Curfman McInnes int nsends, nrecvs; /* numbers of sends and receives */ 498965ea79SLois Curfman McInnes Scalar *svalues, *rvalues; /* sending and receiving data */ 508965ea79SLois Curfman McInnes int rmax; /* maximum message length */ 518965ea79SLois Curfman McInnes 528965ea79SLois Curfman McInnes /* The following variables are used for matrix-vector products */ 538965ea79SLois Curfman McInnes 548965ea79SLois Curfman McInnes Vec lvec; /* local vector */ 55bad5519cSBarry Smith VecScatter Mvctx; /* scatter context for vector */ 56*052cd425SLois Curfman McInnes 57*052cd425SLois Curfman McInnes FactCtx *factor; /* factorization context */ 588965ea79SLois Curfman McInnes } Mat_MPIDense; 59