On 28/09/2013 13:29, Garth N. Wells wrote:
On 28 September 2013 12:56, Chris Richardson <[email protected]> wrote:
On 28/09/2013 11:31, Garth N. Wells wrote:

On 28 September 2013 10:42, Chris Richardson <[email protected]> wrote:


This is a continuation of the discussion at:

https://bitbucket.org/fenics-project/dolfin/pull-request/52

The question is how best to save a time-series of Function in HDF5, when
the
cell and dof layout remains constant.

It has been suggested to use:

u = Function(V)
h0 = HDF5File('Timeseries_of_Function.h5', 'w')
h0.write(u, '/Function')
# Then later
h0.write(u.vector(), "/Vector/0")
h0.write(u.vector(), "/Vector/1")


Shouldn't this be

    h0.write(u.vector(), "/Function/Vector/0")
    h0.write(u.vector(), "/Function/Vector/1")


In the HDF5File model, the user is free to put vectors etc wherever they
want. There is no explicit meaning
to dumping extra vectors inside the "group" of a Function.



and to read back:

u = Function(V)
h0 = HDF5File('Timeseries_of_Function.h5', 'r')
h0.read(u, "/Function")
h0.read(u.vector(), "/Function/vector")


OK, this probably should have been

h0.read(u.vector(), "/Vector/1")

When reading in a vector, it is just read directly, and
not reordered in any way. If the vector was saved from a different set of processors, with different partitioning, the order could be quite different.

When reading a Function, the vector is reordered to take this into account.

If the vector is already associated with a Function (not all vectors are) then it should be possible to reorder it when reading... maybe that should
be an option.


A solution seems very simple - use the HDF5 hierarchal structure to
associate Vectors with a Function. This is the advantage of using a
hierarchal storage format.

If a user reads a Vector that is not already associated with a
Function, then it should be the user's responsibility to take care of
things.


It could work like this:

At present, when writing a Function, it creates a group and populates it with dofmap, cells, and vector. Writing again with the same name will cause an error. We could allow writes to the same name, but create more vectors (maybe checking that the cells/dofs are still compatible) in the same HDF5 group. Or, a user could just manually dump more vectors in the group (as described above by Garth).

For read, reading a Function will still behave the same, but we could have the additional option of reading a Function by just giving the vector dataset name - and assuming that cell/dof information exists in the same HDF5 group. This should be fairly easy to implement.

Chris

_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to