[petsc-users] object name overwritten in VecView
Matthew Knepley
knepley at gmail.com
Wed Feb 28 05:58:08 CST 2018
On Wed, Feb 28, 2018 at 12:39 AM, Smith, Barry F. <bsmith at mcs.anl.gov>
wrote:
>
> Matt,
>
> I have confirmed this is reproducible and a bug. The problem arises
> because
>
> frame #0: 0x000000010140625a libpetsc.3.8.dylib`
> PetscViewerVTKAddField_VTK(viewer=0x00007fe66760c750,
> dm=0x00007fe668810820, PetscViewerVTKWriteFunction=(libpetsc.3.8.dylib`DMPlexVTKWriteAll
> at plexvtk.c:633), fieldtype=PETSC_VTK_POINT_FIELD,
> vec=0x00007fe66880ee20) at vtkv.c:140
> frame #1: 0x0000000101404e6e libpetsc.3.8.dylib`
> PetscViewerVTKAddField(viewer=0x00007fe66760c750, dm=0x00007fe668810820,
> PetscViewerVTKWriteFunction=(libpetsc.3.8.dylib`DMPlexVTKWriteAll at
> plexvtk.c:633), fieldtype=PETSC_VTK_POINT_FIELD, vec=0x00007fe66880ee20)
> at vtkv.c:46
> frame #2: 0x0000000101e0b7c3 libpetsc.3.8.dylib`VecView_Plex_Local(v=0x00007fe66880ee20,
> viewer=0x00007fe66760c750) at plex.c:301
> frame #3: 0x0000000101e0ead7 libpetsc.3.8.dylib`VecView_Plex(v=0x00007fe66880e820,
> viewer=0x00007fe66760c750) at plex.c:348
>
> keeps a linked list of vectors that are to be viewed and the vectors are
> the same Vec because they are obtained with DMGetLocalVector().
>
> The safest fix is to have PetscViewerVTKAddField_VTK() do a VecDuplicate()
> on the vector passed in and store that in the linked list instead of just
> storing a pointer to the passed in vector (which might and can be
> overwritten before all the linked vectors are actually stored).
>
Danyang,
Barry is right, and the bug can be fixed the way he says. However, this
points out why VTK is bad format. I think a better choice is
to use HDF5 and XDMF. For example, in my code now I always use
DMVIewFromOptions(dm, NULL, "-dm_view");
and then later (perhaps several times)
VecViewFromOptions(u, NULL, "-u_vec_view")
VecViewFromOptions(v, NULL, "-v_vec_view")
and then on the command line
-dm_view hdf5:test.h5 -u_vec_view hdf5:test.h5::append -v_vec_view
hdf5:test.h5::append
which produces a file
test.h5
Then I run
$PETSC_DIR/bin/petsc_gen_xdmf.py test.h5
which produces another file
test.xmf
This can be loaded by Paraview for visualization.
Thanks,
Matt
>
> Barry
>
>
>
> > On Feb 27, 2018, at 10:44 PM, Danyang Su <danyang.su at gmail.com> wrote:
> >
> > Hi All,
> >
> > How to set different object names when using multiple VecView? I try to
> use PetscObjectSetName with multiple output, but the object name is
> overwritten by the last one.
> >
> > As shown below, as well as the enclosed files as example, the vector
> name in sol.vtk is vec_v for both vector u and v.
> >
> > call PetscViewerCreate(PETSC_COMM_WORLD, viewer,
> ierr);CHKERRA(ierr)
> > call PetscViewerSetType(viewer, PETSCVIEWERVTK, ierr);CHKERRA(ierr)
> > call PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_VTK,
> ierr);CHKERRA(ierr)
> > call PetscViewerFileSetName(viewer, 'sol.vtk', ierr);CHKERRA(ierr)
> >
> > call PetscObjectSetName(u, 'vec_u', ierr);CHKERRA(ierr)
> > call VecView(u, viewer, ierr);CHKERRA(ierr)
> >
> > call PetscObjectSetName(v, 'vec_v', ierr);CHKERRA(ierr)
> > call VecView(v, viewer, ierr);CHKERRA(ierr)
> >
> > call PetscViewerDestroy(viewer, ierr);CHKERRA(ierr)
> >
> > call DMRestoreGlobalVector(dm, u, ierr);CHKERRA(ierr)
> > call DMRestoreGlobalVector(dm, v, ierr);CHKERRA(ierr)
> >
> > Thanks,
> >
> > Danyang
> >
> > <ex1f90.F90><makefile.txt><sol.vtk>
>
>
--
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
https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/~mk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180228/dcfacc3b/attachment.html>
More information about the petsc-users
mailing list