xref: /petsc/src/mat/impls/dense/mpi/mmdense.c (revision 0500aece852c5d5e89681225b84bddfc7009e089)
1 #ifndef lint
2 static char vcid[] = "$Id: mmaij.c,v 1.20 1995/09/30 19:28:49 bsmith Exp $";
3 #endif
4 
5 
6 /*
7    Support for the parallel dense matrix vector multiply
8 */
9 #include "mpidense.h"
10 #include "vec/vecimpl.h"
11 
12 int MatSetUpMultiply_MPIDense(Mat mat)
13 {
14   Mat_MPIDense *mdn = (Mat_MPIDense *) mat->data;
15   int          ierr;
16   IS           tofrom;
17   Vec          gvec;
18 
19   /* Create local vector that is used to scatter into */
20   ierr = VecCreateSeq(MPI_COMM_SELF,mdn->N,&mdn->lvec); CHKERRQ(ierr);
21 
22   /* Create temporary index set for building scatter gather */
23   ierr = ISCreateStrideSeq(MPI_COMM_SELF,mdn->N,0,1,&tofrom); CHKERRQ(ierr);
24 
25   /* Create temporary global vector to generate scatter context */
26   ierr = VecCreateMPI(mat->comm,mdn->n,mdn->N,&gvec); CHKERRQ(ierr);
27 
28   /* Generate the scatter context */
29   ierr = VecScatterCreate(gvec,tofrom,mdn->lvec,tofrom,&mdn->Mvctx); CHKERRQ(ierr);
30   PLogObjectParent(mat,mdn->Mvctx);
31   PLogObjectParent(mat,mdn->lvec);
32   PLogObjectParent(mat,tofrom);
33   ierr = ISDestroy(tofrom); CHKERRQ(ierr);
34   ierr = VecDestroy(gvec);
35   return 0;
36 }
37 
38 
39 
40