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