Thanks. I found the bug. The routine VecLoad_HDF5_DA() did not use the group properly (though the regular VecLoad_HDF5() did). Please find attached a patch to apply to the petsc root directory to fix the problem. The fix is also in the branch barry/fix-vecload-group-handling This will also be fixed in our next patch release.
Thanks for reporting the problem. Barry
fix-vecload-group-handling.patch
Description: Binary data
> On Nov 14, 2014, at 2:09 AM, Håkon Strandenes <[email protected]> wrote: > > See attached file. > > The test is really simple. The HDF5 file contains two (equal) > datasets/vectors: > > - One dataset u in the root of the file "/" > - One dataset v in the group "/FIELDS" > > The example program tries to load two vectors, u and v, from the file. The > PetscViewerHDF5PushGroup is set to "/FIELDS" for both. It will first try to > load u, then v. > > If everything works, it SHOULD FAIL on loading u, since this vector is not > stored in the correct location in the HDF5 file. PETSc should search in > "/FIELDS" for this vector, not "/". It should however SUCCEED in loading "v", > since this is located correctly. > > In my latest version of PETSc from Git, this is inverted. The program SUCCEED > in loading u, and FAIL in loading v. Something is wrong... > > BTW: Is there an error in DM ex4? Is the vector u destroyed properly? > > Håkon > > > On 14. nov. 2014 05:19, Barry Smith wrote: >> >> Sorry no one answered this before, I had assumed someone who knew >> something about HDF5 would answer but instead looks like I have to. >> >> Could you please send a simple example code (and data file) that >> reproduces the problem. I looked at the code and (in theory) it should >> handle the group ok. >> >> Again sorry for the long delay in anyone answering. >> >> Barry >> >> >>> On Nov 6, 2014, at 2:24 AM, Håkon Strandenes <[email protected]> wrote: >>> >>> Hi, >>> >>> I am trying to load a dataset from a HDF5 file and into a vector in PETSc. >>> For that purpose I use VecView etc in the following way: >>> >>> PetscViewerHDF5Open(PETSC_COMM_WORLD, "input.h5", FILE_MODE_READ, >>> &H5viewer); >>> >>> PetscViewerHDF5PushGroup(H5viewer, "/FIELDS"); >>> >>> VecLoad(gSol, H5viewer); >>> >>> PetscViewerDestroy(&H5viewer); >>> >>> And yes, I also check the return variables for errors, I have just omitted >>> them from this example to make it easier to read. >>> >>> My problem is: >>> If I place a dataset, with the correct name and dimensions, in the group >>> "/FIELDS" in my input.h5, PETSc can't find it and won't load it. If I place >>> the same dataset in the root of my HDF5 file, the dataset is loaded and >>> everything works, even with PetscViewerHDF5PushGroup set to "/FIELDS"... >>> >>> Does actually VecLoad obey the group set by PetscViewerHDF5PushGroup? >>> >>> Best regards, >>> Håkon Strandenes >> >> > <VecLoadTest.tar.gz>
