<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Mar 23, 2016 at 10:03 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Mar 23, 2016, at 7:35 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
><br>
> On Wed, Mar 23, 2016 at 2:28 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
>   Jed and Matt and anyone else who understands the HDF5 viewer<br>
><br>
>        No one has answered this. If I get no response  I am going to assume that PETSc requires HDF5 built with MPI and remove the #if defs in the code.<br>
><br>
> Are you sure that the Vec code fails when HDF5 is serial?<br>
<br>
</span>  How would I verify if the if the resulting hdf5 file is good or not?</blockquote><div><br></div><div>Save and load a parallel vector with a non-MPI HDF5?</div><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888"><br>
 Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> I don't know what happens when multiple<br>
> procs use H5Lexists() and friends. Maybe its transactional on the file. It does use<br>
><br>
>    PetscStackCallHDF5Return(plist_id,H5Pcreate,(H5P_DATASET_XFER));<br>
> #if defined(PETSC_HAVE_H5PSET_FAPL_MPIO)<br>
>   PetscStackCallHDF5(H5Pset_dxpl_mpio,(plist_id, H5FD_MPIO_COLLECTIVE));<br>
> #endif<br>
><br>
> If it does require MPI, then fine, take out the #ifdefs.<br>
><br>
>    Matt<br>
><br>
>   Barry<br>
><br>
> > On Mar 18, 2016, at 2:50 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
> ><br>
> ><br>
> >  I am confused about the usage of HDF5 from PETSc.<br>
> ><br>
> >   In hdf5.py<br>
> ><br>
> >  def configureLibrary(self):<br>
> >    if self.libraries.check(self.dlib, 'H5Pset_fapl_mpio'):<br>
> >      self.addDefine('HAVE_H5PSET_FAPL_MPIO', 1)<br>
> >    return<br>
> ><br>
> >  So PETSc does not require HDF5 to have been built using MPI (for example if it was built by someone else without MPI.)<br>
> ><br>
> >  In PetscErrorCode  PetscViewerFileSetName_HDF5(PetscViewer viewer, const char name[])<br>
> ><br>
> > #if defined(PETSC_HAVE_H5PSET_FAPL_MPIO)<br>
> >  PetscStackCallHDF5(H5Pset_fapl_mpio,(plist_id, PetscObjectComm((PetscObject)viewer), info));<br>
> > #endif<br>
> ><br>
> >  so it only sets collective IO if the symbol was found and hence HDF5 was built for MPI<br>
> ><br>
> >  But in places like  VecView_MPI_HDF5(Vec xin, PetscViewer viewer)<br>
> ><br>
> >   it uses MPI as if it was collective? Though it might not be because hdf5 could have been built without MPI<br>
> ><br>
> >  So if I build PETSc with a non-MPI hdf5 and yet use the hdf5 viewer in parallel; do the generated hdf5 files contain garbage?<br>
> ><br>
> >  It seems to me we need to have hdf5.py REQUIRE the existence of H5Pset_fapl_mpio?<br>
> ><br>
> >  Barry<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
><br>
><br>
><br>
><br>
> --<br>
> 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<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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></div>