[petsc-dev] getting data out of a PetscFE simulation

Jed Brown jed at jedbrown.org
Tue Jan 28 22:24:57 CST 2014


Matthew Knepley <knepley at gmail.com> writes:

> On Tue, Jan 28, 2014 at 9:41 PM, Jed Brown <jed at jedbrown.org> wrote:
>
>> Matthew Knepley <knepley at gmail.com> 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);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20140128/bdfaa6f8/attachment.sig>


More information about the petsc-dev mailing list