On Thu, Aug 25, 2016 at 1:59 PM, Mark Adams <mfad...@lbl.gov> wrote: > We have the subroutine below that scatters three vectors. We have used > this code on many machines and it works fine but on one machine data does > not get scattered correctly. The first scatter looks OK, but it looks like > the other two are missing data. > > Am I using this correctly? Should we use VecGetArray in here instead of > just using the pointer used for construction? Is there a race condition > here that I'm missing? > > Thanks, > Mark > > subroutine scatter_to_xgc(a_ts,a_XX,a_n1,a_apar,a_phi,ierr) > use petscts > use sml_module,only:sml_mype > use xgc_ts_module > implicit none > type(xgc_ts),intent(in)::a_ts > Vec,intent(in)::a_XX > real (kind=8),dimension(a_ts%nnode)::a_n1,a_apar,a_phi > PetscErrorCode,intent(out)::ierr > ! locals > PetscInt,parameter::ione=1 > PetscScalar,dimension(a_ts%nnode)::n1,apar,phi > Vec::xxvec(0:2) > > ! scatter solution back - n1 > n1 = a_n1 > call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode,n1, > xxvec(0),ierr);CHKERRQ(ierr) > call VecScatterBegin(a_ts%from_petsc(0),a_XX,xxvec(0),INSERT_ > VALUES,SCATTER_FORWARD,ierr) > > ! scatter solution back - apar > apar = a_apar > call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode, > apar,xxvec(1),ierr);CHKERRQ(ierr) > call VecScatterBegin(a_ts%from_petsc(1),a_XX,xxvec(1),INSERT_ > VALUES,SCATTER_FORWARD,ierr) > > ! scatter solution back - phi > phi = a_phi > call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode,phi, > xxvec(2),ierr);CHKERRQ(ierr) > call VecScatterBegin(a_ts%from_petsc(2),a_XX,xxvec(2),INSERT_ > VALUES,SCATTER_FORWARD,ierr) > > ! end > call VecScatterEnd( a_ts%from_petsc(0),a_XX,xxvec(0),INSERT_VALUES, > SCATTER_FORWARD,ierr) > a_n1 = n1 >
Why is the line above in here? Matt > call VecDestroy(xxvec(0),ierr) > > call VecScatterEnd( a_ts%from_petsc(1),a_XX,xxvec(1),INSERT_VALUES, > SCATTER_FORWARD,ierr) > a_apar = apar > call VecDestroy(xxvec(1),ierr) > > call VecScatterEnd( a_ts%from_petsc(2),a_XX,xxvec(2),INSERT_VALUES, > SCATTER_FORWARD,ierr) > a_phi = phi > call VecDestroy(xxvec(2),ierr) > > return > end subroutine scatter_to_xgc > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener