diff --git a/ChangeLog b/ChangeLog index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6d6f6cdb72ff0eb6969d6558f6365f502d0fd6af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -0,0 +1,15 @@ +2018-09-14 Gsell Achim + + * C-API + - H5PartSetNumPoints() renamed to H5PartSetNumItems() + - H5PartGetNumPoints() renamed to H5PartGetNumItems() + - Dataset names longer then 64 bytes are handled as error. + - Same for step/iteration names. + * core API + - we use the term 'iteration' instead of 'step' + - we use the term 'item' instead of 'point' + - re-factor function and variable names + - in printing messages/debug output fixed + - do not flush (sync to disk) after writing a dataset by default, + can be controlled by a property + diff --git a/examples/H5Part/write_setview.c b/examples/H5Part/write_setview.c index 6f56c48c87d7e7b0e036ff5e35e94bb06bed362a..b28055ba5b295b4e9bda43318e5a0525e1424873 100644 --- a/examples/H5Part/write_setview.c +++ b/examples/H5Part/write_setview.c @@ -7,6 +7,9 @@ License: see file COPYING in top level of source distribution. */ +#include +#include + #include "H5hut.h" #include "examples.h" @@ -15,16 +18,51 @@ const char* fname = "example_setview.h5"; // H5hut verbosity level const h5_int64_t h5_verbosity = H5_VERBOSE_DEFAULT; +const h5_int64_t h5_debug_mask = 0; // we are going to write multiple consecutive blocks -const h5_int64_t num_blocks = 4; -const h5_int64_t num_particles_per_block = 32; +//const h5_int64_t num_blocks = 32; +//const h5_int64_t num_particles_per_block = 1048576*8; int main ( int argc, char* argv[] ){ + if (argc < 3) { + fprintf (stderr, "Usage: %s \n", argv[0]); + exit (1); + } + + char* endptr = NULL; + long long n = strtoll (argv[1], &endptr, 10); + if (*endptr != 0) { + fprintf (stderr, "first argument (number of blocks) is not a unsigned integer!\n"); + exit (1); + } + if (n < 1) { + fprintf (stderr, "first argument (number of block) must be >= 1!\n"); + exit (1); + } + if (n == LLONG_MAX) { + fprintf (stderr, "first argument (number of block) to large!\n"); + exit (1); + } + h5_int64_t num_blocks = (h5_int64_t)n; + n = strtoll (argv[2], &endptr, 10); + if (*endptr != 0) { + fprintf (stderr, "second argument (sizeof blocks) is not a unsigned integer!\n"); + exit (1); + } + if (n < 1024) { + fprintf (stderr, "second argument (sizeof block) must be >= 1024!\n"); + exit (1); + } + if (n == LLONG_MAX) { + fprintf (stderr, "second argument (sizeof block) to large!\n"); + exit (1); + } + h5_int64_t num_particles_per_block = (h5_int64_t)n; // initialize MPI & H5hut MPI_Init (&argc, &argv); @@ -33,9 +71,16 @@ main ( MPI_Comm_rank (comm, &comm_rank); H5AbortOnError (); H5SetVerbosityLevel (h5_verbosity); + H5SetDebugMask (h5_debug_mask); + + h5_prop_t prop = H5CreateFileProp (); + H5SetPropFileAlign (prop, 1048576*8); + H5SetPropFileMPIOIndependent (prop, &comm); + //H5SetPropFileMPIOCollective (prop, &comm); // open file and create first step - h5_file_t file = H5OpenFile (fname, H5_O_WRONLY, H5_PROP_DEFAULT); + h5_file_t file = H5OpenFile (fname, H5_O_WRONLY, prop); + //H5PartSetChunkSize (file, 1048576*1); H5SetStep (file, 0); /* @@ -52,7 +97,9 @@ main ( // write multiple consecutive blocks for (int i = 0; i < num_blocks; i++) { // create fake data - h5_int32_t data[num_particles_per_block]; + //h5_int32_t data[num_particles_per_block]; + h5_int64_t *data; + data = calloc (num_particles_per_block, sizeof(*data)); for (int j = 0; j < num_particles_per_block; j++) { data[j] = j + i*num_particles_per_block + offset; } @@ -63,7 +110,7 @@ main ( offset + i*num_particles_per_block, offset + (i+1)*num_particles_per_block - 1); // write data - H5PartWriteDataInt32 (file, "data", data); + H5PartWriteDataInt64 (file, "data", data); } // done diff --git a/examples/H5Part/write_setview2.c b/examples/H5Part/write_setview2.c new file mode 100644 index 0000000000000000000000000000000000000000..03405c2c075b83976117421535be83804ba55dc1 --- /dev/null +++ b/examples/H5Part/write_setview2.c @@ -0,0 +1,120 @@ +/* + Copyright (c) 2006-2015, The Regents of the University of California, + through Lawrence Berkeley National Laboratory (subject to receipt of any + required approvals from the U.S. Dept. of Energy) and the Paul Scherrer + Institut (Switzerland). All rights reserved. + + License: see file COPYING in top level of source distribution. +*/ + +#include +#include + +#include "H5hut.h" +#include "examples.h" + +// name of output file +const char* fname = "example_setview.h5"; + +// H5hut verbosity level +const h5_int64_t h5_verbosity = H5_VERBOSE_DEFAULT; +const h5_int64_t h5_debug_mask = 0; + +// we are going to write multiple consecutive blocks +//const h5_int64_t num_blocks = 32; +//const h5_int64_t num_particles_per_block = 1048576*8; + +int +main ( + int argc, + char* argv[] + ){ + if (argc < 3) { + fprintf (stderr, "Usage: %s \n", argv[0]); + exit (1); + } + + char* endptr = NULL; + long long n = strtoll (argv[1], &endptr, 10); + if (*endptr != 0) { + fprintf (stderr, "first argument (number of blocks) is not a unsigned integer!\n"); + exit (1); + } + if (n < 1) { + fprintf (stderr, "first argument (number of block) must be >= 1!\n"); + exit (1); + } + if (n == LLONG_MAX) { + fprintf (stderr, "first argument (number of block) to large!\n"); + exit (1); + } + h5_int64_t num_blocks = (h5_int64_t)n; + n = strtoll (argv[2], &endptr, 10); + if (*endptr != 0) { + fprintf (stderr, "second argument (sizeof blocks) is not a unsigned integer!\n"); + exit (1); + } + if (n < 1024) { + fprintf (stderr, "second argument (sizeof block) must be >= 1024!\n"); + exit (1); + } + if (n == LLONG_MAX) { + fprintf (stderr, "second argument (sizeof block) to large!\n"); + exit (1); + } + h5_int64_t num_particles_per_block = (h5_int64_t)n; + + // initialize MPI & H5hut + MPI_Init (&argc, &argv); + MPI_Comm comm = MPI_COMM_WORLD; + int comm_rank = 0; + MPI_Comm_rank (comm, &comm_rank); + H5AbortOnError (); + H5SetVerbosityLevel (h5_verbosity); + H5SetDebugMask (h5_debug_mask); + + h5_prop_t prop = H5CreateFileProp (); + H5SetPropFileAlign (prop, 1048576*8); + H5SetPropFileMPIOIndependent (prop, &comm); + //H5SetPropFileMPIOCollective (prop, &comm); + + // open file and create first step + h5_file_t file = H5OpenFile (fname, H5_O_WRONLY, prop); + //H5PartSetChunkSize (file, 1048576*1); + H5SetStep (file, 0); + + /* + If we want to write consecutive blocks, the 'view' can be defined + with H5PartSetview(). Otherwise we have to define the total number + of particles with H5PartSetNumParticles(). + */ + const h5_int64_t offset = comm_rank * num_blocks * num_particles_per_block; + H5PartSetView ( + file, + offset, + offset + num_blocks*num_particles_per_block -1); + dataset_id = H5PartCreateDataSet (file, "data"); + // write multiple consecutive blocks + for (int i = 0; i < num_blocks; i++) { + // create fake data + //h5_int32_t data[num_particles_per_block]; + h5_int64_t *data; + data = calloc (num_particles_per_block, sizeof(*data)); + for (int j = 0; j < num_particles_per_block; j++) { + data[j] = j + i*num_particles_per_block + offset; + } + + // set the "view" to select a subset of the dataset + H5PartSetViewOnDataset ( + file, + offset + i*num_particles_per_block, + offset + (i+1)*num_particles_per_block - 1); + // write data + H5PartWriteDatasetInt64 (dataset_id, data); + } + H5CloseDataset (dataset_id); + // done + H5CloseFile(file); + MPI_Finalize(); + return 0; +} diff --git a/src/Fortran/H5.c b/src/Fortran/H5.c index 3a240e4814a70f80095f32b49c93b021c4414d6c..e72bc7952dc234aa9f1a8ff6a31818fbb65ccb3d 100644 --- a/src/Fortran/H5.c +++ b/src/Fortran/H5.c @@ -222,7 +222,7 @@ h5_flushstep ( ) { h5_file_t fh = h5_filehandlefor2c(f); H5_API_ENTER (h5_int64_t, "f=%p", (h5_file_p)fh); - H5_API_RETURN (h5_flush_step (fh)); + H5_API_RETURN (h5_flush_iteration (fh)); } #define h5_finalize FC_MANGLING( \ diff --git a/src/Fortran/H5Part_io.c b/src/Fortran/H5Part_io.c index 15905cd4e9c193e5c750849fb47713d0fd25c35a..9a8055ab9e82b714f927707b53df5ab6f4fa5d4d 100644 --- a/src/Fortran/H5Part_io.c +++ b/src/Fortran/H5Part_io.c @@ -28,7 +28,7 @@ h5pt_writedata_r8 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_write_data ( + h5_int64_t herr = h5u_write_dataset ( f, name2, (void*)data, H5_FLOAT64_T ); free ( name2 ); H5_API_RETURN(herr); @@ -49,7 +49,7 @@ h5pt_writedata_r4 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_write_data ( + h5_int64_t herr = h5u_write_dataset ( f, name2, (void*)data, H5_FLOAT32_T ); free ( name2 ); H5_API_RETURN(herr); @@ -70,7 +70,7 @@ h5pt_writedata_i8 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_write_data ( + h5_int64_t herr = h5u_write_dataset ( f, name2, (void*)data, H5_INT64_T ); free ( name2 ); H5_API_RETURN(herr); @@ -91,7 +91,7 @@ h5pt_writedata_i4 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_write_data ( + h5_int64_t herr = h5u_write_dataset ( f, name2, (void*)data, H5_INT32_T ); free ( name2 ); H5_API_RETURN(herr); @@ -114,7 +114,7 @@ h5pt_readdata_r8 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_read_data ( + h5_int64_t herr = h5u_read_dataset ( f, name2, data, H5_FLOAT64_T ); free ( name2 ); H5_API_RETURN(herr); @@ -135,7 +135,7 @@ h5pt_readdata_r4 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_read_data ( + h5_int64_t herr = h5u_read_dataset ( f, name2, data, H5_FLOAT32_T ); free ( name2 ); H5_API_RETURN(herr); @@ -156,7 +156,7 @@ h5pt_readdata_i8 ( "fh=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_read_data ( + h5_int64_t herr = h5u_read_dataset ( f, name2, data, H5_INT64_T ); free ( name2 ); @@ -178,7 +178,7 @@ h5pt_readdata_i4 ( "hf=%p, name='%s', data=%p, l_name=%d", (h5_file_p)f, name, data, l_name); char *name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5u_read_data ( + h5_int64_t herr = h5u_read_dataset ( f, name2, data, H5_INT32_T ); free ( name2 ); H5_API_RETURN(herr); diff --git a/src/Fortran/H5Part_model.c b/src/Fortran/H5Part_model.c index 7dfec011eaf80a90c1d65bc32dd6ff17a1da5c94..cf42b124a067b0564eb5d35df706fe0ca415742d 100755 --- a/src/Fortran/H5Part_model.c +++ b/src/Fortran/H5Part_model.c @@ -22,13 +22,13 @@ h5_int64_t h5pt_setnpoints ( const h5_int64_t* const fh, - const h5_int64_t* const npoints + const h5_int64_t* const num_items ) { h5_file_t f = h5_filehandlefor2c (fh); H5_API_ENTER (h5_int64_t, "fh=%p, npoints=%lld", - (h5_file_p)f, (long long)*npoints); - H5_API_RETURN (h5u_set_num_points (f, *npoints, 1)); + (h5_file_p)f, (long long)*num_items); + H5_API_RETURN (h5u_set_num_items (f, *num_items, 1)); } #define h5pt_setnpoints_strided FC_MANGLING ( \ @@ -37,14 +37,14 @@ h5pt_setnpoints ( h5_int64_t h5pt_setnpoints_strided ( const h5_int64_t* const fh, - const h5_int64_t* const npoints, + const h5_int64_t* const num_items, const h5_int64_t* const stride ) { h5_file_t f = h5_filehandlefor2c (fh); H5_API_ENTER (h5_int64_t, "fh=%p, npoints=%lld, stride=%lld", - (h5_file_p)f, (long long)*npoints, (long long)*stride); - H5_API_RETURN (h5u_set_num_points (f, *npoints, *stride)); + (h5_file_p)f, (long long)*num_items, (long long)*stride); + H5_API_RETURN (h5u_set_num_items (f, *num_items, *stride)); } @@ -172,7 +172,7 @@ h5pt_getnpoints ( ) { h5_file_t f = h5_filehandlefor2c (fh); H5_API_ENTER (h5_int64_t, "fh=%p", (h5_file_p)f); - H5_API_RETURN (h5u_get_num_points (f)); + H5_API_RETURN (h5u_get_num_items (f)); } #define h5pt_getdatasetname FC_MANGLING ( \ diff --git a/src/Fortran/H5_attribs.c b/src/Fortran/H5_attribs.c index 00eaf8671e3aa43a04533eadb51cb2727cc847a1..a1ac3cd11d5b6157708f9befc8d15ca0b182ff0a 100644 --- a/src/Fortran/H5_attribs.c +++ b/src/Fortran/H5_attribs.c @@ -380,7 +380,7 @@ h5_getnstepattribs ( H5_API_ENTER (h5_int64_t, "fh=%p", (h5_file_p)f); - H5_API_RETURN (h5_get_num_step_attribs (f)); + H5_API_RETURN (h5_get_num_iteration_attribs (f)); } #define h5_getstepattribinfo FC_MANGLING( \ @@ -405,7 +405,7 @@ h5_getstepattribinfo ( (h5_file_p)f, (long long)*attrib_idx, attrib_name, attrib_type, attrib_nelem); - h5_int64_t h5err = h5_get_step_attrib_info_by_idx ( + h5_int64_t h5err = h5_get_iteration_attrib_info_by_idx ( f, *attrib_idx - 1, attrib_name, l_attrib_name, @@ -435,7 +435,7 @@ h5_getstepattribinfo_by_name ( (h5_file_p)fh, l_name, _name, _type, _nelem); char* name = h5_strdupfor2c (_name, l_name); - h5_int64_t h5err = h5_get_step_attrib_info_by_name ( + h5_int64_t h5err = h5_get_iteration_attrib_info_by_name ( f, name, _type, @@ -459,7 +459,7 @@ h5_getstepattribinfo_by_name ( */ static inline h5_int64_t -write_step_attrib ( +write_iteration_attrib ( const h5_file_t fh, const char* name, const int l_name, @@ -468,13 +468,14 @@ write_step_attrib ( const hsize_t l_buffer ) { char *name2 = h5_strdupfor2c (name, l_name); - h5_int64_t herr = h5_write_step_attrib (fh, name2, type, buffer, l_buffer ); + h5_int64_t herr = h5_write_iteration_attrib ( + fh, name2, type, buffer, l_buffer ); free (name2); return herr; } static inline h5_int64_t -read_step_attrib ( +read_iteration_attrib ( const h5_file_t fh, const char* name, const int l_name, @@ -482,7 +483,7 @@ read_step_attrib ( void* const buffer ) { char* name2 = h5_strdupfor2c ( name, l_name ); - h5_int64_t herr = h5_read_step_attrib (fh, name2, type, buffer); + h5_int64_t herr = h5_read_iteration_attrib (fh, name2, type, buffer); free (name2); return herr; } @@ -503,7 +504,7 @@ h5_writestepattrib_string ( "f=%p, name='%.*s', buffer='%.*s'", (h5_file_p)f, l_name, name, l_buffer, buffer); char *buffer2 = h5_strdupfor2c (buffer, l_buffer); - h5_int64_t herr = write_step_attrib ( + h5_int64_t herr = write_iteration_attrib ( f, name, l_name, H5_STRING_T, buffer2, strlen(buffer2)+1 ); free (buffer2); H5_API_RETURN (herr); @@ -524,7 +525,8 @@ h5_readstepattrib_string ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer='%.*s'", (h5_file_p)f, l_name, name, l_buffer, buffer); - h5_int64_t herr = read_step_attrib (f, name, l_name, H5_STRING_T, buffer); + h5_int64_t herr = read_iteration_attrib ( + f, name, l_name, H5_STRING_T, buffer); h5_strc2for (buffer, l_buffer); H5_API_RETURN (herr); } @@ -544,7 +546,7 @@ h5_writestepattrib_r8 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p, nelem=%lld", (h5_file_p)f, l_name, name, buffer, (long long)*nelem); - H5_API_RETURN (write_step_attrib( + H5_API_RETURN (write_iteration_attrib( f, name, l_name, H5_FLOAT64_T, @@ -565,7 +567,7 @@ h5_readstepattrib_r8 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p", (h5_file_p)f, l_name, name, buffer); - H5_API_RETURN (read_step_attrib( + H5_API_RETURN (read_iteration_attrib( f, name, l_name, H5_FLOAT64_T, @@ -587,7 +589,7 @@ h5_writestepattrib_r4 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p, nelem=%lld", (h5_file_p)f, l_name, name, buffer, (long long)*nelem); - H5_API_RETURN (write_step_attrib( + H5_API_RETURN (write_iteration_attrib( f, name, l_name, H5_FLOAT32_T, @@ -608,7 +610,7 @@ h5_readstepattrib_r4 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p", (h5_file_p)f, l_name, name, buffer); - H5_API_RETURN (read_step_attrib( + H5_API_RETURN (read_iteration_attrib( f, name, l_name, H5_FLOAT32_T, @@ -630,7 +632,7 @@ h5_writestepattrib_i8 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p, nelem=%lld", (h5_file_p)f, l_name, name, buffer, (long long)*nelem); - H5_API_RETURN (write_step_attrib( + H5_API_RETURN (write_iteration_attrib( f, name, l_name, H5_INT64_T, @@ -651,7 +653,7 @@ h5_readstepattrib_i8 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p", (h5_file_p)f, l_name, name, buffer); - H5_API_RETURN (read_step_attrib( + H5_API_RETURN (read_iteration_attrib( f, name, l_name, H5_INT64_T, @@ -673,7 +675,7 @@ h5_writestepattrib_i4 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p, nelem=%lld", (h5_file_p)f, l_name, name, buffer, (long long)*nelem); - H5_API_RETURN (write_step_attrib( + H5_API_RETURN (write_iteration_attrib( f, name, l_name, H5_INT32_T, @@ -694,7 +696,7 @@ h5_readstepattrib_i4 ( H5_API_ENTER (h5_int64_t, "f=%p, name='%.*s', buffer=%p", (h5_file_p)f, l_name, name, buffer); - H5_API_RETURN (read_step_attrib( + H5_API_RETURN (read_iteration_attrib( f, name, l_name, H5_INT32_T, diff --git a/src/Fortran/H5_model.c b/src/Fortran/H5_model.c index a2bc9919b5c93d529e3998f18adb7f0a62083911..6cbc60b39b0ff8cf96e44aa6db83c84765b5020d 100644 --- a/src/Fortran/H5_model.c +++ b/src/Fortran/H5_model.c @@ -28,7 +28,7 @@ h5_hasstep ( int, "f=%p, stepno=%lld", (h5_file_p)fh, (long long int)step); - H5_API_RETURN (h5_has_step (fh, (*step)-1)); + H5_API_RETURN (h5_has_iteration (fh, (*step)-1)); } #define h5_setstep FC_MANGLING( \ @@ -41,7 +41,7 @@ h5_setstep ( h5_file_t fh = h5_filehandlefor2c(f); H5_API_ENTER (h5_int64_t, "f=%p, step=%lld", (h5_file_p)fh, (long long)*step); - H5_API_RETURN (h5_set_step (fh, (*step)-1)); + H5_API_RETURN (h5_set_iteration (fh, (*step)-1)); } #define h5_getstep FC_MANGLING( \ @@ -54,7 +54,7 @@ h5_getstep ( h5_file_t fh = h5_filehandlefor2c(f); H5_API_ENTER (h5_int64_t, "f=%p", (h5_file_p)fh); - H5_API_RETURN (h5_get_step (fh) + 1); + H5_API_RETURN (h5_get_iteration (fh) + 1); } #define h5_getnsteps FC_MANGLING( \ @@ -67,5 +67,5 @@ h5_getnsteps ( h5_file_t fh = h5_filehandlefor2c(f); H5_API_ENTER (h5_int64_t, "f=%p", (h5_file_p)fh); - H5_API_RETURN (h5_get_num_steps (fh)); + H5_API_RETURN (h5_get_num_iterations (fh)); } diff --git a/src/h5core/h5_attribs.c b/src/h5core/h5_attribs.c index b9d113dec105b728b011fabe62449cee2adf1e67..fe93f4fa47a9212ba9345dbe251d7fa7c7c0f2a3 100644 --- a/src/h5core/h5_attribs.c +++ b/src/h5core/h5_attribs.c @@ -31,7 +31,7 @@ h5_has_file_attrib ( } h5_err_t -h5_has_step_attrib ( +h5_has_iteration_attrib ( const h5_file_t f_, const char* const attrib_name ) { @@ -41,9 +41,8 @@ h5_has_step_attrib ( "attrib_name='%s'", f, attrib_name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - TRY (ret_value = hdf5_attribute_exists (f->step_gid, attrib_name)); + check_iteration_handle_is_valid (f); + TRY (ret_value = hdf5_attribute_exists (f->iteration_gid, attrib_name)); H5_RETURN (ret_value); } @@ -59,14 +58,13 @@ h5_get_num_file_attribs ( } h5_ssize_t -h5_get_num_step_attribs ( +h5_get_num_iteration_attribs ( const h5_file_t f_ /*!< handle to open file */ ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - TRY (ret_value = hdf5_get_num_attribute (f->step_gid)); + check_iteration_handle_is_valid (f); + TRY (ret_value = hdf5_get_num_attribute (f->iteration_gid)); H5_RETURN (ret_value); } @@ -122,7 +120,7 @@ h5_get_file_attrib_info_by_name ( } h5_err_t -h5_get_step_attrib_info_by_idx ( +h5_get_iteration_attrib_info_by_idx ( const h5_file_t f_, /*!< handle to open file */ const h5_size_t attrib_idx, /*!< index of attribute */ char* attrib_name, /*!< OUT: name of attribute */ @@ -140,10 +138,9 @@ h5_get_step_attrib_info_by_idx ( (long long unsigned)attrib_idx, attrib_name, (long long unsigned)len_attrib_name, attrib_type, attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (ret_value = h5priv_get_attrib_info_by_idx ( - f->step_gid, + f->iteration_gid, attrib_idx, attrib_name, len_attrib_name, attrib_type, attrib_nelem)); @@ -151,7 +148,7 @@ h5_get_step_attrib_info_by_idx ( } h5_err_t -h5_get_step_attrib_info_by_name ( +h5_get_iteration_attrib_info_by_name ( const h5_file_t f_, /*!< handle to open file */ const char* const attrib_name, /*!< OUT: name of attribute */ h5_int64_t* const attrib_type, /*!< OUT: H5 type of attribute */ @@ -165,10 +162,9 @@ h5_get_step_attrib_info_by_name ( f, attrib_name, attrib_type, attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (ret_value = h5priv_get_attrib_info_by_name ( - f->step_gid, + f->iteration_gid, attrib_name, attrib_type, attrib_nelem)); H5_RETURN (ret_value); @@ -199,7 +195,7 @@ h5_read_file_attrib ( } h5_err_t -h5_read_step_attrib ( +h5_read_iteration_attrib ( const h5_file_t f_, const char* const attrib_name, const h5_types_t attrib_type, @@ -213,12 +209,10 @@ h5_read_step_attrib ( attrib_name, (long long int)attrib_type, attrib_value); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - CHECK_READABLE_MODE (f); + check_iteration_is_readable (f); TRY (ret_value = h5priv_read_attrib ( - f->step_gid, + f->iteration_gid, attrib_name, attrib_type, attrib_value)); @@ -263,7 +257,7 @@ h5_write_file_attrib ( } h5_err_t -h5_write_step_attrib ( +h5_write_iteration_attrib ( const h5_file_t f_, const char* const attrib_name, const h5_types_t attrib_type, @@ -279,19 +273,17 @@ h5_write_step_attrib ( (long long int)attrib_type, attrib_value, (long long)attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - CHECK_WRITABLE_MODE (f); + check_iteration_is_writable (f); if (is_appendonly (f)) { TRY (h5priv_append_attrib ( - f->step_gid, + f->iteration_gid, attrib_name, attrib_type, attrib_value, attrib_nelem)); } else { TRY (h5priv_write_attrib ( - f->step_gid, + f->iteration_gid, attrib_name, attrib_type, attrib_value, diff --git a/src/h5core/h5_err.c b/src/h5core/h5_err.c index 93d16abe882607156501a1ca0626ed22fa7eb695..7c7f3463e438f04d87bdb07ca24e5b0c358142fe 100644 --- a/src/h5core/h5_err.c +++ b/src/h5core/h5_err.c @@ -103,7 +103,7 @@ h5_verror ( const char* const fmt, va_list ap ) { - if (h5_log_level == 0) return; + if (__h5_log_level == 0) return; char fmt2[2048]; snprintf (fmt2, sizeof(fmt2), "[proc %d] E: %s: %s\n", @@ -127,7 +127,7 @@ h5_report_errorhandler ( const char* const fmt, va_list ap ) { - if (h5_log_level > 0) { + if (__h5_log_level > 0) { h5_verror (fmt, ap); } return h5_errno; @@ -144,7 +144,7 @@ h5_abort_errorhandler ( const char* const fmt, va_list ap ) { - if (h5_log_level > 0) { + if (__h5_log_level > 0) { h5_verror (fmt, ap); } #ifdef H5_HAVE_PARALLEL diff --git a/src/h5core/h5_file.c b/src/h5core/h5_file.c index 2b703310a1ebbb86197e912ef0b20542a5d947f3..d984a6f443f88068252eb394ee4f432e7cd36ad4 100644 --- a/src/h5core/h5_file.c +++ b/src/h5core/h5_file.c @@ -42,12 +42,7 @@ h5_check_filehandle ( const h5_file_t f_ /*!< filehandle to check validity of */ ) { h5_file_p f = (h5_file_p)f_; - if (f == NULL || f_ == H5_FAILURE || f->file < 0 || f->u == NULL || f->b == NULL) { - return h5_error ( - H5_ERR_BADF, - "Called with bad filehandle."); - } - return H5_SUCCESS; + return is_valid_file_handle (f) ? H5_SUCCESS : H5_ERR; } hid_t @@ -56,7 +51,7 @@ h5_get_hdf5_file( ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (hid_t, "f=%p", f); - CHECK_FILEHANDLE (f); + check_file_handle_is_valid (f); H5_RETURN (f->file); } @@ -69,7 +64,7 @@ hdf5_error_handler ( void* __f ) { UNUSED_ARGUMENT (__f); - if (h5_get_loglevel() >= 5) { + if (h5_get_loglevel() >= 4) { H5Eprint (estack_id, stderr); } return 0; @@ -175,12 +170,12 @@ set_default_file_props ( h5_prop_file_t* props = (h5_prop_file_t*)_props; bzero (props, sizeof (*props)); props->class = H5_PROP_FILE; - TRY (props->prefix_step_name = h5_calloc (1, H5_STEPNAME_LEN)); + TRY (props->prefix_iteration_name = h5_calloc (1, H5_ITERATION_NAME_LEN)); strncpy ( - props->prefix_step_name, - H5_STEPNAME, - H5_STEPNAME_LEN - 1); - props->width_step_idx = H5_STEPWIDTH; + props->prefix_iteration_name, + H5_ITERATION_NAME, + H5_ITERATION_NAME_LEN - 1); + props->width_iteration_idx = H5_ITERATION_NUM_WIDTH; #ifdef H5_HAVE_PARALLEL props->comm = MPI_COMM_WORLD; #endif @@ -271,7 +266,8 @@ h5_set_prop_file_core_vfd ( const h5_int64_t increment ) { h5_prop_file_t* props = (h5_prop_file_t*)_props; - H5_CORE_API_ENTER (h5_err_t, "props=%p, increment=%lld", props, (long long int)increment); + H5_CORE_API_ENTER (h5_err_t, "props=%p, increment=%lld", + props, (long long int)increment); if (props->class != H5_PROP_FILE) { H5_RETURN_ERROR ( @@ -280,7 +276,9 @@ h5_set_prop_file_core_vfd ( (long long int)props->class); } #ifdef H5_HAVE_PARALLEL - props->flags &= ~(H5_VFD_MPIO_COLLECTIVE | H5_VFD_MPIO_INDEPENDENT | H5_VFD_MPIO_POSIX); + props->flags &= ~(H5_VFD_MPIO_COLLECTIVE | + H5_VFD_MPIO_INDEPENDENT | + H5_VFD_MPIO_POSIX); props->flags |= H5_VFD_MPIO_INDEPENDENT; props->comm = MPI_COMM_SELF; props->increment = increment; @@ -315,26 +313,24 @@ h5_set_prop_file_align ( H5_RETURN (H5_SUCCESS); } -#if 0 h5_err_t -h5_set_prop_file_flush_step ( +h5_set_prop_file_flush_after_write ( h5_prop_t _props ) { h5_prop_file_t* props = (h5_prop_file_t*)_props; H5_CORE_API_ENTER ( h5_err_t, - "props=%p, align=%lld", - props, (long long int)align); + "props=%p", + props); if (props->class != H5_PROP_FILE) { H5_RETURN_ERROR ( H5_ERR_INVAL, "Invalid property class: %lld", (long long int)props->class); } - props-> = align; + props->flush = 1; H5_RETURN (H5_SUCCESS); } -#endif h5_err_t h5_set_prop_file_throttle ( @@ -411,7 +407,7 @@ h5_close_prop ( switch (prop->class) { case H5_PROP_FILE: { h5_prop_file_t* file_prop = (h5_prop_file_t*)prop; - TRY (h5_free (file_prop->prefix_step_name)); + TRY (h5_free (file_prop->prefix_iteration_name)); break; } default: @@ -436,14 +432,14 @@ open_file ( f->nprocs = 1; // queried later f->myproc = 0; // queried later - f->step_gid = -1; + f->iteration_gid = -1; - TRY (f->step_name = h5_calloc (2, H5_STEPNAME_LEN)); + TRY (f->iteration_name = h5_calloc (2, H5_ITERATION_NAME_LEN)); sprintf ( - f->step_name, + f->iteration_name, "%s#%0*lld", - f->props->prefix_step_name, - f->props->width_step_idx, (long long)f->step_idx); + f->props->prefix_iteration_name, + f->props->width_iteration_idx, (long long)f->iteration_idx); TRY (hdf5_set_errorhandler (H5E_DEFAULT, hdf5_error_handler, NULL)); @@ -526,15 +522,17 @@ h5_open_file2 ( f->props->align = props->align; strncpy ( - f->props->prefix_step_name, - props->prefix_step_name, - H5_STEPNAME_LEN - 1); - f->props->width_step_idx = props->width_step_idx; + f->props->prefix_iteration_name, + props->prefix_iteration_name, + H5_ITERATION_NAME_LEN - 1); + f->props->width_iteration_idx = props->width_iteration_idx; } TRY (open_file (f, filename, mode)); - TRY (h5_set_stepname_fmt ((uintptr_t)f, H5_STEPNAME, H5_STEPWIDTH)); + TRY (h5_set_iteration_name_fmt ((uintptr_t)f, + H5_ITERATION_NAME, + H5_ITERATION_NUM_WIDTH)); H5_RETURN ((h5_file_t)f); } @@ -595,9 +593,9 @@ h5_close_file ( H5_CORE_API_ENTER (h5_err_t, "f=%p", f); h5_errno = H5_SUCCESS; - CHECK_FILEHANDLE (f); + check_file_handle_is_valid (f); - TRY (h5priv_close_step (f)); + TRY (h5priv_close_iteration (f)); TRY (h5upriv_close_file (f)); TRY (h5bpriv_close_file (f)); TRY (hdf5_close_property (f->props->xfer_prop)); @@ -607,7 +605,7 @@ h5_close_file ( TRY (hdf5_flush (f->file, H5F_SCOPE_GLOBAL)); TRY (h5_close_prop ((h5_prop_t)f->props)); TRY (hdf5_close_file (f->file)); - TRY (h5_free (f->step_name)); + TRY (h5_free (f->iteration_name)); TRY (h5_free (f)); H5_RETURN (H5_SUCCESS); } @@ -623,16 +621,15 @@ h5_close_h5hut ( } h5_err_t -h5_flush_step ( +h5_flush_iteration ( const h5_file_t f_ ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (h5_err_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_writable (f); ret_value = H5_SUCCESS; - if (f->step_gid >= 0) { - TRY (ret_value = hdf5_flush (f->step_gid, H5F_SCOPE_LOCAL)); + if (f->iteration_gid >= 0) { + TRY (ret_value = hdf5_flush (f->iteration_gid, H5F_SCOPE_LOCAL)); } H5_RETURN (ret_value); } @@ -643,7 +640,7 @@ h5_flush_file ( ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (h5_err_t, "f=%p", f); - CHECK_FILEHANDLE (f); + check_file_is_writable (f); TRY (ret_value = hdf5_flush (f->file, H5F_SCOPE_GLOBAL)); H5_RETURN (ret_value); } @@ -652,15 +649,15 @@ h5_flush_file ( /*! \ingroup h5_core_filehandling - Define format of the step names. + Define format of the iteration names. - Example: ==H5FedDefineStepNameFormat( f, "Step", 6 )== defines step names - like ==Step#000042==. + Example: ==h5_set_iteration_name_fmt (f, "Step", 6)== + defines iteration names like ==Step#000042==. \return \c H5_SUCCESS or error code */ h5_err_t -h5_set_stepname_fmt ( +h5_set_iteration_name_fmt ( const h5_file_t f_, const char* name, int width @@ -669,14 +666,14 @@ h5_set_stepname_fmt ( H5_CORE_API_ENTER (h5_err_t, "f=%p, name='%s', width=%d", f, name, width); - CHECK_FILEHANDLE (f); + check_file_handle_is_valid (f); if (width < 0) width = 0; - else if (width > H5_STEPNAME_LEN - 1) width = H5_STEPNAME_LEN - 1; + else if (width > H5_ITERATION_NAME_LEN - 1) width = H5_ITERATION_NAME_LEN - 1; strncpy ( - f->props->prefix_step_name, + f->props->prefix_iteration_name, name, - H5_STEPNAME_LEN - 1); - f->props->width_step_idx = width; + H5_ITERATION_NAME_LEN - 1); + f->props->width_iteration_idx = width; H5_RETURN (H5_SUCCESS); } @@ -684,16 +681,16 @@ h5_set_stepname_fmt ( /*! \ingroup h5_core_filehandling - Get format of the step names. + Get format of the iteration names. \return \c H5_SUCCESS or error code */ h5_err_t -h5_get_stepname_fmt ( +h5_get_iteration_name_fmt ( const h5_file_t f_, /*!< Handle to file */ - char* const name, /*!< OUT: Prefix */ - const int l_name, /*!< length of buffer name */ - int* const width /*!< OUT: Width of the number */ + char* const name, /*!< OUT: Prefix */ + const int l_name, /*!< length of buffer name */ + int* const width /*!< OUT: Width of the number */ ) { h5_file_p f = (h5_file_p)f_; UNUSED_ARGUMENT (f); @@ -706,19 +703,18 @@ h5_get_stepname_fmt ( /*! \ingroup h5_core_filehandling - Get current step number. + Get current iteration number. - \return Current step number or error code + \return Current iteration number or error code */ h5_id_t -h5_get_step ( +h5_get_iteration ( const h5_file_t f_ /*!< file handle */ ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (h5_id_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - H5_RETURN (f->step_idx); + check_iteration_is_readable (f); + H5_RETURN (f->iteration_idx); } /*! @@ -734,39 +730,39 @@ h5_get_num_procs ( ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (int, "f=%p", f); - CHECK_FILEHANDLE (f); + check_file_handle_is_valid (f); H5_RETURN (f->nprocs); } /*! \ingroup h5_core_filehandling - Get number of steps. + Get number of iterations. - \return Number of steps or error code + \return Number of iterations or error code */ h5_ssize_t -h5_get_num_steps( +h5_get_num_iterations ( const h5_file_t f_ /*!< file handle */ ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (int, "f=%p", f); - CHECK_FILEHANDLE (f); + check_file_handle_is_valid (f); TRY (ret_value = hdf5_get_num_groups_matching_prefix ( f->root_gid, - f->props->prefix_step_name)); + f->props->prefix_iteration_name)); H5_RETURN (ret_value); } /*! \ingroup h5_core_filehandling - Start traversing steps. + Start traversing iterations. \return \c H5_SUCCESS or error code */ h5_err_t -h5_start_traverse_steps ( +h5_start_traverse_iterations ( const h5_file_t f_ /*!< file handle */ ) { h5_file_p f = (h5_file_p)f_; @@ -784,12 +780,12 @@ h5_start_traverse_steps ( /*! \ingroup h5_core_filehandling - Go to next step. + Go to next iteration. \return \c H5_SUCCESS or error code */ h5_err_t -h5_traverse_steps ( +h5_traverse_iterations ( const h5_file_t f_ /*!< file handle */ ) { h5_file_p f = (h5_file_p)f_; diff --git a/src/h5core/h5_log.c b/src/h5core/h5_log.c index 5056795e95fc7e601ad418ba5738816d81be1813..23901667ed726f71f71b1d04b6f7d486aff84fb9 100644 --- a/src/h5core/h5_log.c +++ b/src/h5core/h5_log.c @@ -13,8 +13,8 @@ extern int h5_myproc; -h5_int64_t h5_log_level = H5_VERBOSE_ERROR; -h5_int64_t h5_debug_mask = 0; +h5_int64_t __h5_log_level = H5_VERBOSE_ERROR; +h5_int64_t __h5_debug_mask = 0; struct call_stack h5_call_stack; @@ -65,7 +65,7 @@ h5_err_t h5_set_loglevel ( const h5_int64_t level /*!< log level */ ) { - h5_log_level = level & 0x7; + __h5_log_level = level & 0x7; return H5_SUCCESS; } @@ -73,8 +73,7 @@ h5_err_t h5_set_debug_mask ( const h5_int64_t mask /*!< debug level */ ) { - h5_log_level = H5_VERBOSE_DEBUG; - h5_debug_mask = mask; + __h5_debug_mask = mask; return H5_SUCCESS; } @@ -89,7 +88,7 @@ h5_int64_t h5_get_loglevel ( void ) { - return h5_log_level; + return __h5_log_level; } void @@ -111,7 +110,7 @@ h5_warn ( const char* fmt, ... ) { - if (h5_log_level >= 2) { + if (__h5_log_level >= 2) { va_list ap; va_start (ap, fmt); h5priv_vprintf (stderr, "W", h5_get_funcname(), fmt, ap); @@ -125,7 +124,7 @@ h5_info ( const char* fmt, ... ) { - if (h5_log_level >= 3) { + if (__h5_log_level >= 3) { va_list ap; va_start (ap, fmt); h5priv_vprintf (stdout, "I", h5_get_funcname(), fmt, ap); @@ -138,7 +137,7 @@ h5_debug ( const char* const fmt, ... ) { - if (h5_log_level >= 4) { + if (__h5_log_level >= 4) { char prefix[1024]; snprintf (prefix, sizeof(prefix), "%*s %s", h5_call_stack_get_level(), "", diff --git a/src/h5core/h5_model.c b/src/h5core/h5_model.c index 648d8452623760fad897f697905fa77c94d49daa..c14ce6388c480a22ac76e34fb9ba2df30ac398bf 100644 --- a/src/h5core/h5_model.c +++ b/src/h5core/h5_model.c @@ -15,94 +15,94 @@ #include "private/h5_model.h" h5_err_t -h5priv_close_step ( +h5priv_close_iteration ( const h5_file_p f ) { H5_PRIV_API_ENTER (h5_err_t, "f=%p", f); - if (f->step_gid <= 0) + if (f->iteration_gid <= 0) H5_LEAVE (H5_SUCCESS); - TRY (hdf5_close_group (f->step_gid)); + TRY (hdf5_close_group (f->iteration_gid)); - f->step_gid = -1; + f->iteration_gid = -1; H5_RETURN (H5_SUCCESS); } h5_err_t -h5_set_step ( +h5_set_iteration ( const h5_file_t f_, /*!< [in] Handle to open file */ - const h5_id_t step_idx /*!< [in] Step to set. */ + const h5_id_t iteration_idx /*!< [in] Iteration to set. */ ) { h5_file_p f = (h5_file_p)f_; H5_CORE_API_ENTER (h5_err_t, - "f=%p, step_idx=%lld", - f, (long long)step_idx); + "f=%p, iteration_idx=%lld", + f, (long long)iteration_idx); CHECK_FILEHANDLE (f); - TRY (h5priv_close_step (f)); - f->step_idx = step_idx; + TRY (h5priv_close_iteration (f)); + f->iteration_idx = iteration_idx; sprintf ( - f->step_name, + f->iteration_name, "%s#%0*lld", - f->props->prefix_step_name, f->props->width_step_idx, - (long long) f->step_idx); + f->props->prefix_iteration_name, f->props->width_iteration_idx, + (long long) f->iteration_idx); h5_info ( - "Open step #%lld for file %lld", - (long long)f->step_idx, + "Open iteration #%lld in file %lld", + (long long)f->iteration_idx, (long long)(size_t) f); h5_err_t exists; - TRY (exists = hdf5_link_exists (f->file, f->step_name)); + TRY (exists = hdf5_link_exists (f->file, f->iteration_name)); if (exists) { - TRY (f->step_gid = h5priv_open_group ( + TRY (f->iteration_gid = h5priv_open_group ( f->file, - f->step_name)); + f->iteration_name)); } else if (is_writable (f)) { - TRY (f->step_gid = h5priv_create_group ( + TRY (f->iteration_gid = h5priv_create_group ( f->file, - f->step_name)); + f->iteration_name)); } H5_RETURN (H5_SUCCESS); } /* returns: - TRUE (value > 0): if step exists - FALSE (i.e. 0): if step does not exist + TRUE (value > 0): if iteration exists + FALSE (i.e. 0): if iteration does not exist H5_FAILURE: on error */ h5_err_t -h5_has_step ( +h5_has_iteration ( const h5_file_t f_, /*!< [in] Handle to open file */ - const h5_id_t step_idx /*!< [in] Step number to query */ + const h5_id_t iteration_idx /*!< [in] Step number to query */ ) { h5_file_p f = (h5_file_p)f_; - H5_CORE_API_ENTER (h5_err_t, "f=%p, step_idx=%lld", f, (long long)step_idx); + H5_CORE_API_ENTER (h5_err_t, + "f=%p, iteration_idx=%lld", + f, (long long)iteration_idx); CHECK_FILEHANDLE (f); - char name[2*H5_STEPNAME_LEN]; + char name[2*H5_ITERATION_NAME_LEN]; sprintf (name, "%s#%0*lld", - f->props->prefix_step_name, f->props->width_step_idx, - (long long)step_idx); + f->props->prefix_iteration_name, f->props->width_iteration_idx, + (long long)iteration_idx); TRY (ret_value = hdf5_link_exists (f->file, name)); H5_RETURN (ret_value); } h5_err_t h5priv_normalize_dataset_name ( - const char *name, - char *name2 + char* const name ) { - H5_CORE_API_ENTER (h5_err_t, "name='%s', name2='%p'", name, name2); - if ( strlen(name) > H5_DATANAME_LEN-1 ) { - strncpy ( name2, name, H5_DATANAME_LEN-1 ); - name2[H5_DATANAME_LEN-1] = '\0'; - h5_warn ("Truncated name '%s' to '%s'.", name, name2); - } else { - strcpy (name2, name); + H5_CORE_API_ENTER (h5_err_t, "name='%s'", name); + if (strlen(name) > H5_DATANAME_LEN-1) { + H5_RETURN_ERROR ( + H5_ERR_INVAL, + "Dataset name '%s' to long! " + "Must be less then %d characters.", + name, H5_DATANAME_LEN); } - - if ( strcmp( name2, H5BLOCK_GROUPNAME_BLOCK ) == 0 ) { + if (strcmp (name, H5BLOCK_GROUPNAME_BLOCK) == 0) { H5_RETURN_ERROR ( H5_ERR_INVAL, "Can't create dataset or field with name '%s'" diff --git a/src/h5core/h5b_attribs.c b/src/h5core/h5b_attribs.c index 81a502324f0d0214a7c3e39d6933b331b53b74a3..76d4284b7fc7d94fe945638f9e66e22f301e1792 100644 --- a/src/h5core/h5b_attribs.c +++ b/src/h5core/h5b_attribs.c @@ -33,9 +33,7 @@ h5b_write_field_attrib ( (long long int)attrib_type, attrib_value, (long long)attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_WRITABLE_MODE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_writable (f); TRY( h5bpriv_create_field_group(f, field_name) ); if (is_appendonly (f)) { @@ -74,8 +72,7 @@ h5b_read_field_attrib ( attrib_name, (long long)attrib_type, buffer); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_readable (f); TRY (h5bpriv_open_field_group(f, field_name)); @@ -102,8 +99,7 @@ h5b_has_field_attrib ( f, field_name, attrib_name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_field_group(f, field_name)); @@ -120,8 +116,7 @@ h5b_get_num_field_attribs ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_err_t, "f=%p field_name='%s'", f, field_name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_field_group(f, field_name)); @@ -151,8 +146,7 @@ h5b_get_field_attrib_info_by_idx ( (long long unsigned)attrib_idx, attrib_name, (long long unsigned)len_attrib_name, attrib_type, attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_field_group(f, field_name)); TRY (ret_value = h5priv_get_attrib_info_by_idx ( f->b->field_gid, @@ -180,8 +174,7 @@ h5b_get_field_attrib_info_by_name ( field_name, attrib_name, attrib_type, attrib_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_field_group(f, field_name)); TRY (ret_value = h5priv_get_attrib_info_by_name ( f->b->field_gid, @@ -248,8 +241,7 @@ h5b_set_3d_field_coords ( field_name, attrib_name, coords, (long long unsigned)n_coords); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_writable (f); TRY (check_coords (f, rank, n_coords)); TRY (h5b_write_field_attrib ( @@ -284,8 +276,8 @@ h5b_get_3d_field_coords ( field_name, attrib_name, coords, (long long unsigned)n_coords); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + + check_iteration_is_readable (f); TRY (check_coords (f, rank, n_coords)); TRY (h5b_read_field_attrib ( diff --git a/src/h5core/h5b_io.c b/src/h5core/h5b_io.c index 40b3045aa9b9bc062645180167bdab07575eda51..e57711ce581d08d0a95d51eb44dd0d240d561ea8 100644 --- a/src/h5core/h5b_io.c +++ b/src/h5core/h5b_io.c @@ -256,9 +256,7 @@ h5b_write_scalar_data ( H5_CORE_API_ENTER (h5_err_t, "f=%p, field_name='%s', data=%p, type=%lld", f, field_name, data, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_WRITABLE_MODE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_writable (f); CHECK_LAYOUT (f); TRY (h5bpriv_create_field_group (f, field_name)); @@ -285,9 +283,7 @@ h5b_write_vector3d_data ( "zdata=%p, " "type=%lld", f, field_name, xdata, ydata, zdata, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_WRITABLE_MODE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_writable (f); CHECK_LAYOUT (f); TRY (h5bpriv_create_field_group(f, field_name)); @@ -430,8 +426,7 @@ h5b_read_scalar_data ( H5_CORE_API_ENTER (h5_err_t, "f=%p, field_name='%s', data=%p, type=%lld", f, field_name, data, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_readable (f); CHECK_LAYOUT (f); TRY (h5bpriv_open_field_group(f, field_name)); @@ -457,8 +452,7 @@ h5b_read_vector3d_data ( "zdata=%p, " "type=%lld", f, field_name, xdata, ydata, zdata, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_readable (f); CHECK_LAYOUT (f); TRY (h5bpriv_open_field_group(f, field_name)); diff --git a/src/h5core/h5b_model.c b/src/h5core/h5b_model.c index e4e047b222f209ee799ab1c03923606dbde7aabd..7feb8513769737029eebb58ffbc32cc69ca63a0d 100644 --- a/src/h5core/h5b_model.c +++ b/src/h5core/h5b_model.c @@ -41,9 +41,8 @@ h5b_has_field_data ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_err_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - TRY (ret_value = hdf5_link_exists (f->step_gid, H5BLOCK_GROUPNAME_BLOCK)); + check_iteration_handle_is_valid (f); + TRY (ret_value = hdf5_link_exists (f->iteration_gid, H5BLOCK_GROUPNAME_BLOCK)); H5_RETURN (ret_value); } @@ -453,12 +452,12 @@ h5bpriv_open_block_group ( h5b_fdata_t *b = f->b; TRY (hdf5_close_group (b->block_gid)); - b->block_gid = hdf5_open_group (f->step_gid, H5BLOCK_GROUPNAME_BLOCK); + b->block_gid = hdf5_open_group (f->iteration_gid, H5BLOCK_GROUPNAME_BLOCK); if (f->b->block_gid < 0) H5_RETURN_ERROR ( H5_ERR_INVAL, "%s", - "Time step does not contain H5Block data!"); + "step/iteration does not contain H5Block data!"); H5_RETURN (H5_SUCCESS); } @@ -469,14 +468,14 @@ _create_block_group ( ) { H5_PRIV_FUNC_ENTER (h5_err_t, "f=%p", f); h5_err_t exists; - TRY (exists = hdf5_link_exists (f->step_gid, H5BLOCK_GROUPNAME_BLOCK)); + TRY (exists = hdf5_link_exists (f->iteration_gid, H5BLOCK_GROUPNAME_BLOCK)); if (exists > 0) { TRY (h5bpriv_open_block_group(f)); } else { TRY (hdf5_close_group(f->b->block_gid) ); TRY (f->b->block_gid = hdf5_create_group( - f->step_gid, H5BLOCK_GROUPNAME_BLOCK) ); + f->iteration_gid, H5BLOCK_GROUPNAME_BLOCK) ); } H5_RETURN (H5_SUCCESS); } @@ -484,19 +483,18 @@ _create_block_group ( h5_err_t h5bpriv_open_field_group ( const h5_file_p f, /*!< IN: file handle */ - const char *name + char* const name ) { H5_PRIV_API_ENTER (h5_err_t, "f=%p, name='%s'", f, name); - char name2[H5_DATANAME_LEN]; - h5priv_normalize_dataset_name (name, name2); + h5priv_normalize_dataset_name (name); TRY (hdf5_close_group (f->b->field_gid)); TRY (h5bpriv_open_block_group (f)); - f->b->field_gid = hdf5_open_group (f->b->block_gid, name2); + f->b->field_gid = hdf5_open_group (f->b->block_gid, name); if (f->b->field_gid < 0) return h5_error( H5_ERR_INVAL, - "Field '%s' does not exist!", name2); + "Field '%s' does not exist!", name); H5_RETURN (H5_SUCCESS); } @@ -504,24 +502,23 @@ h5bpriv_open_field_group ( h5_err_t h5bpriv_create_field_group ( const h5_file_p f, /*!< IN: file handle */ - const char *name /*!< IN: name of field group to create */ + char* const name /*!< IN: name of field group to create */ ) { H5_PRIV_API_ENTER (h5_err_t, "f=%p, name='%s'", f, name); h5b_fdata_t *b = f->b; TRY( _create_block_group(f) ); - char name2[H5_DATANAME_LEN]; - h5priv_normalize_dataset_name (name, name2); + h5priv_normalize_dataset_name (name); h5_err_t exists; - TRY (exists = hdf5_link_exists ( b->block_gid, name2)); + TRY (exists = hdf5_link_exists ( b->block_gid, name)); if (exists > 0) { - TRY (h5bpriv_open_field_group (f, name2)); + TRY (h5bpriv_open_field_group (f, name)); } else { TRY (hdf5_close_group (f->b->field_gid) ); - TRY (b->field_gid = hdf5_create_group (b->block_gid, name2)); + TRY (b->field_gid = hdf5_create_group (b->block_gid, name)); } H5_RETURN (H5_SUCCESS); @@ -535,8 +532,7 @@ h5b_3d_has_view ( H5_CORE_API_ENTER (h5_err_t, "f=%p, ", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); H5_RETURN (((h5_file_p)fh)->b->have_layout > 0); } @@ -560,8 +556,7 @@ h5b_3d_set_view ( (long long unsigned)i_start, (long long unsigned)i_end, (long long unsigned)j_start, (long long unsigned)j_end, (long long unsigned)k_start, (long long unsigned)k_end); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5b_fdata_t *b = f->b; b->user_layout[0].i_start = i_start; b->user_layout[0].i_end = i_end; @@ -642,8 +637,7 @@ h5b_3d_get_view ( i_start, i_end, j_start, j_end, k_start, k_end); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5b_partition_t *p = f->b->user_layout; *i_start = p->i_start; @@ -676,8 +670,7 @@ h5b_3d_get_reduced_view ( i_start, i_end, j_start, j_end, k_start, k_end); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5b_partition_t *p = f->b->write_layout; *i_start = p->i_start; @@ -704,8 +697,7 @@ h5b_3d_set_chunk ( (long long unsigned)i, (long long unsigned)j, (long long unsigned)k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); if ( i == 0 || j == 0 || k == 0 ) { h5_info ("Disabling chunking" ); @@ -724,21 +716,20 @@ h5b_3d_set_chunk ( h5_err_t h5b_3d_get_chunk ( const h5_file_t fh, /*!< IN: File handle */ - const char *field_name, /*!< IN: name of dataset */ - h5_size_t *const i, /*!< OUT: size of \c i */ - h5_size_t *const j, /*!< OUT: size of \c j */ - h5_size_t *const k /*!< OUT: size of \c k */ + char* const field_name, /*!< IN: name of dataset */ + h5_size_t* const i, /*!< OUT: size of \c i */ + h5_size_t* const j, /*!< OUT: size of \c j */ + h5_size_t* const k /*!< OUT: size of \c k */ ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_err_t, "f=%p, i=%p, j=%p, k=%p", f, i, j, k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5b_fdata_t *b = f->b; - TRY( h5bpriv_open_field_group ( f, field_name ) ); + TRY (h5bpriv_open_field_group (f, field_name)); hid_t dataset_id; hid_t plist_id; @@ -776,8 +767,7 @@ h5b_3d_set_grid ( (long long unsigned)i, (long long unsigned)j, (long long unsigned)k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); if (i*j*k != f->nprocs) { H5_RETURN_ERROR ( H5_ERR_INVAL, @@ -817,8 +807,7 @@ h5b_3d_get_grid_coords ( H5_CORE_API_ENTER (h5_err_t, "f=%p, proc=%d, i=%p, j=%p, k=%p", f, proc, i, j, k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); if ( !f->b->have_grid ) H5_RETURN_ERROR ( H5_ERR_INVAL, @@ -852,8 +841,7 @@ h5b_3d_set_dims ( (long long unsigned)i, (long long unsigned)j, (long long unsigned)k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); if ( !f->b->have_grid ) H5_RETURN_ERROR ( H5_ERR_INVAL, @@ -924,8 +912,7 @@ h5b_3d_set_halo ( (long long unsigned)j, (long long unsigned)k); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); if ( !f->b->have_grid ) { H5_RETURN_ERROR ( H5_ERR_INVAL, @@ -955,8 +942,7 @@ h5b_get_num_fields ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_block_group(f)); TRY (ret_value = hdf5_get_num_objs_in_group (f->b->block_gid)); @@ -972,35 +958,33 @@ h5b_has_field ( H5_CORE_API_ENTER (h5_err_t, "f=%p, name='%s'", f, name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); const char* path[] = { H5BLOCK_GROUPNAME_BLOCK, name }; - TRY (ret_value = h5priv_link_exists_(f->step_gid, path, 2)); + TRY (ret_value = h5priv_link_exists_(f->iteration_gid, path, 2)); H5_RETURN (ret_value); } h5_err_t h5b_get_field_info_by_name ( const h5_file_t fh, /*!< IN: file handle */ - const char *name, /*!< IN: field name */ - h5_size_t *field_rank, /*!< OUT: field rank */ - h5_size_t *field_dims, /*!< OUT: field dimensions */ - h5_size_t *elem_rank, /*!< OUT: element rank */ - h5_int64_t *type /*!< OUT: datatype */ + char* const name, /*!< IN: field name */ + h5_size_t* field_rank, /*!< OUT: field rank */ + h5_size_t* field_dims, /*!< OUT: field dimensions */ + h5_size_t* elem_rank, /*!< OUT: element rank */ + h5_int64_t* type /*!< OUT: datatype */ ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_err_t, "f=%p, name='%s', " "field_rank=%p, field_dims=%p, elem_rank=%p, type=%p", f, name, field_rank, field_dims, elem_rank, type); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); /* give it plenty of space even though we don't expect rank > 3 */ hsize_t dims[16]; - TRY( h5bpriv_open_field_group(f, name) ); + TRY (h5bpriv_open_field_group (f, name)); hid_t dataset_id; hid_t dataspace_id; @@ -1054,8 +1038,7 @@ h5b_get_field_info ( (long long unsigned)idx, name, (long long unsigned)len_name, field_rank, field_dims, elem_rank, type); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5bpriv_open_block_group(f)); TRY (hdf5_get_objname_by_idx( diff --git a/src/h5core/h5t_io.c b/src/h5core/h5t_io.c index eb8238616a87a06143dffb32afd864edc7f8984c..78053cb4653980b3bf046baa4a22191ca5260dff 100644 --- a/src/h5core/h5t_io.c +++ b/src/h5core/h5t_io.c @@ -2002,7 +2002,7 @@ distribute_octree_parmetis ( TRY (vtxdist = h5_calloc (m->f->nprocs+1, sizeof (*vtxdist))); vtxdist[0] = 0; #if !defined(NDEBUG) - if (h5_debug_mask & (1<<5) ) { + if (__h5_debug_mask & (1<<5) ) { h5_debug ("vtxdist[%d]: %d", 0, 0); } #endif @@ -2014,7 +2014,7 @@ distribute_octree_parmetis ( vtxdist[i] = vtxdist[i-1] + n; } #if !defined(NDEBUG) - if (h5_debug_mask & (1<<5) ) { + if (__h5_debug_mask & (1<<5) ) { h5_debug ("vtxdist[%d]: %d", i, vtxdist[i]); } #endif @@ -2060,7 +2060,7 @@ distribute_octree_parmetis ( } xadj[i+1] = xadj[i] + num_neigh; #if !defined(NDEBUG) - if (h5_debug_mask & (1<<5) ) { + if (__h5_debug_mask & (1<<5) ) { h5_debug ("xadj[%d]: %d", i+1, xadj[i+1]); } #endif @@ -2070,7 +2070,7 @@ distribute_octree_parmetis ( if (new_numbering[j] == neighbors[k]) { adjncy[counter] = j; #if !defined(NDEBUG) - if (h5_debug_mask & (1<<5) ) { + if (__h5_debug_mask & (1<<5) ) { h5_debug ("adjncy[%d]: %d", counter, adjncy[counter]); } #endif @@ -2139,7 +2139,7 @@ distribute_octree_parmetis ( TRY (h5_free (ubvec)); #if !defined(NDEBUG) - if (h5_debug_mask & (1<<5) ) { + if (__h5_debug_mask & (1<<5) ) { for (i = 0; i < num_interior_oct; i++) { h5_debug ("part[%d]: %llu", i, (unsigned long long)part[i]); } @@ -2498,7 +2498,7 @@ read_chunked_elements ( #if NDEBUG == 0 - if (h5_debug_mask & (1<<6) ) { + if (__h5_debug_mask & (1<<6) ) { sleep (m->f->myproc*2); for (int i = 0; i < num_interior_elems;i++) { h5_debug ("\n" diff --git a/src/h5core/h5u_io.c b/src/h5core/h5u_io.c index 0e7f84e68940507c9af04fe4a242b7552e540974..ec781b97f585459e081f8d9d9529e6ff55e4bec1 100644 --- a/src/h5core/h5u_io.c +++ b/src/h5core/h5u_io.c @@ -76,9 +76,9 @@ h5upriv_close_file ( } h5_err_t -h5u_read_data ( +h5u_read_dataset ( const h5_file_t fh, /*!< [in] Handle to open file */ - const char* name, /*!< [in] Name to associate dataset with */ + char* const name, /*!< [in] Name to associate dataset with */ void* data, /*!< [out] Array of data */ const h5_types_t type ) { @@ -86,36 +86,30 @@ h5u_read_data ( H5_CORE_API_ENTER (h5_err_t, "f=%p, name='%s', data=%p, type=%lld", f, name, data, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_is_readable (f); + TRY (h5priv_normalize_dataset_name (name)); hid_t hdf5_type; TRY (hdf5_type = h5priv_map_enum_to_normalized_type (type)); - - struct h5u_fdata *u = f->u; - hid_t dataset_id; - hid_t space_id; - hid_t memspace_id; - hsize_t ndisk, nread, nmem; - - if ( f->step_gid < 0 ) { - TRY (h5_set_step ((h5_file_t)f, f->step_idx)); + if ( f->iteration_gid < 0 ) { + TRY (h5_set_iteration ((h5_file_t)f, f->iteration_idx)); } - char name2[H5_DATANAME_LEN]; - TRY (h5priv_normalize_dataset_name (name, name2)); - - TRY (dataset_id = hdf5_open_dataset_by_name (f->step_gid, name2)); + hid_t dataset_id; + TRY (dataset_id = hdf5_open_dataset_by_name (f->iteration_gid, name)); + /* default spaces, if not using a view selection */ - memspace_id = H5S_ALL; + hid_t memspace_id = H5S_ALL; + hid_t space_id; TRY (space_id = hdf5_get_dataset_space (dataset_id)); /* get the number of elements on disk for the datset */ + hsize_t ndisk; TRY (ndisk = hdf5_get_npoints_of_dataspace (space_id)); - - if (u->diskshape != H5S_ALL) { - TRY (nread = hdf5_get_selected_npoints_of_dataspace (u->diskshape)); + hsize_t nread; + if (f->u->diskshape != H5S_ALL) { + TRY (nread = hdf5_get_selected_npoints_of_dataspace (f->u->diskshape)); /* make sure the disk space selected by the view doesn't * exceed the size of the dataset */ @@ -131,7 +125,7 @@ h5u_read_data ( "Ignoring view: dataset[%s] has fewer " "elements on disk (%lld) than are selected " "(%lld).", - name2, (long long)ndisk, (long long)nread ); + name, (long long)ndisk, (long long)nread ); nread = ndisk; } } else { @@ -140,8 +134,9 @@ h5u_read_data ( nread = ndisk; } - if (u->memshape != H5S_ALL) { - TRY (nmem = hdf5_get_npoints_of_dataspace (u->memshape)); + if (f->u->memshape != H5S_ALL) { + hid_t nmem; + TRY (nmem = hdf5_get_npoints_of_dataspace (f->u->memshape)); /* make sure the memory space selected by the view has * enough capacity for the read */ @@ -154,7 +149,7 @@ h5u_read_data ( "Ignoring view: dataset[%s] has more " "elements selected (%lld) than are available " "in memory (%lld).", - name2, (long long)nread, (long long)nmem ); + name, (long long)nread, (long long)nmem ); memspace_id = H5S_ALL; } } @@ -177,63 +172,88 @@ h5u_read_data ( } h5_err_t -h5u_write_data ( +h5u_write ( const h5_file_t fh, /*!< IN: Handle to open file */ - const char *name, /*!< IN: Name to associate array with */ - const void *data, /*!< IN: Array to commit to disk */ + hid_t dset_id, + hid_t type, + const void* data + ) { + h5_file_p f = (h5_file_p)fh; + H5_CORE_API_ENTER (h5_err_t, + "f=%p, dset_id=%lld, type=%lld, data=%p", + f, (long long)dset_id, (long long int)type, data); + TRY (h5priv_start_throttle (f)); + hid_t hdf5_type; + TRY (hdf5_type = h5priv_map_enum_to_normalized_type (type)); + TRY (hdf5_write_dataset ( + dset_id, + hdf5_type, + f->u->memshape, + f->u->diskshape, + f->props->xfer_prop, + data)); + TRY (h5priv_end_throttle (f)); + f->empty = 0; + if (f->props->flush) { + TRY (hdf5_flush (f->iteration_gid, H5F_SCOPE_LOCAL)); + } + H5_RETURN (H5_SUCCESS); +} + +hid_t +h5u_open_dataset ( + const h5_file_t fh, /*!< IN: Handle to open file */ + char* const name, /*!< IN: Name to associate array with */ const h5_types_t type /*!< IN: Type of data */ ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_err_t, - "f=%p, name='%s', data=%p, type=%lld", - f, name, data, (long long int)type); - CHECK_FILEHANDLE (f); - CHECK_WRITABLE_MODE (f); - CHECK_TIMEGROUP (f); + "f=%p, name='%s', type=%lld", + f, name, (long long int)type); + check_iteration_handle_is_valid (f); + + TRY (h5priv_normalize_dataset_name (name)); hid_t hdf5_type; TRY (hdf5_type = h5priv_map_enum_to_normalized_type (type)); - - struct h5u_fdata *u = f->u; - hid_t dset_id; - - char name2[H5_DATANAME_LEN]; - TRY (h5priv_normalize_dataset_name (name, name2)); + if ( f->iteration_gid < 0 ) { + TRY (h5_set_iteration ((h5_file_t)f, f->iteration_idx)); + } - if ( u->shape == H5S_ALL ) + if (f->u->shape == H5S_ALL ) h5_warn("The view is unset or invalid."); - /* test for existing dataset */ + hid_t dset_id; H5E_BEGIN_TRY - dset_id = H5Dopen(f->step_gid, name2, H5P_DEFAULT); + dset_id = H5Dopen(f->iteration_gid, name, H5P_DEFAULT); H5E_END_TRY if (dset_id > 0) { h5_warn("Dataset %s/%s already exists", - hdf5_get_objname(f->step_gid), name2); + hdf5_get_objname (f->iteration_gid), name); } else { TRY (dset_id = hdf5_create_dataset ( - f->step_gid, - name2, + f->iteration_gid, + name, hdf5_type, - u->shape, + f->u->shape, H5P_DEFAULT)); } + H5_RETURN (dset_id); +} - TRY (h5priv_start_throttle (f)); - h5_info ("Writing dataset %s/%s.", - hdf5_get_objname(f->step_gid), name2); - TRY (hdf5_write_dataset ( - dset_id, - hdf5_type, - u->memshape, - u->diskshape, - f->props->xfer_prop, - data)); - TRY (h5priv_end_throttle (f)); - TRY (hdf5_close_dataset (dset_id)); - - f->empty = 0; - TRY (hdf5_flush (f->step_gid, H5F_SCOPE_LOCAL)); - +h5_err_t +h5u_write_dataset ( + const h5_file_t fh, /*!< IN: Handle to open file */ + char* const name, /*!< IN: Name to associate array with */ + const void* data, /*!< IN: Array to commit to disk */ + const h5_types_t type /*!< IN: Type of data */ + ) { + h5_file_p f = (h5_file_p)fh; + H5_CORE_API_ENTER (h5_err_t, + "f=%p, name='%s', data=%p, type=%lld", + f, name, data, (long long int)type); + hid_t dset_id; + TRY (dset_id = h5u_open_dataset (fh, name, type)); + TRY (h5u_write (fh, dset_id, type, data)); H5_RETURN (H5_SUCCESS); } diff --git a/src/h5core/h5u_model.c b/src/h5core/h5u_model.c index ab9c4a8893df2c329eefd37dba5545f751523374..57800ed905b3da0c6c717a58fa580594de852e12 100644 --- a/src/h5core/h5u_model.c +++ b/src/h5core/h5u_model.c @@ -22,21 +22,20 @@ #include h5_ssize_t -h5u_get_num_points ( +h5u_get_num_items ( const h5_file_t fh /*!< [in] Handle to open file */ ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5_ssize_t nparticles; if (h5u_has_view ((h5_file_t)f)) { /* if a view exists, use its size as the number of particles */ - TRY (nparticles = h5u_get_num_points_in_view (fh)); + TRY (nparticles = h5u_get_num_items_in_view (fh)); } else { /* otherwise, report all particles on disk in the first dataset - for this timestep */ + for this iteration */ TRY (nparticles = h5u_get_totalnum_particles_by_idx (fh, 0)); } @@ -44,13 +43,12 @@ h5u_get_num_points ( } h5_ssize_t -h5u_get_num_points_in_view ( +h5u_get_num_items_in_view ( const h5_file_t fh /*!< [in] Handle to open file */ ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5_ssize_t nparticles; if (!h5u_has_view (fh)) { @@ -73,11 +71,10 @@ h5u_get_totalnum_particles_by_name ( H5_CORE_API_ENTER (h5_ssize_t, "f=%p, dataset_name=%s", f, dataset_name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5_ssize_t nparticles; TRY (nparticles = hdf5_get_npoints_of_dataset_by_name ( - f->step_gid, dataset_name)); + f->iteration_gid, dataset_name)); h5_debug ("Found %lld particles in dataset %s.", (long long)nparticles, dataset_name); H5_RETURN (nparticles); @@ -90,13 +87,12 @@ h5u_get_totalnum_particles_by_idx ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p, idx=%lld", f, (long long)idx); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); char dataset_name[H5_DATANAME_LEN]; dataset_name[0] = '\0'; h5_err_t h5err; TRY (h5err = hdf5_get_name_of_dataset_by_idx ( - f->step_gid, + f->iteration_gid, idx, dataset_name, H5_DATANAME_LEN)); @@ -104,14 +100,14 @@ h5u_get_totalnum_particles_by_idx ( H5_LEAVE (H5_NOK); h5_ssize_t nparticles; TRY (nparticles = hdf5_get_npoints_of_dataset_by_name ( - f->step_gid, dataset_name)); + f->iteration_gid, dataset_name)); h5_debug ("Found %lld particles in dataset %s.", (long long)nparticles, dataset_name); H5_RETURN (nparticles); } h5_err_t -h5u_set_num_points ( +h5u_set_num_items ( const h5_file_t fh, /*!< [in] Handle to open file */ const h5_size_t nparticles, /*!< [in] Number of particles */ const h5_size_t stride /*!< [in] Stride of particles in memory */ @@ -122,10 +118,9 @@ h5u_set_num_points ( f, (long long unsigned)nparticles, (long long unsigned)stride); CHECK_FILEHANDLE (f); - if (f->step_gid < 0) { - TRY (h5_set_step (fh, 0)); + if (f->iteration_gid < 0) { + TRY (h5_set_iteration (fh, 0)); } - CHECK_TIMEGROUP (f); struct h5u_fdata *u = f->u; hsize_t start; hsize_t dmax = H5S_UNLIMITED; @@ -229,8 +224,7 @@ h5u_has_view ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); H5_RETURN (f->u->viewindexed || f->u->viewstart >= 0); } @@ -240,8 +234,7 @@ h5u_reset_view ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); struct h5u_fdata *u = f->u; u->viewstart = -1; @@ -270,10 +263,7 @@ h5u_set_view ( H5_CORE_API_ENTER (h5_err_t, "f=%p, start=%lld, end=%lld", f, (long long)start, (long long)end); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - hsize_t total = 0; - hsize_t dmax = H5S_UNLIMITED; + check_iteration_handle_is_valid (f); struct h5u_fdata *u = f->u; TRY (h5u_reset_view (fh)); @@ -281,72 +271,47 @@ h5u_set_view ( if (start == -1 && end == -1) // we are already done H5_LEAVE (H5_SUCCESS); + hssize_t total = 0; if (f->u->shape > 0) { TRY (total = hdf5_get_npoints_of_dataspace (f->u->shape) ); } else { - TRY (total = (hsize_t)h5u_get_totalnum_particles_by_idx (fh, 0)); + TRY (total = h5u_get_totalnum_particles_by_idx (fh, 0)); } h5_debug ("Total = %lld", (long long) total); - if ((long long)total <= 0) { + if (total <= 0) { /* - No datasets have been created yet and no views are set. - We have to leave the view empty because we don't know how - many particles there should be! + iteration does not contain a dataset yet! :FIXME: Should 'total == 0' be considered valid or not? :FIXME: why not gather total size? */ - if (start < 0) { - H5_RETURN_ERROR ( - H5_ERR_INVAL, - "Start of selection '%lld' out of range: " - "must be >= 0", - (long long)start); - } - if (end < start) { - H5_RETURN_ERROR ( - H5_ERR_INVAL, - "End of selection '%lld' out of range: " - "must be >= %lld", - (long long)end, - (long long)start); - } #if H5_HAVE_PARALLEL TRY ( h5priv_mpi_allreduce_max ( &end, &total, 1, MPI_LONG_LONG, f->props->comm) ); #else - total = end - start; + total = end; #endif total++; - TRY (h5u_reset_view(fh)); - TRY (hdf5_close_dataspace (u->shape)); - TRY (u->shape = hdf5_create_dataspace(1, &total, NULL) ); + hsize_t htotal = (hsize_t)total; + TRY (u->shape = hdf5_create_dataspace(1, &htotal, NULL) ); } else { if (end < 0) { - end = total+end; - } - - if (start < 0 || start >= total) { - H5_RETURN_ERROR ( - H5_ERR_INVAL, - "Start of selection '%lld' out of range: " - "must be in [0..%lld]", - (long long)start, (long long)total-1); - } else if (end < 0 || end >= total) { - H5_RETURN_ERROR ( - H5_ERR_INVAL, - "End of selection '%lld' out of range: " - "must be in [0..%lld]", - (long long)end, (long long)total-1); - } else if (end+1 < start) { - H5_RETURN_ERROR ( - H5_ERR_INVAL, - "Invalid selection: start=%lld > end=%lld!\n", - (long long)start, (long long)end); + end = total + end; } + } + if ((start < 0) || + (start >= total) || + (end >= total) || + (end+1 < start)) { + H5_RETURN_ERROR ( + H5_ERR_INVAL, + "Invalid view: start=%lld, end=%lld, total=%lld!", + (long long)start, + (long long)end, + (long long)total); } /* setting up the new view */ @@ -361,8 +326,9 @@ h5u_set_view ( "This view includes %lld particles.", (long long)u->nparticles ); + hsize_t htotal = (hsize_t)total; /* declare overall data size but then will select a subset */ - TRY (u->diskshape = hdf5_create_dataspace ( 1, &total, NULL )); + TRY (u->diskshape = hdf5_create_dataspace (1, &htotal, NULL)); hsize_t hstart = (hsize_t)start; hsize_t hstride = 1; @@ -375,6 +341,7 @@ h5u_set_view ( NULL)); /* declare local memory datasize */ + hsize_t dmax = H5S_UNLIMITED; TRY (u->memshape = hdf5_create_dataspace (1, &hcount, &dmax)); H5_RETURN (H5_SUCCESS); } @@ -389,8 +356,7 @@ h5u_set_view_length ( H5_CORE_API_ENTER (h5_err_t, "f=%p, start=%lld, length=%lld", f, (long long)start, (long long)length); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); struct h5u_fdata *u = f->u; TRY (h5u_reset_view (fh)); @@ -460,10 +426,9 @@ h5u_set_view_indices ( "f=%p, indices=%p, nelems=%llu", f, indices, (long long unsigned)nelems); CHECK_FILEHANDLE (f); - if (f->step_gid < 0) { - TRY (h5_set_step (fh, 0)); + if (f->iteration_gid < 0) { + TRY (h5_set_iteration (fh, 0)); } - CHECK_TIMEGROUP (f); hsize_t total = 0; hsize_t dmax = H5S_UNLIMITED; struct h5u_fdata *u = f->u; @@ -520,8 +485,7 @@ h5u_get_view ( H5_CORE_API_ENTER (h5_err_t, "f=%p, start=%p, end=%p", f, start, end); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); struct h5u_fdata *u = f->u; if ( u->viewindexed ) { @@ -542,7 +506,7 @@ h5u_get_view ( viewend = u->viewend; } else { - TRY (viewend = h5u_get_num_points (fh)); + TRY (viewend = h5u_get_num_items (fh)); } if ( start ) *start = viewstart; @@ -557,15 +521,14 @@ h5u_set_canonical_view ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_int64_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); h5u_fdata_t* u = f->u; TRY( h5u_reset_view (fh) ); h5_int64_t start = 0; h5_int64_t total = 0; - TRY (total = h5u_get_num_points (fh)); + TRY (total = h5u_get_num_items (fh)); u->nparticles = total / f->nprocs; @@ -595,9 +558,8 @@ h5u_get_num_datasets ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - TRY (ret_value = hdf5_get_num_datasets (f->step_gid)); + check_iteration_handle_is_valid (f); + TRY (ret_value = hdf5_get_num_datasets (f->iteration_gid)); H5_RETURN (ret_value); } @@ -610,9 +572,8 @@ h5u_has_dataset ( H5_CORE_API_ENTER (h5_err_t, "f=%p, name='%s'", f, name); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); - TRY (ret_value = hdf5_link_exists (f->step_gid, name)); + check_iteration_handle_is_valid (f); + TRY (ret_value = hdf5_link_exists (f->iteration_gid, name)); H5_RETURN (ret_value); } @@ -693,10 +654,9 @@ h5u_get_dataset_info_by_idx ( dataset_name, (long long unsigned)len_dataset_name, dataset_type, dataset_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5priv_get_dataset_info_by_idx ( - f->step_gid, + f->iteration_gid, idx, dataset_name, len_dataset_name, dataset_type, dataset_nelem)); @@ -742,10 +702,9 @@ h5u_get_dataset_info_by_name ( f, dataset_name, dataset_type, dataset_nelem); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); TRY (h5priv_get_dataset_info_by_name ( - f->step_gid, + f->iteration_gid, dataset_name, dataset_type, dataset_nelem)); H5_RETURN (H5_SUCCESS); @@ -782,13 +741,12 @@ h5u_get_chunk ( ) { h5_file_p f = (h5_file_p)fh; H5_CORE_API_ENTER (h5_int64_t, "f=%p, name='%s', size=%p", f,name,size); - CHECK_FILEHANDLE (f); - CHECK_TIMEGROUP (f); + check_iteration_handle_is_valid (f); hid_t dataset_id; hid_t plist_id; hsize_t hsize; - TRY (dataset_id = hdf5_open_dataset_by_name (f->step_gid, name) ); + TRY (dataset_id = hdf5_open_dataset_by_name (f->iteration_gid, name) ); TRY (plist_id = hdf5_get_dataset_create_plist (dataset_id) ); TRY (hdf5_get_chunk_property (plist_id, 1, &hsize) ); TRY (hdf5_close_property ( plist_id) ); diff --git a/src/h5core/private/h5_fcmp.c b/src/h5core/private/h5_fcmp.c index a7320635e51ddd49d9c05e826f9c25b8cb048fc3..9c690c3672f9351a7859fd041c64933fd166da07 100644 --- a/src/h5core/private/h5_fcmp.c +++ b/src/h5core/private/h5_fcmp.c @@ -29,11 +29,13 @@ h5priv_fcmp ( assert (sizeof (long long) == sizeof (h5_int64_t) ); // Make [ab]Int lexicographically ordered as a twos-complement int - h5_int64_t aInt = *(h5_int64_t*)&A; + void* p = (void*)&A; + h5_int64_t aInt = *(h5_int64_t*)p; if (aInt < 0) aInt = 0x8000000000000000LL - aInt; - h5_int64_t bInt = *(h5_int64_t*)&B; + p = (void*)&B; + h5_int64_t bInt = *(h5_int64_t*)p; if (bInt < 0) bInt = 0x8000000000000000LL - bInt; diff --git a/src/h5core/private/h5_file.h b/src/h5core/private/h5_file.h index b82bd9f6d883f894dadeb65be052b33be72519f3..17da2bbf6951acee011d6e1285ccb921aae3c47f 100644 --- a/src/h5core/private/h5_file.h +++ b/src/h5core/private/h5_file.h @@ -12,35 +12,47 @@ #define H5_VFD_CORE 0x00000080 #define H5_FLUSH_FILE 0x00001000 -#define H5_FLUSH_STEP 0x00002000 +#define H5_FLUSH_ITERATION 0x00002000 #define H5_FLUSH_DATASET 0x00004000 #define H5_FS_LUSTRE 0x00010000 -static inline h5_err_t -check_filehandle ( - const h5_file_p f - ) { - if (f == NULL || f->file < 0 || f->u == NULL || f->b == NULL) { - return h5_error ( - H5_ERR_BADF, - "Called with bad filehandle."); - } - return H5_SUCCESS; +static inline int +is_valid_file_handle(h5_file_p f) { + return ((f != NULL) && + (f->file > 0) && + (f->u != NULL) && + (f->b != NULL)); } -#define CHECK_FILEHANDLE(f) \ - TRY (check_filehandle (f)); - -static inline int is_writable(h5_file_p f) { +static inline int +is_writable (h5_file_p f) { return (f->props->flags & (H5_O_RDWR | H5_O_WRONLY | H5_O_APPENDONLY)); } -#define is_readable(f) (f->props->flags & (H5_O_RDWR | H5_O_RDONLY)) -#define is_readonly(f) (f->props->flags & H5_O_RDONLY) -#define is_appendonly(f) (f->props->flags & H5_O_APPENDONLY) + +static inline int +is_readable (h5_file_p f) { + return (f->props->flags & (H5_O_RDWR | H5_O_RDONLY)); +} + +static inline int +is_readonly (h5_file_p f) { + return (f->props->flags & H5_O_RDONLY); +} + +static inline int +is_appendonly (h5_file_p f) { + return (f->props->flags & H5_O_APPENDONLY); +} + +#define CHECK_FILEHANDLE(f) \ + TRY (is_valid_file_handle(f) ? H5_SUCCESS : h5_error ( \ + H5_ERR_BADF, \ + "Called with bad filehandle.")); + #define CHECK_WRITABLE_MODE(f) \ - TRY (is_writable (f) ? H5_SUCCESS : h5_error ( \ + TRY (is_writable (f) ? H5_SUCCESS : h5_error ( \ H5_ERR_INVAL, \ "Attempting to write to read-only file handle")); @@ -50,10 +62,29 @@ static inline int is_writable(h5_file_p f) { "Attempting to read from write-only file handle")); #define CHECK_TIMEGROUP(f) \ - TRY ((f->step_gid > 0) ? H5_SUCCESS : h5_error ( \ + TRY ((f->iteration_gid > 0) ? H5_SUCCESS : h5_error ( \ H5_ERR_INVAL, \ - "Time step is invalid! Have you set the time step?")); + "Iteration is invalid! Have you set the time step?")); + +#define check_file_handle_is_valid(f) \ + CHECK_FILEHANDLE(f); \ + +#define check_file_is_writable(f) \ + CHECK_FILEHANDLE(f); \ + CHECK_WRITABLE_MODE(f); +#define check_iteration_handle_is_valid(f) \ + CHECK_FILEHANDLE(f); \ + CHECK_TIMEGROUP(f); + +#define check_iteration_is_readable(f) \ + CHECK_FILEHANDLE(f); \ + CHECK_READABLE_MODE(f); \ + CHECK_TIMEGROUP(f); +#define check_iteration_is_writable(f) \ + CHECK_FILEHANDLE(f); \ + CHECK_WRITABLE_MODE(f); \ + CHECK_TIMEGROUP(f); #endif diff --git a/src/h5core/private/h5_io.h b/src/h5core/private/h5_io.h index 9b58b6b9c084c15d318e2ff6b8eef380c09b48f8..fd7a0f30b5c36515e4c9bc0cf9b318647c137d38 100644 --- a/src/h5core/private/h5_io.h +++ b/src/h5core/private/h5_io.h @@ -58,8 +58,7 @@ h5priv_read_dataset ( h5_err_t h5priv_normalize_dataset_name ( - const char *name, - char *name2 + char* const name ); #endif diff --git a/src/h5core/private/h5_log.h b/src/h5core/private/h5_log.h index e09e67b449592501a867a05166fa5730290d48b7..7a56f743e118b613e022d2842a218d76d2bfbe71 100644 --- a/src/h5core/private/h5_log.h +++ b/src/h5core/private/h5_log.h @@ -23,7 +23,7 @@ #define __FUNC_ENTER(type, mask, fmt, ...) \ type ret_value = (type)H5_ERR; \ - int __log__ = h5_debug_mask & mask; \ + int __log__ = __h5_debug_mask & mask; \ if (__log__) { \ h5_call_stack_push (__func__,e_##type); \ h5_debug ("(" fmt ")", __VA_ARGS__); \ diff --git a/src/h5core/private/h5_model.h b/src/h5core/private/h5_model.h index 8dfa51706efffad14d20d2d5b5f98ea0f885231e..e00aef3bfea9695ebae417bf9950c3adacf6cd84 100644 --- a/src/h5core/private/h5_model.h +++ b/src/h5core/private/h5_model.h @@ -15,9 +15,9 @@ * file incompatibilities with previous versions. */ #define H5_DATANAME_LEN H5_MAX_NAME_LEN -#define H5_STEPNAME_LEN H5_MAX_NAME_LEN -#define H5_STEPNAME "Step" -#define H5_STEPWIDTH 1 +#define H5_ITERATION_NAME_LEN H5_MAX_NAME_LEN +#define H5_ITERATION_NAME "Step" +#define H5_ITERATION_NUM_WIDTH 1 #define H5BLOCK_GROUPNAME_BLOCK "Block" #define H5_BLOCKNAME_X "0" #define H5_BLOCKNAME_Y "1" @@ -115,7 +115,7 @@ h5priv_end_throttle (const h5_file_p f) { h5_err_t -h5priv_close_step ( +h5priv_close_iteration ( const h5_file_p f ); @@ -123,6 +123,7 @@ h5priv_close_step ( Map given enumeration type to corresponding HDF5 type. We use this HDF5 type for reading and writing datasets and attributes. */ + static inline hid_t h5priv_map_enum_to_normalized_type ( h5_types_t type diff --git a/src/h5core/private/h5_types.h b/src/h5core/private/h5_types.h index 6f1a48baa68e900c608d5d1b79de83adfd0c9fdd..dd88f7acf31b22d27fa51e0a210affa4df2f6a55 100644 --- a/src/h5core/private/h5_types.h +++ b/src/h5core/private/h5_types.h @@ -41,8 +41,9 @@ struct h5_prop_file { // file property hid_t xfer_prop; // dataset transfer properties hid_t access_prop; // file access properties hid_t create_prop; // file create properties - char* prefix_step_name; // Prefix of step name - int width_step_idx; // pad step index with 0 up to this + char* prefix_iteration_name; // Prefix of step name + int width_iteration_idx; // pad iteration index with 0 up to this + int flush; // flush iteration after writing dataset }; typedef struct h5_prop_file h5_prop_file_t; typedef h5_prop_file_t* h5_prop_file_p; @@ -66,12 +67,12 @@ struct h5_file { /* HDF5 */ hid_t root_gid; // HDF5 group id of root - hid_t step_gid; // HDF5 group id of current step + hid_t iteration_gid; // HDF5 group id of current iteration - /* step internal data */ - char* step_name; // full current step name - h5_int64_t step_idx; // current step index - int is_new_step; // :FIXME: ? + /* iteration internal data */ + char* iteration_name; // full current iteration name + h5_int64_t iteration_idx; // current iteration index + int is_new_iteration;// :FIXME: ? struct h5u_fdata *u; // pointer to unstructured data struct h5b_fdata *b; // pointer to block data diff --git a/src/h5core/private/h5b_types.h b/src/h5core/private/h5b_types.h index b60a9e0d0a69f7d344c3e452cd564eb9396c2eee..e3bcdde9c94c70b4e27079d8b3507238963a4027 100644 --- a/src/h5core/private/h5b_types.h +++ b/src/h5core/private/h5b_types.h @@ -11,7 +11,7 @@ struct h5b_partition { }; struct h5b_fdata { - h5_id_t step_idx; + h5_id_t iteration_idx; h5_size_t i_max; h5_size_t j_max; h5_size_t k_max; diff --git a/src/h5core/private/h5t_core_trim.c b/src/h5core/private/h5t_core_trim.c index c9811df9d5920728f3cf32b3838b3413fe69d679..ac90e5bf2d844f0d9976d579f4de6eeeafdf1549 100644 --- a/src/h5core/private/h5t_core_trim.c +++ b/src/h5core/private/h5t_core_trim.c @@ -219,7 +219,7 @@ update_internal_structs ( // create index sets -#if (!defined(NDEBUG) && (h5_debug_mask & (1<<5))) +#if (!defined(NDEBUG) && (__h5_debug_mask & (1<<5))) if (!m->is_chunked) { h5t_adjacencies_t* adj = &m->adjacencies; h5_loc_idx_t idx = 0; diff --git a/src/h5core/private/h5t_store_trim.c b/src/h5core/private/h5t_store_trim.c index b6a4205d3ad5e6dd6f3c77ecd989901c0da1c8d1..a58040872b0cff61dcf33ad4e4d161de32c19d5c 100644 --- a/src/h5core/private/h5t_store_trim.c +++ b/src/h5core/private/h5t_store_trim.c @@ -202,7 +202,7 @@ compute_neighbor_of_face ( } if (elem_idx < -1) { // this should only happen if we are on the boarder // of a loaded chunk and the parent is on a different chunk - if (h5_debug_mask >= 6) { + if (__h5_debug_mask >= 6) { h5_debug ("Elem %d is on different proc than its parent %d \n" "therefore neighborhood idx is not correct resolved", old_elem_idx, elem_idx); } diff --git a/src/h5core/private/h5t_tags.h b/src/h5core/private/h5t_tags.h index bd152a45ecbbad98698d8529a7bb57835301e944..613e50b6449bf344f6fed97ea5379ae46f04ed27 100644 --- a/src/h5core/private/h5t_tags.h +++ b/src/h5core/private/h5t_tags.h @@ -21,11 +21,11 @@ * Complex numbers can be stored as array of float64 with even dimension * Tags are addressed via a name and the entity id. * Tags with the same name are called a "tagset" - * Tagsets can be used to store time/step-constant data. These tagsets are + * Tagsets can be used to store iteration-constant data. These tagsets are called "m-tagsets" and are assigned directly to a mesh. - * Tagsets can be used to store data which may change from step to step. - These tagsets are called "s-tagsets" and are assigned to a mesh and a - (time-)step. + * Tagsets can be used to store data which may change from iteration to + iteration. These tagsets are called "s-tagsets" and are assigned to + a mesh and a step/iteration. ToDo * Scalar values diff --git a/src/include/H5Block_attribs.h b/src/include/H5Block_attribs.h index 567e21c9c53a8059589fd25fbe3ff7a44ffb0e55..01e81b3abaa8e776ba1ef61806b77e13670fdac9 100644 --- a/src/include/H5Block_attribs.h +++ b/src/include/H5Block_attribs.h @@ -233,7 +233,8 @@ H5Block3dGetFieldOrigin ( } /** - Set field spacing for field \c field_name in the current step. + Set field spacing for field \c field_name in the current + step/iteration. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -263,7 +264,8 @@ H5Block3dSetFieldSpacing ( } /** - Get field spacing for field \c field_name in the current time step. + Get field spacing for field \c field_name in the current + step/iteration. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -316,7 +318,7 @@ H5Block3dGetFieldSpacing ( ) Set an explicit list of X,Y respective Z coordinates for field \c - field_name in the current time step. The coordinates are a 1D array + field_name in the current step/iteration. The coordinates are a 1D array of floating point values with dimension \c n_coords. By convention, the \c coords array should have the same length as @@ -414,8 +416,8 @@ H5Block3dSetFieldZCoords ( ) Get the explicit list of X, Y respective Z coordinates for field \c - field_name in the current step. The coordinates are read into the 1D - array \c coords which has length \c n_coords. + field_name in the current step/iteration. The coordinates are read + into the 1D array \c coords which has length \c n_coords. By convention, the \c coords array should have the same length as the X, Y respective Z dimension of the field. A warning will be diff --git a/src/include/H5Block_io.h b/src/include/H5Block_io.h index b2a40b1cedf78e8720e224b6f86a8c6506d35f76..18749766303b7853f3c8c3022623a46cb9b5bbe7 100644 --- a/src/include/H5Block_io.h +++ b/src/include/H5Block_io.h @@ -56,9 +56,10 @@ extern "C" { const h5_int32_t* buffer ) - Write a 3-dimensional field with scalar values to the current step - using the previously defined field view. Ensure that the size of - the buffer matches the number of elements in the view. + Write a 3-dimensional field with scalar values to the current + step/iteration using the previously defined field view. Ensure + that the size of the buffer matches the number of elements in + the view. Supported data types are @@ -176,8 +177,8 @@ H5Block3dWriteScalarFieldInt32 ( h5_int32_t* buffer ) - Read a 3-dimensional field with scalar values from the current step - using the previously defined field layout. + Read a 3-dimensional field with scalar values from the current + step/iteration using the previously defined field layout. Ensure that the size of the buffer matches the number of elements in the view. @@ -295,9 +296,9 @@ H5Block3dReadScalarFieldInt32 ( ) Write a 3-dimensional field with 3-dimensional vectors as values to - the current step using the previously defined field view. Ensure - that the size of the buffer matches the number of elements in the - view. + the current step/iteration using the previously defined field view. + Ensure that the size of the buffer matches the number of elements in + the view. Supported data types are @@ -439,7 +440,7 @@ H5Block3dWriteVector3dFieldInt32 ( ) Read a 3-dimensional field with 3-dimensional vectors as values from - the current step using the previously defined field layout. + the current step/iteration using the previously defined field layout. Ensure that the size of the buffer matches the number of elements in the view. diff --git a/src/include/H5Block_model.h b/src/include/H5Block_model.h index 24c8aafa2be60da773171a13f2d9cd84f183148b..b2cc7cec21f21a232af02dcf06cbf9e870853b6c 100644 --- a/src/include/H5Block_model.h +++ b/src/include/H5Block_model.h @@ -33,10 +33,10 @@ extern "C" { */ /** - Checks whether the current time-step has field data or not. + Checks whether the current step/iteration has field data or not. - \return true (value \c >0) if step exists - \return false (\c 0) if step does not exist + \return true (value \c >0) if step/iteration exists + \return false (\c 0) if step/iteration does not exist \return \c H5_FAILURE on error */ static inline h5_err_t @@ -51,7 +51,7 @@ H5BlockHasFieldData ( /** - Query number of fields in current time step. + Query number of fields in current step/iteration. \return \c number of fields \return H5_FAILURE on error @@ -74,8 +74,8 @@ H5BlockGetNumFields ( (e.g. scalar or vector). This function can be used to retrieve all fields bound to the - current time-step by looping from \c 0 to the number of fields - minus one. The number of fields bound to the current time-step + current step/iteration by looping from \c 0 to the number of fields + minus one. The number of fields bound to the current step/iteration can be queried by calling the function \ref H5BlockGetNumFields. \return \c H5_SUCCESS on success @@ -171,8 +171,8 @@ H5BlockGetFieldInfoByName ( Tests whether a view has been set, either directly with \ref H5Block3dSetView or indirectly with \ref H5Block3dSetGrid. - \return true (value \c >0) if step exists - \return false (\c 0) if step does not exist + \return true (value \c >0) if step/iteration exists + \return false (\c 0) if step/iteration does not exist \return \c H5_FAILURE on error */ static inline h5_int64_t @@ -190,9 +190,9 @@ H5Block3dHasView ( Fortran ordering: the fastest moving index is \c i. This routine uses an MPI_Allgather, so at large concurrency it should - be called as infrequently as possible. For instance, if several timesteps - use the same field dimensions, set the layout only once before the - first timestep. + be called as infrequently as possible. For instance, if several + steps/iteration use the same field dimensions, set the layout only + once. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error diff --git a/src/include/H5Part_io.h b/src/include/H5Part_io.h index 6d7c4fd6065c7fe2ab0d998dccaa4e4aca455ab5..bad26f398690183dfeb8e23a113d5297193c94f4 100644 --- a/src/include/H5Part_io.h +++ b/src/include/H5Part_io.h @@ -56,12 +56,13 @@ extern "C" { const h5_int32_t* data ) - Write a dataset to the current step. + Write a dataset to the current step/iteration. - After the current (time-)step and view, you can start writing datasets - into the file. Each dataset has a name associated with it (chosen by the - user) in order to facilitate later retrieval. The name of the dataset is - specified in the parameter \c name, which must be a null-terminated string. + After setting the current (time-)step/iteration and view, you can start + writing datasets into the file. Each dataset has a name associated with + it (chosen by the user) in order to facilitate later retrieval. The name + of the dataset is specified in the parameter \c name, which must be a + null-terminated string. There are no restrictions on naming of datasets, but it is useful to arrive at some common naming convention when sharing data with other groups. @@ -70,9 +71,10 @@ extern "C" { the array can be reconstructed properly on other systems with incompatible type representations. - All data that is written after setting the timestep is associated with that - timestep. While the number of elements can change for each timestep, you - cannot change the number of elements in the middle of a given timestep. + All data that is written after setting the (time-)step/iteration is + associated with that (time-)step/iteratiion. While the number of + elements can change for each timestep, you cannot change the number + of elements in the middle of a given (time-)step/iteration. The data is committed to disk before the routine returns. \param f [in] file handle. @@ -97,7 +99,7 @@ H5PartWriteDataFloat64 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_write_data ( + h5u_write_dataset ( f, name, (void*)data, H5_FLOAT64_T)); } @@ -112,7 +114,7 @@ H5PartWriteDataFloat32 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_write_data( + h5u_write_dataset ( f, name, (void*)data, H5_FLOAT32_T)); } @@ -127,7 +129,7 @@ H5PartWriteDataInt64 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_write_data ( + h5u_write_dataset ( f, name, (void*)data, H5_INT64_T)); } @@ -142,7 +144,7 @@ H5PartWriteDataInt32 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_write_data ( + h5u_write_dataset ( f, name, (void*)data, H5_INT32_T)); } @@ -198,7 +200,7 @@ H5PartReadDataFloat64 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_read_data ( + h5u_read_dataset ( f, name, data, H5_FLOAT64_T)); } @@ -212,7 +214,7 @@ H5PartReadDataFloat32 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_read_data ( + h5u_read_dataset ( f, name, data, H5_FLOAT32_T)); } @@ -226,7 +228,7 @@ H5PartReadDataInt64 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_read_data ( + h5u_read_dataset ( f, name, data, H5_INT64_T)); } @@ -241,7 +243,7 @@ H5PartReadDataInt32 ( "f=%p, name='%s', date=%p", (h5_file_p)f, name, data); H5_API_RETURN ( - h5u_read_data ( + h5u_read_dataset ( f, name, data, H5_INT32_T)); } diff --git a/src/include/H5Part_model.h b/src/include/H5Part_model.h index a12155a31f39ee901d6799da51e669d1c71a55b0..77fda45d29f7a75821942ee80f0426c47a200f3f 100644 --- a/src/include/H5Part_model.h +++ b/src/include/H5Part_model.h @@ -33,9 +33,10 @@ extern "C" { */ /** - Get the number of datasets that are stored at the current step. + Get the number of datasets that are stored at the current + step/iteration. - \return number of datasets in current timestep + \return number of datasets in current step/iteration \return \c H5_FAILURE on error */ static inline h5_ssize_t @@ -49,7 +50,8 @@ H5PartGetNumDatasets ( } /** - Query the name of a dataset given by it's index in the current step. + Query the name of a dataset given by it's index in the current + step/iteration. If the number of datasets is \c n, the range of \c _index is \c 0 to \c n-1. @@ -80,7 +82,7 @@ H5PartGetDatasetName ( /** Gets the name, type and number of elements of a dataset based on its - index in the current timestep. + index in the current step/iteration. Type is one of the following values: @@ -121,10 +123,11 @@ H5PartGetDatasetInfo ( type, nelems)); } /** - Determines whether a dataset with given name exists in current step. + Determines whether a dataset with given name exists in current + step/iteration. - \return true (value \c >0) if step exists - \return false (\c 0) if step does not exist + \return true (value \c >0) if step/iteration exists + \return false (\c 0) if step/iteration does not exist \return \c H5_FAILURE on error */ static inline h5_err_t @@ -140,7 +143,7 @@ H5PartHasDataset ( /** Gets the type and number of elements of a dataset based on its - name in the current timestep. + name in the current step/iteration. Type is one of the following values: @@ -177,7 +180,7 @@ H5PartGetDatasetInfoByName ( } /** - Set the number of points/particles for the current time-step. + Set the number of items/particles for the current step/iteration. After you call this subroutine, all subsequent operations will assume this number of particles will be written. @@ -203,19 +206,19 @@ H5PartGetDatasetInfoByName ( \return \c H5_FAILURE on error */ static inline h5_err_t -H5PartSetNumPoints ( +H5PartSetNumItems ( const h5_file_t f, ///< [in] file handle. - h5_size_t npoints ///< [in] Number of elements. + h5_size_t num_items ///< [in] Number of elements. ) { H5_API_ENTER (h5_err_t, - "f=%p, npoints=%llu", - (h5_file_p)f, (long long unsigned)npoints); + "f=%p, num_items=%llu", + (h5_file_p)f, (long long unsigned)num_items); h5_size_t stride = 1; - H5_API_RETURN (h5u_set_num_points (f, npoints, stride)); + H5_API_RETURN (h5u_set_num_items (f, num_items, stride)); } /** - \see H5PartSetNumPoints() + \see H5PartSetNumItems() */ static inline h5_err_t H5PartSetNumParticles ( @@ -226,7 +229,7 @@ H5PartSetNumParticles ( "f=%p, nparticles=%llu", (h5_file_p)f, (long long unsigned)nparticles); h5_size_t stride = 1; - H5_API_RETURN (h5u_set_num_points (f, nparticles, stride)); + H5_API_RETURN (h5u_set_num_items (f, nparticles, stride)); } /** @@ -238,28 +241,28 @@ H5PartSetNumParticles ( If you have neither set the number of particles nor set a view, then this returns the total number of - particles in the first data set of the current time step. - Note that H5Part assumes that all data sets within a given time step + particles in the first data set of the current step/iteration. + Note that H5Part assumes that all data sets within a given step/iteration have the same number of particles (although the number particles can - vary across time steps). + vary across steps/iteration). If none of these conditions are met, an error is thrown. - \return number of elements in datasets in current step. + \return number of elements in datasets in current step/iteration. \return \c H5_FAILURE on error. */ static inline h5_ssize_t -H5PartGetNumPoints ( +H5PartGetNumItems ( const h5_file_t f ///< [in] file handle. ) { H5_API_ENTER (h5_ssize_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5u_get_num_points (f)); + H5_API_RETURN (h5u_get_num_items (f)); } /** - \see H5PartGetNumPoints() + \see H5PartGetNumItems() */ static inline h5_ssize_t H5PartGetNumParticles ( @@ -268,12 +271,12 @@ H5PartGetNumParticles ( H5_API_ENTER (h5_ssize_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5u_get_num_points (f)); + H5_API_RETURN (h5u_get_num_items (f)); } /** - Set the number of particles for the current time-step. + Set the number of particles for the current step/iteration. After you call this subroutine, all subsequent operations will assume this number of particles will be written. @@ -301,15 +304,15 @@ H5PartGetNumParticles ( static inline h5_err_t H5PartSetNumParticlesStrided ( const h5_file_t f, ///< [in] file handle. - h5_size_t npoints, ///< [in] number of elements. + h5_size_t num_items, ///< [in] number of elements. h5_size_t stride ///< [in] stride value (e.g. number ///< of fields in the particle array). ) { H5_API_ENTER (h5_err_t, - "f=%p, npoints=%llu, stride=%llu", - (h5_file_p)f, (long long unsigned)npoints, + "f=%p, num_items=%llu, stride=%llu", + (h5_file_p)f, (long long unsigned)num_items, (long long unsigned)stride); - H5_API_RETURN (h5u_set_num_points (f, npoints, stride)); + H5_API_RETURN (h5u_set_num_items (f, num_items, stride)); } /** @@ -361,8 +364,8 @@ H5PartResetView ( \ref H5PartSetNumParticles() or manually with \ref H5PartSetView or \ref H5PartSetViewIndices. - \return true (value \c >0) if step exists - \return false (\c 0) if step does not exist + \return true (value \c >0) if step/iteration exists + \return false (\c 0) if step/iteration does not exist \return \c H5_FAILURE on error */ static inline h5_err_t @@ -384,10 +387,10 @@ H5PartHasView ( is set, or the number of particles in a dataset changes, or the view is "unset" by calling \c H5PartSetView(file,-1,-1); - Before you set a view, \ref H5PartGetNumPoints will return the - total number of particles in the current time-step (even for the parallel - reads). However, after you set a view, it will return the number of - particles contained in the view. + Before you set a view, \ref H5PartGetNumItems will return the + total number of particles in the current step/iteration (even for + the parallel reads). However, after you set a view, it will + return the number of particles contained in the view. The range is \e inclusive: the end value is the last index of the data. @@ -421,10 +424,10 @@ H5PartSetView ( for all the intermediate values (which will not be touched by the read or write). - Before you set a view, the \c H5PartGetNumPoints() will return the - total number of particles in the current time-step (even for the parallel - reads). However, after you set a view, it will return the number of - particles contained in the view. + Before you set a view, the \c H5PartGetNumItems() will return the + total number of particles in the current step/iteration (even for + the parallel reads). However, after you set a view, it will return + the number of particles contained in the view. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error diff --git a/src/include/H5_file.h b/src/include/H5_file.h index 4cc9cba9013ff9953bce6e75cefdf32d101d4f73..8f078a48d6307124ad72634342cf87b7935a39f3 100644 --- a/src/include/H5_file.h +++ b/src/include/H5_file.h @@ -233,6 +233,26 @@ H5SetPropFileThrottle ( H5_API_RETURN (h5_set_prop_file_throttle (prop, throttle)); } +/** + Flush data after each write. + + \return \c H5_SUCCESS on success + \return \c H5_FAILURE on error + + \note + | Release | Change | + | :------ | :----- | + | \c 2.0.0rc5 | Function introduced in this release. | + */ +static inline h5_err_t +H5SetPropFileFlush ( + h5_prop_t prop ///< [in,out] identifier for file property list + ) { + H5_API_ENTER (h5_err_t, "prop=%p", + (void*)prop); + H5_API_RETURN (h5_set_prop_file_flush_after_write (prop)); +} + /** Close file property list. @@ -357,7 +377,7 @@ H5CheckFile ( } /** - Flush step data to disk. + Flush step/iteration data to disk. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -369,7 +389,7 @@ H5FlushStep ( H5_API_ENTER (h5_err_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5_flush_step (f)); + H5_API_RETURN (h5_flush_iteration (f)); } /** diff --git a/src/include/H5_model.h b/src/include/H5_model.h index d4f6a571d07f2832e962ff4401fc8c649c28d989..a02cbd322d148494d60b08cc5779af2917e5ebd1 100644 --- a/src/include/H5_model.h +++ b/src/include/H5_model.h @@ -23,7 +23,7 @@ extern "C" { #endif /** - Define format of the step names. + Define format of the step/iteration names. Example: ==H5SetStepNameFormat( f, "Step", 6 )== defines step names like ==Step#000042==. @@ -35,16 +35,16 @@ static inline h5_err_t H5SetStepNameFormat ( const h5_file_t f, ///< [in] file handle const char* name, ///< [in] prefix, defaults to \c Step - const h5_int64_t width ///< [in] width of step number + const h5_int64_t width ///< [in] width of step/iteration number ) { H5_API_ENTER (h5_err_t, "f=%p, name='%s', width=%lld", (h5_file_p)f, name, (long long) width); - H5_API_RETURN (h5_set_stepname_fmt (f, name, width)); + H5_API_RETURN (h5_set_iteration_name_fmt (f, name, width)); } /** - Get format of the step names. + Get format of the step/iteration names. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -54,16 +54,16 @@ H5GetStepNameFormat ( const h5_file_t f, ///< [in] file handle char* name, ///< [out] prefix const h5_size_t l_name, ///< [in] length of buffer name - int* width ///< [out] width of step number + int* width ///< [out] width of step/iteration number ) { H5_API_ENTER (h5_err_t, "f=%p, name=%p, l_name=%llu, width=%p", (h5_file_p)f, name, (unsigned long long)l_name, width); - H5_API_RETURN (h5_get_stepname_fmt (f, name, l_name, width)); + H5_API_RETURN (h5_get_iteration_name_fmt (f, name, l_name, width)); } /** - Set the current step. + Set the current step/iteration. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -71,18 +71,18 @@ H5GetStepNameFormat ( static inline h5_err_t H5SetStep ( const h5_file_t f, ///< [in] file handle. - const h5_id_t step ///< [in] step to set. + const h5_id_t step ///< [in] step/iteration to set. ) { H5_API_ENTER (h5_err_t, "f=%p, step=%lld", (h5_file_p)f, (long long)step); - H5_API_RETURN (h5_set_step (f, step)); + H5_API_RETURN (h5_set_iteration (f, step)); } /** - Get current step. + Get current step/iteration. - \return Step number + \return Step/iteration number \return \c H5_FAILURE on error */ static inline h5_id_t @@ -92,17 +92,17 @@ H5GetStep ( H5_API_ENTER (h5_err_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5_get_step (f)); + H5_API_RETURN (h5_get_iteration (f)); } /** - Get the number of time-steps that are currently stored in the file - \c f. + Get the number of steps/iterations that are currently stored + in the file \c f. It works for both reading and writing of files, but is probably only typically used when you are reading. - \return Number of time-steps + \return Number of steps/iterations \return \c H5_FAILURE on error. */ static inline h5_ssize_t @@ -112,14 +112,14 @@ H5GetNumSteps ( H5_API_ENTER (h5_err_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5_get_num_steps(f)); + H5_API_RETURN (h5_get_num_iterations(f)); } /** - Query whether a particular step already exists in the file. + Query whether a particular step/iteration already exists in the file. - \return true (value \c >0) if step exists - \return false (\c 0) if step does not exist + \return true (value \c >0) if step/iteration exists + \return false (\c 0) if step/iteration does not exist \return \c H5_FAILURE on error */ static inline h5_err_t @@ -130,7 +130,7 @@ H5HasStep ( H5_API_ENTER (h5_err_t, "f=%p, stepno=%lld", (h5_file_p)f, (long long)stepno); - H5_API_RETURN (h5_has_step (f, stepno)); + H5_API_RETURN (h5_has_iteration (f, stepno)); } /** diff --git a/src/include/H5_step_attribs.h b/src/include/H5_step_attribs.h index 3d5adb7b525f17b9328dd3d3b6fdbc91a004a2f3..ac50097a1a83cc26b52e3c40d4e7f817606530ae 100644 --- a/src/include/H5_step_attribs.h +++ b/src/include/H5_step_attribs.h @@ -29,12 +29,13 @@ extern "C" { ! */ /** - \addtogroup h5_step_attribs + \addtogroup h5_iteration_attribs @{ */ /** - Query the number of attributes attached to the current step. + Query the number of attributes attached to the current + step/iteration. \return number of attributes \return \c H5_FAILURE on error @@ -46,17 +47,17 @@ H5GetNumStepAttribs ( H5_API_ENTER (h5_int64_t, "f=%p", (h5_file_p)f); - H5_API_RETURN (h5_get_num_step_attribs (f)); + H5_API_RETURN (h5_get_num_iteration_attribs (f)); } /** - Gets the name, type and number of elements of the step attribute + Gets the name, type and number of elements of the iteration attribute given by its index. This function can be used to retrieve all attributes attached to the - current step by looping from \c 0 to the number of attribute + current step/iteration by looping from \c 0 to the number of attribute minus one. The number of attributes attached to the current - step can be queried by calling \ref H5GetNumStepAttribs(). + step/iteration can be queried by calling \ref H5GetNumStepAttribs(). \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -81,7 +82,7 @@ H5GetStepAttribInfo ( attrib_type, nelems); H5_API_RETURN ( - h5_get_step_attrib_info_by_idx ( + h5_get_iteration_attrib_info_by_idx ( f, idx, attrib_name, @@ -105,7 +106,7 @@ H5GetStepAttribName ( attrib_name, (long long unsigned)len_attrib_name); H5_API_RETURN ( - h5_get_step_attrib_info_by_idx ( + h5_get_iteration_attrib_info_by_idx ( f, idx, attrib_name, len_attrib_name, @@ -114,7 +115,8 @@ H5GetStepAttribName ( } /** - Determines whether a step attribute with a given name exists in current step. + Determines whether a step attribute with a given name exists in + current step/iteration. \return true (value \c >0) if atrribute exists \return false (\c 0) if attribute does not exist @@ -131,13 +133,14 @@ H5HasStepAttrib ( (h5_file_p)f, attrib_name); H5_API_RETURN ( - h5_has_step_attrib ( + h5_has_iteration_attrib ( f, attrib_name)); } /** - Gets the type and number of elements of a given step attribute. + Gets the type and number of elements of a given step/iteration + attribute. \return \c H5_SUCCESS on success \return \c H5_FAILURE on error @@ -157,7 +160,7 @@ H5GetStepAttribInfoByName ( attrib_name, attrib_type, nelems); H5_API_RETURN ( - h5_get_step_attrib_info_by_name ( + h5_get_iteration_attrib_info_by_name ( f, attrib_name, attrib_type, nelems)); @@ -240,7 +243,7 @@ H5WriteStepAttribString ( "f=%p, attrib_name='%s', buffer='%s'", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_write_step_attrib ( + h5_write_iteration_attrib ( f, attrib_name, H5_STRING_T, @@ -259,7 +262,7 @@ H5WriteStepAttribFloat64 ( "f=%p, attrib_name='%s', buffer=%p, nelems=%llu", (h5_file_p)f, attrib_name, buffer, (long long unsigned)nelems); H5_API_RETURN ( - h5_write_step_attrib ( + h5_write_iteration_attrib ( f, attrib_name, H5_FLOAT64_T, @@ -278,7 +281,7 @@ H5WriteStepAttribFloat32 ( "f=%p, attrib_name='%s', buffer=%p, nelems=%llu", (h5_file_p)f, attrib_name, buffer, (long long unsigned)nelems); H5_API_RETURN ( - h5_write_step_attrib ( + h5_write_iteration_attrib ( f, attrib_name, H5_FLOAT32_T, @@ -297,7 +300,7 @@ H5WriteStepAttribInt64 ( "f=%p, attrib_name='%s', buffer=%p, nelems=%llu", (h5_file_p)f, attrib_name, buffer, (long long unsigned)nelems); H5_API_RETURN ( - h5_write_step_attrib ( + h5_write_iteration_attrib ( f, attrib_name, H5_INT64_T, @@ -316,7 +319,7 @@ H5WriteStepAttribInt32 ( "f=%p, attrib_name='%s', buffer=%p, nelems=%llu", (h5_file_p)f, attrib_name, buffer, (long long unsigned)nelems); H5_API_RETURN ( - h5_write_step_attrib ( + h5_write_iteration_attrib ( f, attrib_name, H5_INT32_T, @@ -393,7 +396,7 @@ H5ReadStepAttribString ( "f=%p, attrib_name='%s', buffer=%p", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_read_step_attrib ( + h5_read_iteration_attrib ( f, attrib_name, H5_STRING_T, @@ -410,7 +413,7 @@ H5ReadStepAttribFloat64 ( "f=%p, attrib_name='%s', buffer=%p", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_read_step_attrib ( + h5_read_iteration_attrib ( f, attrib_name, H5_FLOAT64_T, @@ -427,7 +430,7 @@ H5ReadStepAttribFloat32 ( "f=%p, attrib_name='%s', buffer=%p", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_read_step_attrib ( + h5_read_iteration_attrib ( f, attrib_name, H5_FLOAT32_T, @@ -444,7 +447,7 @@ H5ReadStepAttribInt64 ( "f=%p, attrib_name='%s', buffer=%p", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_read_step_attrib ( + h5_read_iteration_attrib ( f, attrib_name, H5_INT64_T, @@ -461,7 +464,7 @@ H5ReadStepAttribInt32 ( "f=%p, attrib_name='%s', buffer=%p", (h5_file_p)f, attrib_name, buffer); H5_API_RETURN ( - h5_read_step_attrib ( + h5_read_iteration_attrib ( f, attrib_name, H5_INT32_T, diff --git a/src/include/H5hut.h b/src/include/H5hut.h index bb660f7c42d03484b6304de59d8d41332eae3313..b41f41af0996ba799d008c7f866a9a016c438b9a 100644 --- a/src/include/H5hut.h +++ b/src/include/H5hut.h @@ -29,7 +29,7 @@ \ingroup h5block_model \note - Different field sizes are allowed in the same time-step. + Different field sizes are allowed in the same step/iteration. \note The same layout can be used, if the size of the field matches the diff --git a/src/include/h5core/h5_file.h b/src/include/h5core/h5_file.h index ebc81d62d350fd5002c0d902724da6b8041f3522..5cbf841d081ef36d504193de6e82ae1d2561b8fc 100644 --- a/src/include/h5core/h5_file.h +++ b/src/include/h5core/h5_file.h @@ -45,6 +45,10 @@ h5_err_t h5_set_prop_file_core_vfd ( h5_prop_t, h5_int64_t); +h5_err_t +h5_set_prop_file_flush_after_write ( + h5_prop_t _props); + h5_err_t h5_close_prop ( h5_prop_t); @@ -70,7 +74,7 @@ h5_close_h5hut ( void); h5_err_t -h5_flush_step ( +h5_flush_iteration ( const h5_file_t); h5_err_t diff --git a/src/include/h5core/h5_log.h b/src/include/h5core/h5_log.h index 73760a9e2e483945abeff3db5247885a76656781..cc94cb7023da9e913d968e25b38e1ace5e0ebd24 100644 --- a/src/include/h5core/h5_log.h +++ b/src/include/h5core/h5_log.h @@ -79,8 +79,8 @@ struct call_stack { struct call_stack_entry entry[1024]; }; -extern h5_int64_t h5_log_level; -extern h5_int64_t h5_debug_mask; +extern h5_int64_t __h5_log_level; +extern h5_int64_t __h5_debug_mask; extern struct call_stack h5_call_stack; // :FIXME: Should go to another header file @@ -223,7 +223,7 @@ h5_get_loglevel ( h5_initialize(); \ h5_call_stack_reset (); \ h5_call_stack_push (__func__,e_##type); \ - int __log__ = h5_debug_mask & H5_DEBUG_API; \ + int __log__ = __h5_debug_mask & H5_DEBUG_API; \ if (__log__) { \ h5_debug ("(" fmt ")", __VA_ARGS__); \ } diff --git a/src/include/h5core/h5_model.h b/src/include/h5core/h5_model.h index 8efb6e859ca52541cc580934f01d0b97a2efa711..e26987ce0f0176bd48fdf9da480ba806c4b07660 100644 --- a/src/include/h5core/h5_model.h +++ b/src/include/h5core/h5_model.h @@ -19,29 +19,29 @@ extern "C" { #define H5_MAX_NAME_LEN 64 h5_err_t -h5_set_stepname_fmt ( +h5_set_iteration_name_fmt ( const h5_file_t, const char*, const int); h5_err_t -h5_get_stepname_fmt ( +h5_get_iteration_name_fmt ( const h5_file_t, char* const, const int, int* const); h5_int64_t -h5_set_step ( +h5_set_iteration ( const h5_file_t, const h5_int64_t); h5_int64_t -h5_get_step ( +h5_get_iteration ( const h5_file_t); h5_ssize_t -h5_get_num_steps ( +h5_get_num_iterations ( const h5_file_t); h5_int64_t -h5_has_step ( +h5_has_iteration ( const h5_file_t, const h5_int64_t); int diff --git a/src/include/h5core/h5_step_attribs.h b/src/include/h5core/h5_step_attribs.h index 3507c70cc4f1b69f98634a6613be2e309e58e7dc..3ea4ef95f023f2638b9719d7dc53c7de2c8fc205 100644 --- a/src/include/h5core/h5_step_attribs.h +++ b/src/include/h5core/h5_step_attribs.h @@ -18,30 +18,30 @@ extern "C" { #endif h5_err_t -h5_has_step_attrib ( +h5_has_iteration_attrib ( const h5_file_t, const char* const); h5_err_t -h5_get_step_attrib_info_by_name ( +h5_get_iteration_attrib_info_by_name ( const h5_file_t, const char* const, h5_int64_t* const, h5_size_t* const); h5_ssize_t -h5_get_num_step_attribs ( +h5_get_num_iteration_attribs ( const h5_file_t f); h5_err_t -h5_get_step_attrib_info_by_idx ( +h5_get_iteration_attrib_info_by_idx ( const h5_file_t, const h5_size_t, char* const, const h5_size_t, h5_int64_t* const, h5_size_t* const); h5_err_t -h5_read_step_attrib ( +h5_read_iteration_attrib ( const h5_file_t, const char* const, const h5_types_t, void* const); h5_err_t -h5_write_step_attrib ( +h5_write_iteration_attrib ( const h5_file_t, const char* const, const h5_types_t, const void* const, const h5_size_t); diff --git a/src/include/h5core/h5_types.h b/src/include/h5core/h5_types.h index 32655feb90374ff850121c87396c7fe64399c96d..07d232b66fb65c5fa8d7b91f2251f7da9d4410ed 100644 --- a/src/include/h5core/h5_types.h +++ b/src/include/h5core/h5_types.h @@ -148,7 +148,7 @@ typedef struct h5_glb_idxlist { } h5_glb_idxlist_t; enum h5_iterators { - step_iterator + iteration_iterator }; struct h5_iterator; diff --git a/src/include/h5core/h5u_io.h b/src/include/h5core/h5u_io.h index b2d4d61ab8c531eeabc3c879710e13efaf2c13c8..4c7b586655938702acc739ad3f5a9dc459a2e349 100644 --- a/src/include/h5core/h5u_io.h +++ b/src/include/h5core/h5u_io.h @@ -18,12 +18,12 @@ extern "C" { #endif h5_int64_t -h5u_read_data ( +h5u_read_dataset ( const h5_file_t, const char* const, void* const, const h5_types_t); h5_int64_t -h5u_write_data ( +h5u_write_dataset ( const h5_file_t, const char* const, const void* const, const h5_types_t); diff --git a/src/include/h5core/h5u_model.h b/src/include/h5core/h5u_model.h index 84167bfb493488d0e0ae0e65515967024f7e1024..5bc23cad181767c36198b7e8a8e3e473d05d4933 100644 --- a/src/include/h5core/h5u_model.h +++ b/src/include/h5core/h5u_model.h @@ -41,11 +41,11 @@ h5u_get_dataset_info_by_name ( ); h5_ssize_t -h5u_get_num_points ( +h5u_get_num_items ( const h5_file_t); h5_ssize_t -h5u_get_num_points_in_view ( +h5u_get_num_items_in_view ( const h5_file_t); h5_ssize_t @@ -59,7 +59,7 @@ h5u_get_totalnum_particles_by_idx ( h5_id_t); h5_err_t -h5u_set_num_points ( +h5u_set_num_items ( const h5_file_t, const h5_size_t, const h5_size_t); diff --git a/test/h5u_read.c b/test/h5u_read.c index 93cee06535bfc682e5b6271027ef4d2c10bfa7eb..62a1143c46dca172ef097509d998e97efaab2e1d 100644 --- a/test/h5u_read.c +++ b/test/h5u_read.c @@ -360,7 +360,7 @@ test_read_data32(h5_file_t file, int nparticles, int step) status = H5PartReadDataFloat32(file, "pz", pz); RETURN(status, H5_SUCCESS, "H5PartReadDataFloat32"); - status = H5PartReadDataInt32(file, LONGNAME2, id); + status = H5PartReadDataInt32(file, "id", id); RETURN(status, H5_SUCCESS, "H5PartReadDataInt32"); for (i=0; i