12#include <sys/malloc.h>
21 if (*s ==
'.')
return 1;
22 if (*s ==
'_')
return 1;
33static herr_t H5G_iterate_timeslices(hid_t group_id,
const char *member_name,
void *operator_data)
44 printf(
"H5G_iterate_timeslices() could not open enum type!\n");
52 F5printf(0,
"H5G_iterate_timeslices(): OUCH! Timeslice was already defined!?\n");
59 F5printf(40,
"H5G_iterate_timeslices(): Member '%s' is not a group!\n", member_name);
76 if (
F_H5Aread(attr_id, H5T_NATIVE_DOUBLE, &time, *s)<0)
93 F5printf(100,
"H5Gclose(That->path->Slice_hid) done\n");
113 F5printf(1,
"*F5iterate_timeslices(): Could not initialize F5 Path!");
121 F5printf(100,
"F5iterate_timeslices()");
128 retval = H5Giterate(file_id,
"/", &Idx, H5G_iterate_timeslices, &That);
132 retval = H5Giterate(file_id,
"/", 0, H5G_iterate_timeslices, &That);
137 herr_t herr = H5Literate(file_id, H5_INDEX_NAME, H5_ITER_NATIVE,
138 idx, H5L_iterate_timeslices, &That);
142 F5printf(0,
"F5iterate_timeslices(): iteration error");
149 F5printf(100,
"F5iterate_timeslices: H5iterate done.\n" );
152 F5printf(100,
"F5iterate_timeslices: F5close() done.\n" );
169static herr_t H5G_iterate_grids(hid_t group_id,
const char *member_name,
void *operator_data)
178 id = That->
path->
Grid_hid = H5Gopen2(group_id, member_name, H5P_DEFAULT);
180 printf(
"ERROR: H5G_iterate_grids::H5Gopen(%s) failed!\n", member_name);
217 return H5Giterate(slice->
Slice_hid,
".", idx, H5G_iterate_grids, &That);
238static herr_t H5G_iterate_vertex_fields(hid_t group_id,
const char *member_name,
void *operator_data)
244 F5printf(40,
"H5G_iterate_vertex_fields(,member_name=%s, operator_data=%p)",
259 F5printf(40,
"H5G_iterate_vertex_fields(): Checking field type");
270 F5printf(40,
"H5G_iterate_vertex_fields() calling user callback function on `%s'.", member_name);
273 F5printf(40,
"H5G_iterate_vertex_fields() called user callback function on `%s'.", member_name);
301hid_t local_chart_hid = 0;
306 F5printf(10,
"F5iterate_topology_fields(): No Topology ID!");
310 F5printf(100,
"F5iterate_topology_fields()");
337 F5printf(10,
"F5iterate_topology_fields(): Open Coordinate system `%s' failed!",
374 F5printf(10,
"F5iterate_topology_fields(): Could not open chart description for `%s', no chart info available, but still iterating...!",
378 F5printf(30,
" F5iterate_topology_fields() --> iterate vertex fields");
380 retval = H5Giterate(grid->
Representation_hid,
".", idx, H5G_iterate_vertex_fields, &That);
398 F5printf(10,
" F5iterate_topology_fields() --> Iteration error\n");
409 if (!grid)
return -1;
434 const char*Representer_name,
435 F5Path*RepresentationTarget);
445static herr_t H5G_iterate_representations(hid_t group_id,
const char *member_name,
void *operator_data)
472 F5printf(10,
"F5iterate_representations(): No Topology ID!");
477 F5printf(10,
"F5iterate_representations(): No Representation ID!");
482 F5printf(30,
"F5iterate_representations()");
494 F5printf(40,
"F5iterate_topology_fields(coordinate_system=%s)\n", coordinate_system);
496 grid->Representation_hid =
F5Gtry_to_open(grid->Topology_hid, coordinate_system);
497 if (grid->Representation_hid<0)
502 grid->Representation_hid =
F5Gtry_to_open(grid->Topology_hid, coordinate_system);
504 if (grid->Representation_hid<0)
508 coordinate_system =
"CartesianChart3D";
509 grid->Representation_hid =
F5Gtry_to_open(grid->Topology_hid, coordinate_system);
511 if (grid->Representation_hid<0)
513 F5printf(10,
"F5iterate_topology_fields(): Open Coordinate system `%s' failed!",
524 grid->Representation_hid = 0;
531 if (grid->Charts_hid)
532 Cgrids = grid->Charts_hid;
536 if (grid->Charts_hid <0)
542 local_chart_hid = grid->Chart_hid;
543 grid->Chart_hid =
F5Gtry_to_open(grid->Charts_hid , coordinate_system);
548 if (grid->Chart_hid < 0)
550 F5printf(10,
"F5iterate_topology_fields(): Could not open chart description for `%s'!",
554 F5printf(100,
" F5iterate_topology_fields() --> iterate vertex fields");
555 That.coordinate_system = coordinate_system;
556 retval = H5Giterate(grid->Representation_hid,
".", idx, H5G_iterate_vertex_fields, &That);
557 H5Gclose( grid->Representation_hid );
562 grid->Charts_hid = 0;
564 if (grid->Chart_hid> 0)
567 grid->Representation_hid = 0;
568 grid->Chart_hid = local_chart_hid;
583 const char*representer_name,
589 That.
path = representation;
593 return H5Giterate(representation->
Representation_hid,
".", idx, H5G_iterate_vertex_fields, &That);
615static herr_t H5G_iterate_topologies(hid_t group_id,
const char *member_name,
void *operator_data)
621skeleton_dimensionality = -1;
626 F5printf(20,
" H5G_iterate_topologies(%d,%s,)", (
int)(group_id), member_name);
652 puts(
"ERROR: Opening Topology ID FAILED!");
659 F5printf(5,
" F5iterate_topologies(%s: Depth=%d, Dims=%d)", member_name, index_depth, skeleton_dimensionality);
663 printf(
"F5: ** Skeleton group without dimension attribute found - offending group: \"%s\"\n", member_name);
671 F5printf(15,
" ERROR on F5iterate_topologies(%s: Depth=%d, Dims=%d)", member_name, index_depth, skeleton_dimensionality);
673 F5printf(35,
" SUCCESS on F5iterate_topologies(%s: Depth=%d, Dims=%d)", member_name, index_depth, skeleton_dimensionality);
679 printf(
"F5: ** Skeleton group without index depth attribute found - offending illegal group: \"%s\"\n", member_name);
711 F5printf(10,
"F5iterate_topologies(): Opening Charts per Grid FAILED!");
712 puts(
"ERROR: Opening Charts Per Grid FAILED!");
724 F5printf(10,
"F5iterate_topologies(): BACKWARD COMPATIBILITY MODE: Considering POINTS without skeleton dimensionality.");
737 F5printf(10,
"F5iterate_topology_fields(): BACKWARD COMPATIBILITY MODE: Considering CELLS without skeleton dimensionality.");
752 F5printf(20,
" F5iterate_topologies(): Iterate over all possible index depths on grid %d ", (
int)grid->
Grid_hid );
758 F5printf(20,
" F5iterate_topologies(): Checking skeletons of depth %d on grid %d ",
760 retval = H5Giterate(grid->
Grid_hid,
".", idx, H5G_iterate_topologies, &That);
788static herr_t H5G_iterate_grid_atlas(hid_t group_id,
const char *member_name,
void *operator_data)
792hid_t GlobalChart_id = -1,
799 That->
path->
Chart_hid = H5Gopen2(group_id, member_name, H5P_DEFAULT);
803 F5printf(10,
"F5iterate_grid_atlas(): No valid Chart group in Grid, cannot callback.\n");
812 if (GlobalChart_id<=0)
816 hid_t GlobalCharts_id;
820 GlobalChart_id = H5Gopen2(ChartDomain_id, member_name, H5P_DEFAULT );
822 if (GlobalCharts_id>0)
825 if (GlobalChart_id<=0)
827 F5printf(0,
"F5iterate_grid_atlas(): No valid Global Chart reference for chart Grid/%s (missing GlobalChart link), ignoring this chart.", member_name);
832 F5printf(0,
"F5iterate_grid_atlas(): No valid Global Chart reference for chart %s, using alternative lookup.\n", member_name);
835 if (ChartDomain_id<=0)
841 if (ChartDomain_id<=0)
843 hid_t GlobalCharts_id;
845 F5printf(0,
"F5iterate_grid_atlas(): No valid Chart domain for %s, "
848 , member_name, member_name);
854 if (GlobalCharts_id<=0)
862 if (ChartDomain_id<=0)
864 F5printf(0,
"F5iterate_grid_atlas(): "
883 F5printf(200,
"FALLBACK: iterate grid atlas: copy chart domain");
886 F5printf(200,
"FALLBACK: iterate grid atlas: callback calling");
888 GlobalChart_id, ChartDomain_id,
891 F5printf(200,
"FALLBACK: iterate grid atlas: delete global charts");
896 F5printf(100,
"FALLBACK: Grid Atlas iteration done, closing chart ID");
898 F5printf(100,
"FALLBACK: Grid Atlas iteration done, closed chart ID");
924 F5printf(200,
"iterate grid atlas: copy chart domain");
927 F5printf(200,
"iterate grid atlas: callback calling");
929 GlobalChart_id, ChartDomain_id,
932 F5printf(200,
"iterate grid atlas: delete global charts");
938 F5printf(100,
"Grid Atlas iteration done, closing chart ID");
940 F5printf(100,
"Grid Atlas iteration done, closed chart ID");
956 F5printf(10,
"F5iterate_grid_atlas(): No valid Grid ID in path, cannot iterate.\n");
962 F5printf(10,
"F5iterate_grid_atlas(): Grid path already contains a chart, cannot iterate.\n");
970 F5printf(10,
"F5iterate_grid_atlas()");
989static herr_t H5G_iterate_field_fragments(hid_t group_id,
const char *member_name,
void *operator_data)
996static herr_t H5L_iterate_field_fragments( hid_t g_id,
const char *
name,
const H5L_info_t *info,
void *op_data)
1012 F5printf(1,
"F5iterate_field_fragments(): No Field given!\n");
1018 F5printf(1,
"F5iterate_field_fragments(): Field not open, forget to open it?\n");
1024 F5printf(1,
"F5iterate_field_fragments(): Field is not a group!?\n");
1030 F5printf(1,
"F5iterate_field_fragments(): No Callback function given!\n");
1036 int IterateByName = 0;
1037 int major_version, minor_version, release_version;
1040 &major_version, &minor_version, &release_version);
1043 if (major_version == 0 &&
1044 minor_version == 1 &&
1045 release_version < 3)
1047 printf(
"F5iterate_field_fragments(): Incompatible version %d.%d.%d!\n",
1048 major_version, minor_version, release_version);
1050 F5printf(1,
"F5iterate_field_fragments(): Incompatible version %d.%d.%d!\n",
1051 major_version, minor_version, release_version);
1059 F5printf(100,
"F5iterate_field_fragments()");
1061 return H5Giterate(field->
Field_hid,
".", idx, H5G_iterate_field_fragments, &That);
1064 if (major_version == 0 &&
1065 minor_version == 1 &&
1066 release_version < 6)
1070 hid_t gcpl_id = H5Gget_create_plist( field->
Field_hid );
1071 unsigned crt_order_flags;
1072 H5Pget_link_creation_order(gcpl_id, &crt_order_flags);
1075 if (crt_order_flags & H5P_CRT_ORDER_TRACKED &&
1076 crt_order_flags & H5P_CRT_ORDER_INDEXED)
1082 F5printf(30,
"F5iterate_field_fragments() using naming order");
1083 return H5Literate(field->
Field_hid, H5_INDEX_NAME, H5_ITER_NATIVE, 0, H5L_iterate_field_fragments, &That);
1087 F5printf(30,
"F5iterate_field_fragments() using Creation order");
1088 return H5Literate(field->
Field_hid, H5_INDEX_CRT_ORDER, H5_ITER_NATIVE, 0, H5L_iterate_field_fragments, &That);
1104static herr_t H5G_iterate_grids_per_bundle(hid_t group_id,
const char *member_name,
void *operator_data)
1120#ifdef F5_BACKWARD_COMPATIBILITY
1121static herr_t H5G_iterate_grids_per_bundle_from_timeslices(hid_t group_id,
const char *member_name,
void *
operator_data)
1125 F5printf(1,
"Ancient File Recovery: Found grid=[%s]", member_name);
1137static herr_t H5G_iterate_grids_per_bundle_via_timeslices(hid_t group_id,
const char *member_name,
void *
operator_data)
1139 F5printf(10,
"Ancient File Recovery: At T=[%s]", member_name);
1140 H5Giterate(group_id, member_name, 0, H5G_iterate_grids_per_bundle_from_timeslices,
operator_data);
1147hid_t TableOfContents, Grids;
1156 if (TableOfContents < 1)
1158 F5printf(1,
"No table of contents? This must be an ancient file...");
1159#ifdef F5_BACKWARD_COMPATIBILITY
1160 return H5Giterate(
file_id,
"/", idx, H5G_iterate_grids_per_bundle_via_timeslices, &That);
1172 F5printf(100,
"F5iterate_grid_per_bundle()");
1173 nGrids = H5Giterate(Grids,
".", idx, H5G_iterate_grids_per_bundle, &That);
1190static herr_t my_gridslices(hid_t gridinfo_id,
const char*slicename,
void *user_data)
1200 printf(
" --> NO TIME GROUP: %s\n", slicename);fflush(stdout);
1218 F5printf(50,
"H5G_iterate_gridslices(): reading time attribute [%s]\n", *s);
1219 if (
F_H5Aread(attr_id, H5T_NATIVE_DOUBLE, &time, *s)<0)
1237#ifdef F5_BACKWARD_COMPATIBILITY
1246static herr_t my_grids_per_bundle_emulate_via_timeslice(hid_t file_id,
const char*slicename,
void *user_data)
1250 F5printf(10,
"Ancient File Recovery: Scanning for grid [%s] in [%s]",
That->
gridname, slicename);
1270 if (
F_H5Aread(attr_id, H5T_NATIVE_DOUBLE, &time, *s)<0)
1278 F5printf(10,
"Ancient File Recovery: GOT grid [%s] in [%s] for T=%g (attribute %s)",
1295 F5printf(1,
"Ancient File Recovery - no such slice [%s]???", slicename);
1302static herr_t my_grids_per_bundle(hid_t file_id, hid_t gridinfo_id,
const char*
gridname,
void *user_data)
1313 F5printf(20,
"GRID [%s] has %d time table entries\n",
gridname, (
int)NTimeEntries);
1319 if (readEntries == NTimeEntries)
1322 F5printf(10,
"GRID [%s] iterating over %d time table entries\n",
gridname, (
int)NTimeEntries);
1323 for(i=0; i<readEntries; i++)
1327 printf(
"GRID [%s] for %d time is at slice [%s]\n",
gridname, i, TTE[i].TimesliceName);
1335 assert( TTE[i].TimesliceName &&
"Invalid time slice name detected in time table");
1341 F5printf(1,
"ERROR: Grid [%s] has %d time table entries but only %d could be read!\n",
1342 gridname, (
int)NTimeEntries, (
int)readEntries);
1348 if (TableOfContents < 1)
1350#ifdef F5_BACKWARD_COMPATIBILITY
1351 F5printf(1,
"Emulating F5iterate_gridevolution() for ancient file's grid=%s...",
gridname);
1357 return H5Giterate(file_id,
"/", NULL, &my_grids_per_bundle_emulate_via_timeslice, &This);
1359 F5printf(1,
"No Table of Contents found when trying to look for grid=%s...",
gridname);
1368 F5printf(100,
"F5iterate_gridevolution()");
1369 return H5Giterate(gridinfo_id,
".", NULL, my_gridslices,
That);
1381 F5printf(100,
"F5iterate_gridevolution() before F5iterate_grids");
1383 F5printf(100,
"F5iterate_gridevolution() after F5iterate_grids");
F5_API const char * F5_default_time_attrib_names[]
ChartDomain_IDs * F5Bcopy_chart_domain(const ChartDomain_IDs *srcIDs)
void F5B_delete_global_chart(ChartDomain_IDs *ID)
ChartDomain_IDs * F5B_read_chart_domain(hid_t ChartDomainLocationID, const char *DefaultChartName)
ChartDomain_IDs * F5B_read_global_chart(hid_t ChartsID, const char *name)
int F5Fis_group(const F5Path *fpath)
hid_t F5Fget_type(F5Path *f)
ArrayType F5Fget_field_enum(const F5Path *fpath, const char *fieldname, int *major_version, int *minor_version, int *release_version)
F5_API int F5LTget_skeleton_dimensionality(hid_t Top_hid)
#define FIBER_HDF5_REPRESENTER
#define FIBER_HDF5_CHARTS_PER_GRID
#define FIBER_HDF5_INVALID_SKELETON_DIMENSIONALITY
#define F5_INVALID_INDEX_DEPTH
#define FIBER_HDF5_CARTESIAN_CHART_DOMAIN
#define F5_MAX_INDEX_DEPTH
#define FIBER_HDF5_DEFAULT_CHART
#define FIBER_HDF5_GLOBAL_CHARTS
#define FIBER_HDF5_POINTS
#define F5_TIMETABLE_NAME
#define FIBER_HDF5_DEPRECATED_OLD_DEFAULT_CHART
#define FIBER_HDF5_GLOBALCHART_COORDINATES
#define F5_MIN_INDEX_DEPTH
#define FIBER_CONTENT_GRIDS
#define FIBER_HDF5_CHART_TO_GLOBALCHART_REF
int F5iterate_field_fragments(F5Path *field, int *idx, F5_iterate_fields_fragments_t *callback, void *operator_data)
int F5iterate_grid_atlas(F5Path *grid, int *idx, F5_iterate_grid_atlas_t *callback, void *operator_data)
herr_t F5_iterate_fields_fragments_t(F5Path *field, const char *fragmentname, void *operator_data)
herr_t F_H5Aread(hid_t attr_id, hid_t mem_type_id, void *buf, const char *name)
#define F5printf(verbosity,...)
int F5Fopen(F5Path *f, const char *fieldname)
F5_API int F5LTget_index_depth(hid_t Top_hid)
herr_t F5_iterate_fields_t(F5Path *field, const char *fieldname, void *operator_data, const char *representer_name)
herr_t F5_iterate_representations_t(F5Path *Representation, void *operator_data, const char *Representer_name, F5Path *RepresentationTarget)
int F5iterate_grids_per_bundle(hid_t file_id, int *idx, F5_iterate_grids_per_bundle_t *callback, void *user_data)
int F5iterate_grids(F5Path *slice, int *idx, F5_iterate_grids_t *callback, void *operator_data, F5_gridproperty_t **gridtypes, const char *coordinate_system)
herr_t F5_iterate_timeslices_t(F5Path *path, double time, void *user_data)
herr_t F5_iterate_grid_atlas_t(F5Path *grid, const char *coordinate_name, hid_t global_chart_hid, hid_t domain_group_hid, void *operator_data)
int F5iterate_topologies(F5Path *grid, int *idx, F5_iterate_topologies_t *callback, void *operator_data)
int F5iterate_vertex_fields(F5Path *grid, int *idx, F5_iterate_fields_t *callback, void *operator_data, const char *coordinate_system, F5_fieldtype_t *what)
int F5_fieldtype_t(hid_t type_id)
int F5Iignore(const char *s)
herr_t F5_iterate_topologies_t(F5Path *field, const char *topologyname, int index_depth, int topological_dimension, void *operator_data)
int F5has_standard_vertex_fields(F5Path *grid)
int F5iterate_representations(F5Path *skeleton, int *idx, F5_iterate_representations_t *callback, void *operator_data)
herr_t F5_iterate_grids_t(F5Path *F5Grid, const char *gridname, void *user_data)
herr_t F5_iterate_gridevolution_per_bundle_t(hid_t file_id, const char *gridname, double time, const char *slicename, void *user_data)
int F5iterate_topology_fields(F5Path *grid, int *idx, F5_iterate_fields_t *callback, void *operator_data, const char *coordinate_system, F5_fieldtype_t *what)
int F5iterate_timeslices(hid_t file_id, hsize_t *idx, F5_iterate_timeslices_t *callback, void *operator_data)
int F5iterate_fields(F5Path *representation, int *idx, const char *representer_name, F5_iterate_fields_t *callback, void *operator_data)
herr_t F5_iterate_grids_per_bundle_t(hid_t file_id, hid_t gridinfo_id, const char *gridname, void *user_data)
int F5iterate_gridevolution(hid_t file_id, int *idx, F5_iterate_gridevolution_per_bundle_t *callback, void *user_data, F5_iterate_grids_per_bundle_t *gridinfo)
hid_t F5Aopen_name(hid_t location, const char *name)
F5_API hsize_t F5Bget_timetable_size(hid_t loc_id)
hsize_t F5Bread_timetable(hid_t loc_id, TimeTableEntry *TTE, hsize_t table_size)
F5Path * F5Binitialize_path(hid_t File_id)
struct _TimeTableEntry TimeTableEntry
hid_t F5Gtry_to_open(hid_t location, const char *name)
int F5_gridproperty_t(F5Path *grid, const char *coordinate_system)
F5_iterate_representations_t * callback
ChartDomain_IDs * FileIDs
hid_t field_enum_type_hid
ChartDomain_IDs * myChart
F5_iterate_grids_per_bundle_t * gridinfo
F5_iterate_gridevolution_per_bundle_t * callback
F5_iterate_fields_fragments_t * callback
F5_iterate_grid_atlas_t * callback
F5_iterate_grids_per_bundle_t * callback
F5_iterate_timeslices_t * callback
F5_gridproperty_t ** gridtypes
const char * coordinate_system
F5_iterate_grids_t * callback
F5_iterate_topologies_t * callback
F5_iterate_fields_t * callback
const char * coordinate_system
F5iterate_gridevolution_struct * That