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);
pgptk3SR82yhn.pgp
Description: PGP signature
