Yes, the output of VecView is still 0 on WSL.
________________________________ From: Satish Balay <[email protected]> Sent: Tuesday, April 10, 2018 2:25 To: Songtao Chu Cc: petsc-users Subject: Re: [petsc-users] How to access Vector data properly Does my corrected code also print wrong info on WSL? Satish On Mon, 9 Apr 2018, Songtao Chu wrote: > Thank you for your correction. > I rebuilt the code under Linux, the bug disappeared. It seems this is a bug > of WSL. > > ________________________________ > From: Satish Balay <[email protected]> > Sent: Tuesday, April 10, 2018 0:20 > To: Songtao Chu > Cc: Matthew Knepley; [email protected] > Subject: Re: [petsc-users] How to access Vector data properly > > On Mon, 9 Apr 2018, Songtao Chu wrote: > > > static char help[] = "\n\n"; > > #include <petscdm.h> > > #include <petscdmda.h> > > > > > > int main(int argc,char **argv) > > { > > PetscMPIInt rank; > > PetscErrorCode ierr; > > Vec global,local,natural; > > DM da; > > PetscReal *val; > > PetscInt i,x,xm; > > > > > > ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; > > ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); > > > > ierr = > > DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,5,1,1,NULL,&da);CHKERRQ(ierr); > > ierr = DMSetUp(da);CHKERRQ(ierr); > > ierr = DMCreateGlobalVector(da,&global);CHKERRQ(ierr); > > > > ierr = DMDAGetCorners(da,&x,NULL,NULL,&xm,NULL,NULL);CHKERRQ(ierr); > > ierr = DMDAVecGetArray(da, global, &val);CHKERRQ(ierr); > > ierr = PetscSynchronizedPrintf(PETSC_COMM_SELF, "Rank=%d\n", > > rank);CHKERRQ(ierr); > > Shouldn't this call be removed? Nothing of substance is printed here. > > > for (i = x; i < x + xm; ++i) { > > val[i] = i; > > } > > ierr = DMDAVecRestoreArray(da, global, &val);CHKERRQ(ierr); > > > > VecView(global,PETSC_VIEWER_STDOUT_WORLD); > > > > ierr = DMDAGetCorners(da,&x,NULL,NULL,&xm,NULL,NULL);CHKERRQ(ierr); > > ierr = DMDAVecGetArray(da, global, &val);CHKERRQ(ierr); > > ierr = PetscSynchronizedPrintf(PETSC_COMM_SELF, "Rank=%d\n", > > rank);CHKERRQ(ierr); > > Shouldn't this be on PETSC_COMM_WORLD? > > > for (i = x; i < x + xm; ++i) { > > ierr = PetscSynchronizedPrintf(PETSC_COMM_SELF, "%4.f ", > > val[i]);CHKERRQ(ierr); > > Again PETSC_COMM_WORLD? > > > > } > > ierr = DMDAVecRestoreArray(da, global, &val);CHKERRQ(ierr); > > PetscSynchronizedFlush(PETSC_COMM_SELF, PETSC_STDOUT); > > > > ierr = PetscFinalize(); > > return ierr; > > } > > Attaching the fixed code. > > Satish > ------- > balay@asterix /home/balay/download-pine > $ ./ex1 > Vec Object: 1 MPI processes > type: seq > 0. > 1. > 2. > 3. > 4. > Rank=0 > 0 1 2 3 4 > balay@asterix /home/balay/download-pine > $ mpiexec -n 2 ./ex1 > Vec Object: 2 MPI processes > type: mpi > Process [0] > 0. > 1. > 2. > Process [1] > 3. > 4. > Rank=0 > 0 1 2 > Rank=1 > 3 4 > balay@asterix /home/balay/download-pine > $ mpiexec -n 3 ./ex1 > Vec Object: 3 MPI processes > type: mpi > Process [0] > 0. > 1. > Process [1] > 2. > 3. > Process [2] > 4. > Rank=0 > 0 1 > Rank=1 > 2 3 > Rank=2 > 4 > balay@asterix /home/balay/download-pine > $ >
