11{
"time",
"Time",
"TIME", 0 };
20static herr_t slice_iter (hid_t loc_id,
const char *
name,
void *opdata)
23hid_t gid = H5Gopen2(loc_id,
name, H5P_DEFAULT );
35 if (
F_H5Aread(attr_id, H5T_NATIVE_DOUBLE, &
t, *s)<0)
61 H5Giterate(loc_id,
".", 0, slice_iter, &si);
72hid_t fid = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
83 printf(
"F5Bslice: got data slice for T=%lg\n",
t);
93char *result = destbuf;
104 (destbuf,len,
"t=%0*.*f", 2*precision, precision, *time);
146 F5printf(30,
" -- F5Bappend_slice(%lg)", *time);
148 F5printf(30,
" -- F5Bappend_slice( <static> )");
156 hid_t space_hid = H5Screate(H5S_SCALAR);
158 H5Awrite(attr_hid, H5T_NATIVE_DOUBLE, time);
169hid_t dtype_id = H5Tcreate( H5T_COMPOUND,
sizeof(
TimeTableEntry) );
173 H5Tinsert( dtype_id,
"F5::SliceGroup",
sizeof(
double), string_dtype_id );
179static int F5check_timetable_Type(hid_t type_id)
184 if (H5Tget_class(type_id) == H5T_COMPOUND)
186 if (H5Tget_nmembers( type_id) == 2)
194hid_t timetable_type_id;
199 if (F5check_timetable_Type(timetable_type_id) )
201 return timetable_type_id;
206 H5Tcommit2( loc_id,
F5_TIMETABLE_NAME, timetable_type_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
208 return timetable_type_id;
211static hid_t F5Bcreate_timetable_dataset(hid_t loc_id, hid_t dtype_location_id, hsize_t init_dims)
213hsize_t maximum_dims = H5S_UNLIMITED;
214hid_t space_id = H5Screate_simple( 1, &init_dims, &maximum_dims );
216hid_t dset_creation_property_id = H5Pcreate( H5P_DATASET_CREATE );
220hsize_t chunk_length = 1024;
229 H5Pset_chunk(dset_creation_property_id, 1, &chunk_length);
235 dset_creation_property_id,
239 H5Pclose( dset_creation_property_id );
240 H5Sclose( space_id );
268hsize_t current_dim = 0;
272 mem_space_id = H5Screate_simple( 1, &append_dims, NULL);
286 F5Bcreate_timetable_dataset(loc_id, dtype_location_id, append_dims);
293 H5Dwrite( dataset_id, timetable_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, TTE);
296 H5Dclose( dataset_id );
301 hid_t current_file_space_id = H5Dget_space(dataset_id );
302 H5Sget_simple_extent_dims( current_file_space_id, ¤t_dim, NULL);
303 H5Sclose( current_file_space_id );
306 size = append_dims + current_dim;
307 H5Dset_extent( dataset_id, &size);
310 hid_t file_space_id = H5Dget_space(dataset_id );
311 H5Sselect_hyperslab(file_space_id, H5S_SELECT_SET, ¤t_dim, NULL, &append_dims, NULL);
317 H5Dwrite( dataset_id, timetable_type_id, mem_space_id, file_space_id, H5P_DEFAULT, TTE);
319 H5Sclose( file_space_id );
322 H5Dclose( dataset_id );
331hsize_t current_dim = 0;
341 hid_t timetable_type_id = H5Dget_type( dataset_id );
342 int type_is_ok = F5check_timetable_Type(timetable_type_id);
346 H5Dclose( dataset_id );
347 F5printf(-1,
"WARNING: Invalid Time Table time detected!");
354 hid_t current_file_space_id = H5Dget_space(dataset_id );
355 H5Sget_simple_extent_dims( current_file_space_id, ¤t_dim, NULL);
356 H5Sclose( current_file_space_id );
360 H5Dclose( dataset_id );
381 hid_t space_id = H5Dget_space(dataset_id );
382 hsize_t current_dim = 0;
383 H5Sget_simple_extent_dims( space_id, ¤t_dim, NULL);
384 H5Sclose( space_id );
386 if (table_size<current_dim)
388 H5Dclose( dataset_id );
395 H5Dread( dataset_id, dtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, TTE);
399 H5Dclose( dataset_id );
hid_t F5Atry_to_open(hid_t location, const char *name)
hid_t F5Aappend(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t create_plist)
struct _F5_TimeParameter F5_TimeParameter
F5_API const char * F5_default_time_attrib_names[]
#define F5_TIMESLICE_NAME_LENGTH
hid_t F5Bget_file_timetable_type(hid_t loc_id)
#define FIBER_STATIC_DATA
#define F5_TIMETABLE_NAME
#define FIBER_HDF5_TIME_ATTRIB
herr_t F_H5Aread(hid_t attr_id, hid_t mem_type_id, void *buf, const char *name)
#define F5printf(verbosity,...)
hid_t F5Bcreate_timetable_type()
hsize_t F5Bget_timetable_size(hid_t loc_id)
hid_t F5Bappend_slice(hid_t file_id, const double *time)
hsize_t F5Bappend_timetable(hid_t loc_id, hid_t dtype_location_id, const TimeTableEntry *TTE, hsize_t append_dims)
int F5setTimeUnit(hid_t file_id, const F5_TimeParameter *TP)
hid_t F5BgetMostRecentSlice(double *t, hid_t loc_id, const char **time_attribs)
hsize_t F5Bread_timetable(hid_t loc_id, TimeTableEntry *TTE, hsize_t table_size)
hid_t F5BgetMostRecentFileSlice(double t, const char *filename)
struct _TimeTableEntry TimeTableEntry
hid_t F5Bappend_timeslice(hid_t file_id, const F5_TimeParameter *time)
char * F5I_timegroup(const double *time, char *destbuf, size_t len)
hid_t F5Gappend(hid_t loc_id, const char *name)
const char ** time_attribs