19 H5Eset_auto1(NULL, NULL);
28 file = H5Fcreate(filename, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
38 file = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT);
48 file = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
58 err = H5Fclose(file_id);
74 const char* end = strstr(start,
"/");
77 hid_t g = H5Gcreate2(loc, start, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
80 char* group = (
char*) malloc((strlen(path) + 1) *
sizeof(
char));
81 strncpy(group, start, end-start);
82 group[end-start] =
'\0';
85 hid_t g = H5Gopen2(loc, group, H5P_DEFAULT);
87 g = H5Gcreate2(loc, group, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
101 return H5Gget_objinfo (loc, path, 0, NULL);
113 strcpy(path, original);
114 char* ptr = strstr(path,
"XXXXXXXXXX");
116 for(
int i = 0; i < 10; i++) {
132 strcpy(path, original);
133 char* ptr = strstr(path,
"XXXXXXXXXX");
135 for(
int i = 0; i < 10; i++) {
167 const char* errfile,
int errline) {
169 if( H5LTread_dataset_double(file,
hdf5_gen_path(var, qid, temp), ptr) < 0 ){
170 print_err(
"Error: could not read HDF5 dataset %s FILE %s LINE %d\n",
171 temp, errfile, errline);
202 const char* errfile,
int errline) {
204 if( H5LTread_dataset_short(file,
hdf5_gen_path(var, qid, temp), ptr) < 0 ){
205 print_err(
"Error: could not read HDF5 dataset %s FILE %s LINE %d\n",
206 temp, errfile, errline);
237 const char* errfile,
int errline) {
239 if( H5LTread_dataset_int(file,
hdf5_gen_path(var, qid, temp), ptr) < 0 ){
240 print_err(
"Error: could not read HDF5 dataset %s FILE %s LINE %d\n",
241 temp, errfile, errline);
272 const char* errfile,
int errline) {
274 if( H5LTread_dataset_long(file,
hdf5_gen_path(var, qid, temp), ptr) < 0 ){
275 print_err(
"Error: could not read HDF5 dataset %s FILE %s LINE %d\n",
276 temp, errfile, errline);
290 const char* attrname,
const char*
string) {
293 hid_t grp = H5Gopen(loc, path, H5P_DEFAULT);
294 hid_t aid = H5Screate(H5S_SCALAR);
295 hid_t atype = H5Tcopy(H5T_C_S1);
296 H5Tset_size(atype, strlen(
string));
297 H5Tset_strpad(atype,H5T_STR_NULLPAD);
299 hid_t attr = H5Aopen(grp, attrname, H5P_DEFAULT);
303 H5Adelete(grp, attrname);
307 attr = H5Acreate2(grp, attrname, atype, aid, H5P_DEFAULT, H5P_DEFAULT);
309 err = H5Awrite(attr, atype,
string);
310 if(err) {
return err;}
313 if(err) {
return err;}
315 err = H5Tclose(atype);
316 if(err) {
return err;}
318 err = H5Aclose(attr);
319 if(err) {
return err;}
322 if(err) {
return err;}
331 const char* datasetname,
332 int length,
double* data) {
334 hsize_t dim[1] = {length};
335 hsize_t maxdim[1] = {H5S_UNLIMITED};
336 hid_t dataspace = H5Screate_simple(1, dim, maxdim);
339 hsize_t chunk_dim[1] = {(int)ceil(length/2.0)};
340 hid_t prop = H5Pcreate(H5P_DATASET_CREATE);
341 H5Pset_chunk (prop, 1, chunk_dim);
344 hid_t dataset = H5Dcreate2(group, datasetname, H5T_IEEE_F64LE, dataspace,
345 H5P_DEFAULT, prop, H5P_DEFAULT);
349 if( H5Dwrite(dataset, H5T_IEEE_F64LE, H5S_ALL, H5S_ALL,
350 H5P_DEFAULT, data) < 0) {
365 const char* datasetname,
366 int length,
long* data) {
368 hsize_t dim[1] = {length};
369 hsize_t maxdim[1] = {H5S_UNLIMITED};
370 hid_t dataspace = H5Screate_simple(1, dim, maxdim);
373 hsize_t chunk_dim[1] = {(int)ceil(length/2.0)};
374 hid_t prop = H5Pcreate(H5P_DATASET_CREATE);
375 H5Pset_chunk (prop, 1, chunk_dim);
378 hid_t dataset = H5Dcreate2(group, datasetname, H5T_STD_I64LE, dataspace,
379 H5P_DEFAULT, prop, H5P_DEFAULT);
383 if( H5Dwrite(dataset, H5T_STD_I64LE, H5S_ALL, H5S_ALL,
384 H5P_DEFAULT, data) < 0 ) {
398 const char* datasetname,
399 int length,
int* data) {
401 hsize_t dim[1] = {length};
402 hsize_t maxdim[1] = {H5S_UNLIMITED};
403 hid_t dataspace = H5Screate_simple(1, dim, maxdim);
406 hsize_t chunk_dim[1] = {(int)ceil(length/2.0)};
407 hid_t prop = H5Pcreate(H5P_DATASET_CREATE);
408 H5Pset_chunk (prop, 1, chunk_dim);
411 hid_t dataset = H5Dcreate2(group, datasetname, H5T_STD_I32LE, dataspace,
412 H5P_DEFAULT, prop, H5P_DEFAULT);
416 if( H5Dwrite(dataset, H5T_STD_I32LE, H5S_ALL, H5S_ALL,
417 H5P_DEFAULT, data) < 0 ) {
Main header file for ASCOT5.
hid_t hdf5_create_group(hid_t loc, const char *path)
Create a group (with parent groups if necessary). Returns a handle to the group. Negative on failure.
herr_t hdf5_write_string_attribute(hid_t loc, const char *path, const char *attrname, const char *string)
Write string attribute with null-padding.
herr_t hdf5_find_group(hid_t loc, const char *path)
Checks if given group exists within given hdf5 file. Negative value is returned if the group doesn't ...
herr_t hdf5_write_extendible_dataset_long(hid_t group, const char *datasetname, int length, long *data)
Create and write to an extendible dataset for long data.
herr_t hdf5_write_extendible_dataset_int(hid_t group, const char *datasetname, int length, int *data)
Create and write to an extendible dataset int data.
int hdf5_read_double(const char *var, real *ptr, hid_t file, char *qid, const char *errfile, int errline)
Read double-valued data from ASCOT5 HDF5 file.
int hdf5_read_long(const char *var, long *ptr, hid_t file, char *qid, const char *errfile, int errline)
Read long-valued data from ASCOT5 HDF5 file.
hid_t hdf5_create(const char *filename)
Create an hdf5 file, fail if file exists. A negative value is returned on failure.
int hdf5_read_short(const char *var, short *ptr, hid_t file, char *qid, const char *errfile, int errline)
Read short-valued data from ASCOT5 HDF5 file.
herr_t hdf5_close(hid_t file_id)
Close access to given hdf5 file identifier. A negative value is returned on failure.
char * hdf5_gen_path(const char *original, char *qid, char *path)
Generate a valid path from a given template and qid.
void hdf5_init(void)
Initialize hdf5, right now just disables automatic error messages.
hid_t hdf5_open_ro(const char *filename)
Open a hdf5 file for read only. A negative value is returned on failure.
herr_t hdf5_write_extendible_dataset_double(hid_t group, const char *datasetname, int length, double *data)
Create and write to an extendible dataset for double data.
hid_t hdf5_open(const char *filename)
Open a hdf5 file for reading and writing. A negative value is returned on failure.
int hdf5_read_int(const char *var, int *ptr, hid_t file, char *qid, const char *errfile, int errline)
Read int-valued data from ASCOT5 HDF5 file.
char * hdf5_generate_qid_path(const char *original, char *qid, char *path)
Generate a valid path from a given template and qid.
Macros for printing console output.
#define print_err(...)
Print to standard error.