hi Matt,

On 10/11/21 11:59 AM, Matthew Knepley wrote:
On Sun, Oct 10, 2021 at 6:51 PM Adrian Croucher <a.crouc...@auckland.ac.nz <mailto:a.crouc...@auckland.ac.nz>> wrote:

    hi

    Is there any way to query the PETSc HDF5 viewer to find the number of
    time steps in the file?

    A common use case I have is that an HDF5 file from a previous
    simulation
    is used to get initial conditions for a subsequent run. The most
    common
    thing you want to do is restart from the last set of results in the
    previous output. To do that you need to know how many time steps
    there
    are, so you can set the output index to be the last one.

    I thought maybe I could just query the size of the "time" dataset,
    but I
    can't even see any obvious way to do that using the viewer functions.


There is nothing in there that does it right now. Do you know how to do it in HDF5?
If so, I can put it in. Otherwise, I will have to learn more HDF5 :)

I haven't actually tried this myself but it looks like what you do is:

1) get the dataspace for the dataset (in our case the "time" dataset):

hid_t dspace = H5Dget_space(dset);

2) Get the dimensions of the dataspace:

const int ndims = 1;

hsize_t dims[ndims];
H5Sget_simple_extent_dims(dspace, dims, NULL);

The first element of dims should be the number of time steps. Here I've assumed the number of dimensions of the time dataset is 1. In general you can instead query the rank of the dataspace using H5Sget_simple_extent_ndims() to get the rank ndims.

Regards, Adrian

--
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: a.crouc...@auckland.ac.nz
tel: +64 (0)9 923 4611

Reply via email to