xref: /petsc/src/mat/impls/dense/mpi/mmdense.c (revision d9f96c7ca71afc96fd7309d95e12b2b98fa1305e)
10500aeceSBarry Smith #ifndef lint
2*d9f96c7cSLois Curfman McInnes static char vcid[] = "$Id: mmdense.c,v 1.3 1995/10/23 22:02:53 curfman Exp curfman $";
30500aeceSBarry Smith #endif
40500aeceSBarry Smith 
50500aeceSBarry Smith /*
60500aeceSBarry Smith    Support for the parallel dense matrix vector multiply
70500aeceSBarry Smith */
80500aeceSBarry Smith #include "mpidense.h"
90500aeceSBarry Smith #include "vec/vecimpl.h"
100500aeceSBarry Smith 
110500aeceSBarry Smith int MatSetUpMultiply_MPIDense(Mat mat)
120500aeceSBarry Smith {
130500aeceSBarry Smith   Mat_MPIDense *mdn = (Mat_MPIDense *) mat->data;
140500aeceSBarry Smith   int          ierr;
15*d9f96c7cSLois Curfman McInnes   IS           tofrom;
160500aeceSBarry Smith   Vec          gvec;
170500aeceSBarry Smith 
180500aeceSBarry Smith   /* Create local vector that is used to scatter into */
190500aeceSBarry Smith   ierr = VecCreateSeq(MPI_COMM_SELF,mdn->N,&mdn->lvec); CHKERRQ(ierr);
200500aeceSBarry Smith 
210500aeceSBarry Smith   /* Create temporary index set for building scatter gather */
22*d9f96c7cSLois Curfman McInnes   ierr = ISCreateStrideSeq(MPI_COMM_SELF,mdn->N,0,1,&tofrom); CHKERRQ(ierr);
230500aeceSBarry Smith 
240500aeceSBarry Smith   /* Create temporary global vector to generate scatter context */
25e19c7942SLois Curfman McInnes   ierr = VecCreateMPI(mat->comm,PETSC_DECIDE,mdn->N,&gvec); CHKERRQ(ierr);
26e19c7942SLois Curfman McInnes 
270500aeceSBarry Smith   /* Generate the scatter context */
28*d9f96c7cSLois Curfman McInnes   ierr = VecScatterCreate(gvec,tofrom,mdn->lvec,tofrom,&mdn->Mvctx); CHKERRQ(ierr);
290500aeceSBarry Smith   PLogObjectParent(mat,mdn->Mvctx);
300500aeceSBarry Smith   PLogObjectParent(mat,mdn->lvec);
31*d9f96c7cSLois Curfman McInnes   PLogObjectParent(mat,tofrom);
32*d9f96c7cSLois Curfman McInnes   PLogObjectParent(mat,gvec);
33e19c7942SLois Curfman McInnes 
34*d9f96c7cSLois Curfman McInnes   ierr = ISDestroy(tofrom); CHKERRQ(ierr);
35*d9f96c7cSLois Curfman McInnes   ierr = VecDestroy(gvec); CHKERRQ(ierr);
360500aeceSBarry Smith   return 0;
370500aeceSBarry Smith }
380500aeceSBarry Smith 
390500aeceSBarry Smith 
400500aeceSBarry Smith 
41