<div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Sep 12, 2018 at 9:56 PM Ellen M. Price <<a href="mailto:ellen.price@cfa.harvard.edu">ellen.price@cfa.harvard.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi there,<br>
<br>
I'm running a complex PETSc program that outputs a LOT of data to an<br>
HDF5 file. As such, I'd like to separate my output into groups to make<br>
it easier to traverse in the analysis phase.<br>
<br>
I'm either confused about the nomenclature or the usage of<br>
PetscViewerHDF5PushGroup/PetscViewerHDF5PopGroup. From a quick skim of<br>
the source, it looks like the PushGroup function builds up a linked list<br>
of group names? Also, just the name suggests that there should be a<br>
"stack" of group names stored somewhere.<br>
<br>
So I would expect, after calling PetscViewerHDF5PushGroup twice, say,<br>
<br>
PetscViewerHDF5PushGroup(h5viewer, "group1");<br>
PetscViewerHDF5PushGroup(h5viewer, "group2");<br>
VecView(x, h5viewer);<br>
<br>
that I would get my vector output in /group1/group2/x. This is obviously<br>
not what's actually happening. If I run<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-current/src/vec/vec/examples/tutorials/ex19.c" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/src/vec/vec/examples/tutorials/ex19.c</a>,<br>
for example, I get, from h5dump:<br>
<br>
HDF5 "ex19.h5" {<br>
FILE_CONTENTS {<br>
 group      /<br>
 dataset    /TestVec<br>
 group      /testBlockSize<br>
 dataset    /testBlockSize/TestVec2<br>
 group      /testTimestep<br>
 dataset    /testTimestep/TestVec2<br>
 }<br>
}<br>
<br>
even though multiple groups are "pushed" in sequence.<br>
<br>
My question is, have I misunderstood the connotation of pushing/popping<br>
groups? How can I properly create a group and then a subgroup? Every<br>
attempt at doing this:<br>
<br>
PetscViewerHDF5PushGroup(h5viewer, "/group1");<br>
PetscViewerHDF5PushGroup(h5viewer, "/group1/group2");<br></blockquote><div><br></div><div>This form works. Here is an example of me doing it:</div><div><br></div><div>  <a href="https://bitbucket.org/petsc/petsc/src/624d5184b94bda975877076c18f8637740f06a35/src/dm/impls/plex/plexhdf5.c#lines-430">https://bitbucket.org/petsc/petsc/src/624d5184b94bda975877076c18f8637740f06a35/src/dm/impls/plex/plexhdf5.c#lines-430</a><br></div><div><br></div><div>Note that PushGroup just points us somewhere. If you want that 'directory' created, you have to do something like</div><div><br></div><div>  <a href="https://bitbucket.org/petsc/petsc/src/624d5184b94bda975877076c18f8637740f06a35/src/dm/impls/plex/plexhdf5.c#lines-380">https://bitbucket.org/petsc/petsc/src/624d5184b94bda975877076c18f8637740f06a35/src/dm/impls/plex/plexhdf5.c#lines-380</a></div><div><br></div><div>HDF5 is terrible, its just that everything else is worse.</div><div><br></div><div>Thanks,</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
VecView(x, h5viewer);<br>
<br>
leads to a long string of HDF5 library errors, like:<br>
<br>
HDF5-DIAG: Error detected in HDF5 (1.8.16) MPI-process 0:<br>
  #000: ../../../src/H5L.c line 824 in H5Lexists(): unable to get link info<br>
    major: Symbol table<br>
    minor: Object not found<br>
  #001: ../../../src/H5L.c line 2765 in H5L_exists(): path doesn't exist<br>
    major: Symbol table<br>
    minor: Object already exists<br>
  #002: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal<br>
path traversal failed<br>
    major: Symbol table<br>
    minor: Object not found<br>
  #003: ../../../src/H5Gtraverse.c line 755 in H5G_traverse_real():<br>
component not found<br>
    major: Symbol table<br>
    minor: Object not found<br>
HDF5-DIAG: Error detected in HDF5 (1.8.16) MPI-process 0:<br>
  #000: ../../../src/H5G.c line 314 in H5Gcreate2(): unable to create group<br>
    major: Symbol table<br>
    minor: Unable to initialize object<br>
  #001: ../../../src/H5Gint.c line 194 in H5G__create_named(): unable to<br>
create and link to group<br>
    major: Symbol table<br>
    minor: Unable to initialize object<br>
  #002: ../../../src/H5L.c line 1638 in H5L_link_object(): unable to<br>
create new link to object<br>
    major: Links<br>
    minor: Unable to initialize object<br>
  #003: ../../../src/H5L.c line 1882 in H5L_create_real(): can't insert link<br>
    major: Symbol table<br>
    minor: Unable to insert object<br>
  #004: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal<br>
path traversal failed<br>
    major: Symbol table<br>
    minor: Object not found<br>
  #005: ../../../src/H5Gtraverse.c line 755 in H5G_traverse_real():<br>
component not found<br>
    major: Symbol table<br>
    minor: Object not found<br>
<br>
Thanks in advance,<br>
Ellen Price<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div></div></div>