Skip to content

Commit e385c5c

Browse files
committedAug 15, 2024
Impose a minimum hdf5 API version of 1.8 to handle all our compression schemes
1 parent e4ec594 commit e385c5c

File tree

11 files changed

+141
-24
lines changed

11 files changed

+141
-24
lines changed
 

‎INSTALL.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ before you can build it.
9999

100100

101101
- HDF5:
102-
A HDF5 library (v. 1.8.x or higher) is required to read and
102+
A HDF5 library (v. 1.10.x or higher) is required to read and
103103
write particle data. One of the commands "h5cc" or "h5pcc"
104104
should be available. If "h5pcc" is located then a parallel
105105
HDF5 built for the version of MPI located should be

‎doc/RTD/source/GettingStarted/compiling_code.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ To compile SWIFT, you will need the following libraries:
3131
HDF5
3232
~~~~
3333

34-
Version 1.8.x or higher is required. Input and output files are stored as HDF5
34+
Version 1.10.x or higher is required. Input and output files are stored as HDF5
3535
and are compatible with the existing GADGET-2 specification. Please consider
3636
using a build of parallel-HDF5, as SWIFT can leverage this when writing and
37-
reading snapshots. We recommend using HDF5 > 1.10.x as this is *vastly superior*
37+
reading snapshots. We recommend using HDF5 >= 1.12.x as this is *vastly superior*
3838
in parallel.
3939

4040
HDF5 is widely available through system package managers.

‎doc/onboardingGuide/source/dependencies.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ To compile SWIFT, you will need the following libraries:
88
HDF5
99
~~~~
1010

11-
Version 1.8.x or higher is required. Input and output files are stored as HDF5
11+
Version 1.10.x or higher is required. Input and output files are stored as HDF5
1212
and are compatible with the GADGET-2 specification. A parallel-HDF5 build
13-
and HDF5 > 1.10.x is recommended when running over MPI.
13+
and HDF5 >= 1.12.x is recommended when running over MPI.
1414

1515
MPI
1616
~~~

‎src/common_io.h

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#define PARTICLE_GROUP_BUFFER_SIZE 50
3232
#define FILENAME_BUFFER_SIZE 150
3333
#define IO_BUFFER_ALIGNMENT 1024
34+
#define HDF5_LOWEST_FILE_FORMAT_VERSION H5F_LIBVER_V18
35+
#define HDF5_HIGHEST_FILE_FORMAT_VERSION H5F_LIBVER_LATEST
3436

3537
/* Avoid cyclic inclusion problems */
3638
struct cell;

‎src/distributed_io.c

+24-4
Original file line numberDiff line numberDiff line change
@@ -508,8 +508,14 @@ void write_virtual_file(struct engine* e, const char* fileName_base,
508508
* specific output */
509509
xmf_write_outputheader(xmfFile, fileName, e->time);
510510

511+
/* Set the minimal API version to avoid issues with advanced features */
512+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
513+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
514+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
515+
if (err < 0) error("Error setting the hdf5 API version");
516+
511517
/* Open HDF5 file with the chosen parameters */
512-
hid_t h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
518+
hid_t h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
513519
if (h_file < 0) error("Error while opening file '%s'.", fileName);
514520

515521
/* Open header to write simulation properties */
@@ -741,8 +747,9 @@ void write_virtual_file(struct engine* e, const char* fileName_base,
741747
/* Write LXMF file descriptor */
742748
xmf_write_outputfooter(xmfFile, e->snapshot_output_count, e->time);
743749

744-
/* Close the file for now */
750+
/* Close the file */
745751
H5Fclose(h_file);
752+
H5Pclose(h_props);
746753

747754
#else
748755
error(
@@ -1002,9 +1009,15 @@ void write_output_distributed(struct engine* e,
10021009
}
10031010
}
10041011

1012+
/* Set the minimal API version to avoid issues with advanced features */
1013+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
1014+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1015+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1016+
if (err < 0) error("Error setting the hdf5 API version");
1017+
10051018
/* Open file */
10061019
/* message("Opening file '%s'.", fileName); */
1007-
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
1020+
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
10081021
if (h_file < 0) error("Error while opening file '%s'.", fileName);
10091022

10101023
/* Open header to write simulation properties */
@@ -1490,6 +1503,7 @@ void write_output_distributed(struct engine* e,
14901503

14911504
/* Close file */
14921505
H5Fclose(h_file);
1506+
H5Pclose(h_props);
14931507

14941508
#if H5_VERSION_GE(1, 10, 0)
14951509

@@ -1512,8 +1526,13 @@ void write_output_distributed(struct engine* e,
15121526
char fileName_virtual[1030];
15131527
sprintf(fileName_virtual, "%s.hdf5", fileName_base);
15141528

1529+
h_props = H5Pcreate(H5P_FILE_ACCESS);
1530+
err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1531+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1532+
if (err < 0) error("Error setting the hdf5 API version");
1533+
15151534
/* Open the snapshot on rank 0 */
1516-
h_file_cells = H5Fopen(fileName_virtual, H5F_ACC_RDWR, H5P_DEFAULT);
1535+
h_file_cells = H5Fopen(fileName_virtual, H5F_ACC_RDWR, h_props);
15171536
if (h_file_cells < 0)
15181537
error("Error while opening file '%s' on rank %d.", fileName_virtual,
15191538
mpi_rank);
@@ -1541,6 +1560,7 @@ void write_output_distributed(struct engine* e,
15411560
if (mpi_rank == 0) {
15421561
H5Gclose(h_grp_cells);
15431562
H5Fclose(h_file_cells);
1563+
H5Pclose(h_props);
15441564
}
15451565

15461566
#endif

‎src/fof_catalogue_io.c

+16-2
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,14 @@ void write_fof_virtual_file(const struct fof_props* props,
305305
sprintf(file_name_base, "%s/%s", subdir_name, base);
306306
sprintf(file_name, "%s/%s.hdf5", subdir_name, base);
307307

308+
/* Set the minimal API version to avoid issues with advanced features */
309+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
310+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
311+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
312+
if (err < 0) error("Error setting the hdf5 API version");
313+
308314
/* Open HDF5 file with the chosen parameters */
309-
hid_t h_file = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
315+
hid_t h_file = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
310316
if (h_file < 0) error("Error while opening file '%s'.", file_name);
311317

312318
/* Start by writing the header */
@@ -356,6 +362,7 @@ void write_fof_virtual_file(const struct fof_props* props,
356362
/* Close everything */
357363
H5Gclose(h_grp);
358364
H5Fclose(h_file);
365+
H5Pclose(h_props);
359366
#endif
360367
}
361368

@@ -533,7 +540,13 @@ void write_fof_hdf5_catalogue(const struct fof_props* props,
533540
e->snapshot_output_count);
534541
#endif
535542

536-
hid_t h_file = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
543+
/* Set the minimal API version to avoid issues with advanced features */
544+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
545+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
546+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
547+
if (err < 0) error("Error setting the hdf5 API version");
548+
549+
hid_t h_file = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
537550
if (h_file < 0) error("Error while opening file '%s'.", file_name);
538551

539552
/* Compute the number of groups */
@@ -593,6 +606,7 @@ void write_fof_hdf5_catalogue(const struct fof_props* props,
593606
/* Close everything */
594607
H5Gclose(h_grp);
595608
H5Fclose(h_file);
609+
H5Pclose(h_props);
596610

597611
#ifdef WITH_MPI
598612
#if H5_VERSION_GE(1, 10, 0)

‎src/lightcone/lightcone.c

+29-4
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ void lightcone_flush_particle_buffers(struct lightcone_props *props, double a,
864864
if ((types_to_flush > 0) || (end_file && props->file_needs_finalizing)) {
865865

866866
/* We have data to flush, so open or create the output file */
867-
hid_t file_id;
867+
hid_t file_id, h_props;
868868
char fname[FILENAME_BUFFER_SIZE];
869869
if (props->start_new_file) {
870870

@@ -873,8 +873,14 @@ void lightcone_flush_particle_buffers(struct lightcone_props *props, double a,
873873
particle_file_name(fname, FILENAME_BUFFER_SIZE, props->subdir,
874874
props->basename, props->current_file, engine_rank);
875875

876+
h_props = H5Pcreate(H5P_FILE_ACCESS);
877+
herr_t err =
878+
H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
879+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
880+
if (err < 0) error("Error setting the hdf5 API version");
881+
876882
/* Create the file */
877-
file_id = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
883+
file_id = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
878884
if (file_id < 0) error("Unable to create new lightcone file: %s", fname);
879885

880886
/* This new file has not been finalized yet */
@@ -924,10 +930,16 @@ void lightcone_flush_particle_buffers(struct lightcone_props *props, double a,
924930

925931
} else {
926932

933+
h_props = H5Pcreate(H5P_FILE_ACCESS);
934+
herr_t err =
935+
H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
936+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
937+
if (err < 0) error("Error setting the hdf5 API version");
938+
927939
/* Re-open an existing file */
928940
particle_file_name(fname, FILENAME_BUFFER_SIZE, props->subdir,
929941
props->basename, props->current_file, engine_rank);
930-
file_id = H5Fopen(fname, H5F_ACC_RDWR, H5P_DEFAULT);
942+
file_id = H5Fopen(fname, H5F_ACC_RDWR, h_props);
931943
if (file_id < 0)
932944
error("Unable to open current lightcone file: %s", fname);
933945
}
@@ -969,6 +981,7 @@ void lightcone_flush_particle_buffers(struct lightcone_props *props, double a,
969981

970982
/* We're done updating the output file */
971983
H5Fclose(file_id);
984+
H5Pclose(h_props);
972985
}
973986

974987
/* If we need to start a new file next time, record this */
@@ -1101,6 +1114,12 @@ void lightcone_dump_completed_shells(struct lightcone_props *props,
11011114
/* Create the output file for this shell */
11021115
hid_t fapl_id = H5Pcreate(H5P_FILE_ACCESS);
11031116

1117+
/* Set the minimal API version to avoid issues with advanced features */
1118+
herr_t err =
1119+
H5Pset_libver_bounds(fapl_id, HDF5_LOWEST_FILE_FORMAT_VERSION,
1120+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1121+
if (err < 0) error("Error setting the hdf5 API version");
1122+
11041123
/* Set MPI collective mode, if necessary */
11051124
int collective = 0;
11061125
#ifdef WITH_MPI
@@ -1710,8 +1729,13 @@ void lightcone_write_index(struct lightcone_props *props,
17101729
check_snprintf(fname, FILENAME_BUFFER_SIZE, "%s/%s_index.hdf5",
17111730
props->subdir, props->basename);
17121731

1732+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
1733+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1734+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1735+
if (err < 0) error("Error setting the hdf5 API version");
1736+
17131737
/* Create the file */
1714-
hid_t file_id = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
1738+
hid_t file_id = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
17151739

17161740
/* Write number of MPI ranks and number of files */
17171741
hid_t group_id =
@@ -1755,6 +1779,7 @@ void lightcone_write_index(struct lightcone_props *props,
17551779

17561780
H5Gclose(group_id);
17571781
H5Fclose(file_id);
1782+
H5Pclose(h_props);
17581783
}
17591784

17601785
free(current_file_on_rank);

‎src/line_of_sight.c

+10-2
Original file line numberDiff line numberDiff line change
@@ -770,14 +770,21 @@ void do_line_of_sight(struct engine *e) {
770770
#endif
771771

772772
/* Node 0 creates the HDF5 file. */
773-
hid_t h_file = -1, h_grp = -1;
773+
hid_t h_file = -1, h_grp = -1, h_props = -1;
774774
char fileName[256], groupName[200];
775775

776776
if (e->nodeID == 0) {
777777
sprintf(fileName, "%s_%04i.hdf5", LOS_params->basename,
778778
e->los_output_count);
779779
if (verbose) message("Creating LOS file: %s", fileName);
780-
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
780+
781+
/* Set the minimal API version to avoid issues with advanced features */
782+
h_props = H5Pcreate(H5P_FILE_ACCESS);
783+
hid_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
784+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
785+
if (err < 0) error("Error setting the hdf5 API version");
786+
787+
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
781788
if (h_file < 0) error("Error while opening file '%s'.", fileName);
782789
}
783790

@@ -1082,6 +1089,7 @@ void do_line_of_sight(struct engine *e) {
10821089

10831090
/* Close HDF5 file */
10841091
H5Fclose(h_file);
1092+
H5Pclose(h_props);
10851093
}
10861094

10871095
/* Up the LOS counter. */

‎src/parallel_io.c

+13-1
Original file line numberDiff line numberDiff line change
@@ -1191,8 +1191,14 @@ void prepare_file(struct engine* e, const char* fileName,
11911191
/* Prepare the XMF file for the new entry */
11921192
xmfFile = xmf_prepare_file(xmfFileName);
11931193

1194+
/* Set the minimal API version to avoid issues with advanced features */
1195+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
1196+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1197+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1198+
if (err < 0) error("Error setting the hdf5 API version");
1199+
11941200
/* Open HDF5 file with the chosen parameters */
1195-
hid_t h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
1201+
hid_t h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
11961202
if (h_file < 0) error("Error while opening file '%s'.", fileName);
11971203

11981204
/* Write the part of the XMF file corresponding to this
@@ -1430,6 +1436,7 @@ void prepare_file(struct engine* e, const char* fileName,
14301436

14311437
/* Close the file for now */
14321438
H5Fclose(h_file);
1439+
H5Pclose(h_props);
14331440
}
14341441

14351442
/**
@@ -1685,6 +1692,11 @@ void write_output_parallel(struct engine* e,
16851692
/* Prepare some file-access properties */
16861693
hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);
16871694

1695+
/* Set the minimal API version to avoid issues with advanced features */
1696+
herr_t err = H5Pset_libver_bounds(plist_id, HDF5_LOWEST_FILE_FORMAT_VERSION,
1697+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1698+
if (err < 0) error("Error setting the hdf5 API version");
1699+
16881700
/* Set some MPI-IO parameters */
16891701
// MPI_Info_set(info, "IBM_largeblock_io", "true");
16901702
MPI_Info_set(info, "romio_cb_write", "enable");

‎src/serial_io.c

+34-5
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,14 @@ void read_ic_serial(char* fileName, const struct unit_system* internal_units,
782782
/* Is it this rank's turn to read ? */
783783
if (rank == mpi_rank) {
784784

785-
h_file = H5Fopen(fileName, H5F_ACC_RDONLY, H5P_DEFAULT);
785+
/* Set the minimal API version to avoid issues with advanced features */
786+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
787+
herr_t err =
788+
H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
789+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
790+
if (err < 0) error("Error setting the hdf5 API version");
791+
792+
h_file = H5Fopen(fileName, H5F_ACC_RDONLY, h_props);
786793
if (h_file < 0)
787794
error("Error while opening file '%s' on rank %d.", fileName, mpi_rank);
788795

@@ -889,6 +896,7 @@ void read_ic_serial(char* fileName, const struct unit_system* internal_units,
889896

890897
/* Close file */
891898
H5Fclose(h_file);
899+
H5Pclose(h_props);
892900
}
893901

894902
/* Wait for the read of the reading to complete */
@@ -1165,9 +1173,15 @@ void write_output_serial(struct engine* e,
11651173
/* Write the part corresponding to this specific output */
11661174
xmf_write_outputheader(xmfFile, fileName, e->time);
11671175

1176+
/* Set the minimal API version to avoid issues with advanced features */
1177+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
1178+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1179+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1180+
if (err < 0) error("Error setting the hdf5 API version");
1181+
11681182
/* Open file */
11691183
/* message("Opening file '%s'.", fileName); */
1170-
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
1184+
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
11711185
if (h_file < 0) error("Error while opening file '%s'.", fileName);
11721186

11731187
/* Open header to write simulation properties */
@@ -1307,14 +1321,21 @@ void write_output_serial(struct engine* e,
13071321

13081322
/* Close file */
13091323
H5Fclose(h_file);
1324+
H5Pclose(h_props);
13101325
}
13111326

13121327
/* Now write the top-level cell structure */
1313-
hid_t h_file_cells = 0, h_grp_cells = 0;
1328+
hid_t h_file_cells = 0, h_grp_cells = 0, h_props_cells = 0;
13141329
if (mpi_rank == 0) {
13151330

1331+
/* Set the minimal API version to avoid issues with advanced features */
1332+
h_props_cells = H5Pcreate(H5P_FILE_ACCESS);
1333+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1334+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1335+
if (err < 0) error("Error setting the hdf5 API version");
1336+
13161337
/* Open the snapshot on rank 0 */
1317-
h_file_cells = H5Fopen(fileName, H5F_ACC_RDWR, H5P_DEFAULT);
1338+
h_file_cells = H5Fopen(fileName, H5F_ACC_RDWR, h_props_cells);
13181339
if (h_file_cells < 0)
13191340
error("Error while opening file '%s' on rank %d.", fileName, mpi_rank);
13201341

@@ -1343,7 +1364,14 @@ void write_output_serial(struct engine* e,
13431364
/* Is it this rank's turn to write ? */
13441365
if (rank == mpi_rank) {
13451366

1346-
h_file = H5Fopen(fileName, H5F_ACC_RDWR, H5P_DEFAULT);
1367+
/* Set the minimal API version to avoid issues with advanced features */
1368+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
1369+
herr_t err =
1370+
H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
1371+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
1372+
if (err < 0) error("Error setting the hdf5 API version");
1373+
1374+
h_file = H5Fopen(fileName, H5F_ACC_RDWR, h_props);
13471375
if (h_file < 0)
13481376
error("Error while opening file '%s' on rank %d.", fileName, mpi_rank);
13491377

@@ -1706,6 +1734,7 @@ void write_output_serial(struct engine* e,
17061734

17071735
/* Close file */
17081736
H5Fclose(h_file);
1737+
H5Pclose(h_props);
17091738
}
17101739

17111740
/* Wait for the read of the reading to complete */

‎src/single_io.c

+8-1
Original file line numberDiff line numberDiff line change
@@ -990,9 +990,15 @@ void write_output_single(struct engine* e,
990990

991991
};
992992

993+
/* Set the minimal API version to avoid issues with advanced features */
994+
hid_t h_props = H5Pcreate(H5P_FILE_ACCESS);
995+
herr_t err = H5Pset_libver_bounds(h_props, HDF5_LOWEST_FILE_FORMAT_VERSION,
996+
HDF5_HIGHEST_FILE_FORMAT_VERSION);
997+
if (err < 0) error("Error setting the hdf5 API version");
998+
993999
/* Open file */
9941000
/* message("Opening file '%s'.", fileName); */
995-
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
1001+
h_file = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, h_props);
9961002
if (h_file < 0) error("Error while opening file '%s'.", fileName);
9971003

9981004
/* Open header to write simulation properties */
@@ -1481,6 +1487,7 @@ void write_output_single(struct engine* e,
14811487

14821488
/* Close file */
14831489
H5Fclose(h_file);
1490+
H5Pclose(h_props);
14841491

14851492
e->snapshot_output_count++;
14861493
if (e->snapshot_invoke_stf) e->stf_output_count++;

0 commit comments

Comments
 (0)
Please sign in to comment.