xref: /petsc/src/mat/impls/dense/mpi/mpidense.h (revision 052cd4255ec3f7ee9bedc246b8da08d832e6dd78)
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