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