That's right. We need to change all the examples. Matt On Jan 28, 2014 10:25 PM, "Jed Brown" <[email protected]> wrote:
> Matthew Knepley <[email protected]> writes: > > > On Tue, Jan 28, 2014 at 9:41 PM, Jed Brown <[email protected]> wrote: > > > >> Matthew Knepley <[email protected]> writes: > >> > In ex62: > >> > > >> > if (user.runType == RUN_FULL) { > >> > PetscViewer viewer; > >> > Vec uLocal; > >> > const char *name; > >> > > >> > ierr = PetscViewerCreate(PETSC_COMM_WORLD, &viewer);CHKERRQ(ierr); > >> > ierr = PetscViewerSetType(viewer, PETSCVIEWERVTK);CHKERRQ(ierr); > >> > ierr = PetscViewerSetFormat(viewer, > >> > PETSC_VIEWER_ASCII_VTK);CHKERRQ(ierr); > >> > ierr = PetscViewerFileSetName(viewer, > "ex62_sol.vtk");CHKERRQ(ierr); > >> > >> Please don't do this. Just set the type to PETSCVIEWERVTK, set the file > >> name to some *.vtu; the VTK viewer will infer output format from > >> extension and write the VTU XML format with binary-appended data in a > >> fairly fast and memory-scalable way. Then > >> > >> VecView(u,viewer); > > > > > > I think Jed is wrong here. You need to be using local vectors since > > they have BC and constraints in them. Please explain how your VTU > > format will magically put them in. > > We made this work when I threw a temper tantrum while we were writing TS > ex11.c (late 2012). > > PetscErrorCode VecView_Plex(Vec v, PetscViewer viewer) > { > DM dm; > PetscBool isvtk; > PetscErrorCode ierr; > > PetscFunctionBegin; > ierr = VecGetDM(v, &dm);CHKERRQ(ierr); > if (!dm) SETERRQ(PetscObjectComm((PetscObject)v), PETSC_ERR_ARG_WRONG, > "Vector not generated from a DM"); > ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERVTK, > &isvtk);CHKERRQ(ierr); > if (isvtk) { > Vec locv; > const char *name; > > ierr = DMGetLocalVector(dm, &locv);CHKERRQ(ierr); > ierr = PetscObjectGetName((PetscObject) v, &name);CHKERRQ(ierr); > ierr = PetscObjectSetName((PetscObject) locv, name);CHKERRQ(ierr); > ierr = DMGlobalToLocalBegin(dm, v, INSERT_VALUES, locv);CHKERRQ(ierr); > ierr = DMGlobalToLocalEnd(dm, v, INSERT_VALUES, locv);CHKERRQ(ierr); > ierr = VecView_Plex_Local(locv, viewer);CHKERRQ(ierr); > ierr = DMRestoreLocalVector(dm, &locv);CHKERRQ(ierr); >
