herr_t H5IMmake_palette( hid_t loc_id, const char *pal_name, const hsize_t *pal_dims, const unsigned char *pal_data ) { int has_pal; /* check the arguments */ if (pal_name == NULL) return -1; /* Check if the dataset already exists */ has_pal = H5LTfind_dataset( loc_id, pal_name ); /* It exists. Return */ if ( has_pal == 1 ) return 0; /* Make the palette dataset. */ if ( H5LTmake_dataset( loc_id, pal_name, 2, pal_dims, H5T_NATIVE_UCHAR, pal_data ) < 0 ) return -1; /* Attach the attribute "CLASS" to the >>palette<< dataset*/ if ( H5LTset_attribute_string( loc_id, pal_name, "CLASS", PALETTE_CLASS ) < 0) return -1; /* Attach the attribute "PAL_VERSION" to the >>palette<< dataset*/ if ( H5LTset_attribute_string( loc_id, pal_name, "PAL_VERSION", "1.2" ) < 0) return -1; return 0; }
/*+++++++++++++++++++++++++ .IDENTifer PYTABLE_open_group .PURPOSE Open/Create a group in an exsisting HDF5-file .INPUT/OUTPUT call as grpID = PYTABLE_open_group( locID, name, sz_hint ); input: hid_t locID : HDF5 object id char name[] : name of the group .RETURNS A negative value is returned on failure. .COMMENTS none -------------------------*/ hid_t PYTABLE_open_group( hid_t locID, const char *name ) { hid_t grpID; /* * check if the group exists, if not create it */ H5E_BEGIN_TRY { if ( (grpID = H5Gopen( locID, name, H5P_DEFAULT )) < 0 ) { grpID = H5Gcreate( locID, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT ); (void) H5LTset_attribute_string( locID, name, "CLASS", PY_GROUP_CLASS ); (void) H5LTset_attribute_string( locID, name, "PYTABLES_FORMAT_VERSION", PY_FORMAT_VERSION ); (void) H5LTset_attribute_string( locID, name, "TITLE", name ); (void) H5LTset_attribute_string( locID, name, "VERSION", PY_GROUP_VERSION ); } } H5E_END_TRY; /* * return id of the group */ return grpID; }
/*+++++++++++++++++++++++++ .IDENTifer PYTABLE_open_file .PURPOSE Open/Create a PyTable file .INPUT/OUTPUT call as grpID = PYTABLE_open_file( filename, title ); input: char filename[] : file name char title[] : title of the PyTable database .RETURNS A negative value is returned on failure. .COMMENTS none -------------------------*/ hid_t PYTABLE_open_file( const char *filename, const char *title ) { hid_t fileID; /* * check if the file exists, if not create it */ H5E_BEGIN_TRY { fileID = H5Fopen( filename, H5F_ACC_RDWR, H5P_DEFAULT ); if ( fileID < 0 ) { fileID = H5Fcreate( filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ); if ( fileID < 0 ) return -1; /* * attach PyTables required attributes */ (void) H5LTset_attribute_string( fileID, "/", "CLASS", PY_GROUP_CLASS ); (void) H5LTset_attribute_string( fileID, "/", "PYTABLES_FORMAT_VERSION", PY_FORMAT_VERSION ); (void) H5LTset_attribute_string( fileID, "/", "TITLE", title ); (void) H5LTset_attribute_string( fileID, "/", "VERSION", PY_GROUP_VERSION ); } } H5E_END_TRY; /* * return id of the file */ return fileID; }
herr_t H5IMmake_image_8bit( hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height, const unsigned char *buf ) { hsize_t dims[IMAGE8_RANK]; /* check the arguments */ if (dset_name == NULL) return -1; /* Initialize the image dimensions */ dims[0] = height; dims[1] = width; /* Make the dataset */ if ( H5LTmake_dataset( loc_id, dset_name, IMAGE8_RANK, dims, H5T_NATIVE_UCHAR, buf ) < 0) return -1; /* Attach the CLASS attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", IMAGE_CLASS ) < 0) return -1; /* Attach the VERSION attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_VERSION", IMAGE_VERSION ) < 0) return -1; /* Attach the IMAGE_SUBCLASS attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_INDEXED" ) < 0) return -1; return 0; }
herr_t H5IMmake_image_24bit( hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height, const char *interlace, const unsigned char *buf ) { hsize_t dims[IMAGE24_RANK]; /* check the arguments */ if (interlace == NULL) return -1; if (dset_name == NULL) return -1; /* Initialize the image dimensions */ if ( HDstrncmp( interlace, "INTERLACE_PIXEL",15 ) == 0 ) { /* Number of color planes is defined as the third dimension */ dims[0] = height; dims[1] = width; dims[2] = IMAGE24_RANK; } else if ( HDstrncmp( interlace, "INTERLACE_PLANE",15 ) == 0 ) { /* Number of color planes is defined as the first dimension */ dims[0] = IMAGE24_RANK; dims[1] = height; dims[2] = width; } else return -1; /* Make the dataset */ if ( H5LTmake_dataset( loc_id, dset_name, IMAGE24_RANK, dims, H5T_NATIVE_UCHAR, buf ) < 0) return -1; /* Attach the CLASS attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", IMAGE_CLASS ) < 0) return -1; /* Attach the VERSION attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_VERSION", IMAGE_VERSION ) < 0) return -1; /* Attach the IMAGE_SUBCLASS attribute */ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_TRUECOLOR" ) < 0) return -1; /* Attach the INTERLACE_MODE attribute. This attributes is only for true color images */ if ( H5LTset_attribute_string( loc_id, dset_name, "INTERLACE_MODE", interlace ) < 0) return -1; return 0; }
/*writes properties of the current run related to implementation and command line choices*/ herr_t /*hdf5 error*/ append_meta_properties(hdf5block_t *h5block,/*hdf5 file ids*/ double *seed,/*random number seed*/ size_t *BurnInSampleSize, /*tuning iterations*/ char *h5file, /*name of hdf5 file containing the experimental data and prior set-up*/ char *lib_base)/*basename of the library file @code .so@ file*/{ herr_t status; int omp_n,omp_np,i; status&=H5LTset_attribute_double(h5block->file_id, "LogParameters", "seed", seed, 1); status&=H5LTset_attribute_ulong(h5block->file_id, "LogParameters", "BurnIn", BurnInSampleSize, 1); status&=H5LTset_attribute_string(h5block->file_id, "LogParameters", "DataFrom", h5file); status&=H5LTmake_dataset_string(h5block->file_id,"Model",lib_base); // here we make a short test to see what the automatic choice of the // number of threads turns out to be. #pragma omp parallel private(omp_n,omp_np) reduction(+:i) { i=1; omp_n=omp_get_num_threads(); omp_np=omp_get_num_procs(); } if (i!=omp_n){ fprintf(stderr,"[append_meta_properties] warning: finding out number of threads possibly failed reduction of (n×1: %i) != get_num_threads():%i.\n",i,omp_n); } else { h5block->size[0]=1; h5block->size[1]=1; status&=H5LTmake_dataset_int(h5block->file_id,"OMP_NUM_THREADS",1,h5block->size,&omp_n); status&=H5LTmake_dataset_int(h5block->file_id,"OMP_NUM_PROCS",1,h5block->size,&omp_np); } return status; }
void Grid::initData(FileIO *fileIO) { hid_t gridGroup = fileIO->newGroup("/Grid"); // set lengths check(H5LTset_attribute_double(gridGroup, ".", "Lx", &Lx, 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "Ly", &Ly, 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "Lz", &Lz, 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "Lv", &Lv, 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "Lm", &Lm, 1), DMESG("HDF-5 Error")); // set grid point number check(H5LTset_attribute_int(gridGroup, ".", "Nx", &Nx , 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_int(gridGroup, ".", "Nky",&Nky, 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_int(gridGroup, ".", "Nz", &Nz , 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_int(gridGroup, ".", "Nv", &Nv , 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_int(gridGroup, ".", "Nm", &Nm , 1), DMESG("HDF-5 Error")); check(H5LTset_attribute_int(gridGroup, ".", "Ns", &Ns , 1), DMESG("HDF-5 Error")); // set grids check(H5LTset_attribute_double(gridGroup, ".", "X", &X[NxGlD], Nx), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "Z", &Z[NzGlD], Nz), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "V", &V[NvGlD], Nv), DMESG("HDF-5 Error")); check(H5LTset_attribute_double(gridGroup, ".", "M", &M[NmGlD], Nm), DMESG("HDF-5 Error")); check(H5LTset_attribute_string(gridGroup, ".", "MuIntegrationType", muIntegrationType.c_str()), DMESG("HDF-5 Error")); H5Gclose(gridGroup); }
// Write string attribute <attr_name> given by address <path> char AH5_write_str_attr(hid_t loc_id, const char *path, char *attr_name, const char *wdata) { char success = AH5_FALSE; if (AH5_path_valid(loc_id, path)) if (H5LTset_attribute_string(loc_id, path, attr_name, wdata) >= 0) success = AH5_TRUE; return success; }
/** * Write integer attribute. * * @param [in] DatasetName * @param [in] AttributeName * @param [in] Value * @throw ios::failure */ inline void THDF5_File::WriteStringAttribute(const char * DatasetName, const char * AttributeName, const string & Value){ herr_t status = H5LTset_attribute_string(HDF5_FileId, DatasetName, AttributeName, Value.c_str()); if (status < 0) { char ErrorMessage[256]; sprintf(ErrorMessage,HDF5_ERR_FMT_CouldNotWriteToAttribute,AttributeName, DatasetName); throw ios::failure(ErrorMessage); } }// end of WriteIntAttribute
int pioAddAttributeString(PIOObject pioObject, const char* attr_name, const char* attr_value) { if (pioAttributeIsProtected(attr_name)) { fprintf(stdout, "WARNING: Attribute name %s is a reserved for pinocchIO internal use.\n", attr_name); return -1; } return H5LTset_attribute_string(pioObject.identifier, ".", attr_name, attr_value); }
void Particle_interaction_model::write_to_file( hid_t hdf5_file_id ) { hid_t group_id; herr_t status; std::string hdf5_groupname = "/Particle_interaction_model"; group_id = H5Gcreate( hdf5_file_id, hdf5_groupname.c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); hdf5_status_check( group_id ); status = H5LTset_attribute_string( hdf5_file_id, hdf5_groupname.c_str(), "particle_interaction_model", particle_interaction_model.c_str() ); hdf5_status_check( status ); status = H5Gclose(group_id); hdf5_status_check( status ); return; }
int_f nh5ltset_attribute_string_c(hid_t_f *loc_id, int_f *namelen, _fcd dsetname, int_f *attrnamelen, _fcd attrname, void *buf) { int ret_value = -1; herr_t ret; hid_t c_loc_id; char *c_name; char *c_attrname; int c_namelen; int c_attrnamelen; /* * Convert FORTRAN name to C name */ c_namelen = *namelen; c_name = (char *)HD5f2cstring(dsetname, c_namelen); if (c_name == NULL) return ret_value; c_attrnamelen = *attrnamelen; c_attrname = (char *)HD5f2cstring(attrname, c_attrnamelen); if (c_attrname == NULL) return ret_value; /* * Call H5LTset_attribute_string function. */ c_loc_id = (hid_t)*loc_id; ret = H5LTset_attribute_string(c_loc_id,c_name,c_attrname,buf); if (ret < 0) return ret_value; ret_value = 0; return ret_value; }
/* ------- begin -------------------------- init_hdf5_indata.c --- */ void init_hdf5_indata_new(void) /* Creates the netCDF file for the input data */ { const char routineName[] = "init_hdf5_indata_new"; int i, PRD_angle_dep; double *eweight, *eabund, *x, *y; /* This value is harcoded for efficiency. Maximum number of iterations ever needed */ int NMaxIter = 1500; hid_t plist, ncid, file_dspace, ncid_input, ncid_atmos, ncid_mpi; hsize_t dims[4]; bool_t XRD; char startJ[MAX_LINE_SIZE], StokesMode[MAX_LINE_SIZE], angleSet[MAX_LINE_SIZE]; /* Create the file */ if (( plist = H5Pcreate(H5P_FILE_ACCESS )) < 0) HERR(routineName); if (( H5Pset_fapl_mpio(plist, mpi.comm, mpi.info) ) < 0) HERR(routineName); if (( ncid = H5Fcreate(INPUTDATA_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, plist) ) < 0) HERR(routineName); if (( H5Pclose(plist) ) < 0) HERR(routineName); /* Create groups */ if (( ncid_input = H5Gcreate(ncid, "/input", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) ) < 0) HERR(routineName); if (( ncid_atmos = H5Gcreate(ncid, "/atmos", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) ) < 0) HERR(routineName); if (( ncid_mpi = H5Gcreate(ncid, "/mpi", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) ) < 0) HERR(routineName); /* --- Definitions for the root group --- */ /* dimensions as attributes */ if (( H5LTset_attribute_int(ncid, "/", "nx", &mpi.nx, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid, "/", "ny", &mpi.ny, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid, "/", "nz", (int *) &infile.nz, 1 )) < 0) HERR(routineName); /* attributes */ if (( H5LTset_attribute_string(ncid, "/", "atmosID", atmos.ID)) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid, "/", "rev_id", mpi.rev_id) ) < 0) HERR(routineName); /* --- Definitions for the INPUT group --- */ /* attributes */ if ( atmos.NPRDactive > 0) PRD_angle_dep = input.PRD_angle_dep; else PRD_angle_dep=0; XRD = (input.XRD && atmos.NPRDactive > 0); if (( H5LTset_attribute_uchar(ncid_input, ".", "Magneto_optical", (unsigned char *) &input.magneto_optical, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_uchar(ncid_input, ".", "PRD_angle_dep", (unsigned char *) &PRD_angle_dep, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_uchar(ncid_input, ".", "XRD", (unsigned char *) &XRD, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_uchar(ncid_input, ".", "Background_polarization", (unsigned char *) &input.backgr_pol, 1)) < 0) HERR(routineName); switch (input.startJ) { case UNKNOWN: strcpy(startJ, "Unknown"); break; case LTE_POPULATIONS: strcpy(startJ, "LTE_POPULATIONS"); break; case ZERO_RADIATION: strcpy(startJ, "ZERO_RADIATION"); break; case OLD_POPULATIONS: strcpy(startJ, "OLD_POPULATIONS"); break; case ESCAPE_PROBABILITY: strcpy(startJ, "ESCAPE_PROBABILITY"); break; case NEW_J: strcpy(startJ, "NEW_J"); break; case OLD_J: strcpy(startJ, "OLD_J"); break; } if (( H5LTset_attribute_string(ncid_input, ".", "Start_J", startJ)) < 0) HERR(routineName); switch (input.StokesMode) { case NO_STOKES: strcpy(StokesMode, "NO_STOKES"); break; case FIELD_FREE: strcpy(StokesMode, "FIELD_FREE"); break; case POLARIZATION_FREE: strcpy(StokesMode, "POLARIZATION_FREE"); break; case FULL_STOKES: strcpy(StokesMode, "FULL_STOKES"); break; } if (( H5LTset_attribute_string(ncid_input, ".", "Stokes_mode", StokesMode) ) < 0) HERR(routineName); switch (atmos.angleSet.set) { case SET_VERTICAL: strcpy(angleSet, "SET_VERTICAL"); break; case SET_GL: strcpy(angleSet, "SET_GL"); break; case SET_A2: strcpy(angleSet, "SET_A2"); break; case SET_A4: strcpy(angleSet, "SET_A4"); break; case SET_A6: strcpy(angleSet, "SET_A6"); break; case SET_A8: strcpy(angleSet, "SET_A8"); break; case SET_B4: strcpy(angleSet, "SET_B4"); break; case SET_B6: strcpy(angleSet, "SET_B6"); break; case SET_B8: strcpy(angleSet, "SET_B8"); break; case NO_SET: strcpy(angleSet, "NO_SET"); break; } if (( H5LTset_attribute_string(ncid_input, ".", "Angle_set", angleSet) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_input, ".", "Atmos_file", input.atmos_input) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_input, ".", "Abundances_file", input.abund_input) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_input, ".", "Kurucz_PF_data", input.pfData) ) < 0) HERR(routineName); if (( H5LTset_attribute_double(ncid_input, ".", "Iteration_limit", &input.iterLimit, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_double(ncid_input, ".", "PRD_Iteration_limit", &input.PRDiterLimit, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "N_max_iter", &input.NmaxIter, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "Ng_delay", &input.Ngdelay, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "Ng_order", &input.Ngorder, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "Ng_period", &input.Ngperiod, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "PRD_N_max_iter", &input.PRD_NmaxIter, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "PRD_Ng_delay", &input.PRD_Ngdelay, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "PRD_Ng_order", &input.PRD_Ngorder, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_input, ".", "PRD_Ng_period", &input.PRD_Ngperiod, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_double(ncid_input, ".", "Metallicity", &input.metallicity, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_double(ncid_input, ".", "Lambda_reference", &atmos.lambda_ref, 1) ) < 0) HERR(routineName); /* --- Definitions for the ATMOS group --- */ /* dimensions */ if (( H5LTset_attribute_int(ncid_atmos, ".", "nhydr", &atmos.H->Nlevel, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_atmos, ".", "nelements", &atmos.Nelem, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_atmos, ".", "nrays", &geometry.Nrays, 1) ) < 0) HERR(routineName); /* variables*/ dims[0] = mpi.nx; dims[1] = mpi.ny; dims[2] = infile.nz; if (( file_dspace = H5Screate_simple(3, dims, NULL) ) < 0) HERR(routineName); if (( plist = H5Pcreate(H5P_DATASET_CREATE) ) < 0) HERR(routineName); if (( H5Pset_fill_value(plist, H5T_NATIVE_FLOAT, &FILLVALUE) ) < 0) HERR(routineName); if (( H5Pset_alloc_time(plist, H5D_ALLOC_TIME_EARLY) ) < 0) HERR(routineName); if (( H5Pset_fill_time(plist, H5D_FILL_TIME_ALLOC) ) < 0) HERR(routineName); if (( io.in_atmos_T = H5Dcreate(ncid_atmos, "temperature", H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_atmos_vz = H5Dcreate(ncid_atmos, "velocity_z", H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_atmos_z = H5Dcreate(ncid_atmos, "height", H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5Pclose(plist) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); /* --- Write some data that does not depend on xi, yi, ATMOS group --- */ /* arrays of number of elements */ eweight = (double *) malloc(atmos.Nelem * sizeof(double)); eabund = (double *) malloc(atmos.Nelem * sizeof(double)); for (i=0; i < atmos.Nelem; i++) { eweight[i] = atmos.elements[i].weight; eabund[i] = atmos.elements[i].abund; } dims[0] = atmos.Nelem; if (( H5LTmake_dataset(ncid_atmos, "element_weight", 1, dims, H5T_NATIVE_DOUBLE, eweight) ) < 0) HERR(routineName); if (( H5LTmake_dataset(ncid_atmos, "element_abundance", 1, dims, H5T_NATIVE_DOUBLE, eabund) ) < 0) HERR(routineName); /* Not writing element_id for now dims[1] = strlen; if (( H5LTmake_dataset(ncid_atmos, "element_id", 2, dims, H5T_C_S1, eID) ) < 0) HERR(routineName); */ free(eweight); free(eabund); dims[0] = geometry.Nrays; if (( H5LTmake_dataset(ncid_atmos, "muz", 1, dims, H5T_NATIVE_DOUBLE, geometry.muz) ) < 0) HERR(routineName); if (( H5LTmake_dataset(ncid_atmos, "wmu", 1, dims, H5T_NATIVE_DOUBLE, geometry.wmu) ) < 0) HERR(routineName); x = (double *) malloc(mpi.nx * sizeof(double)); y = (double *) malloc(mpi.ny * sizeof(double)); for (i=0; i < mpi.nx; i++) x[i] = infile.x[mpi.xnum[i]]; for (i=0; i < mpi.ny; i++) y[i] = infile.y[mpi.ynum[i]]; dims[0] = mpi.nx; if (( H5LTmake_dataset(ncid_atmos, "x", 1, dims, H5T_NATIVE_DOUBLE, x) ) < 0) HERR(routineName); dims[0] = mpi.ny; if (( H5LTmake_dataset(ncid_atmos, "y", 1, dims, H5T_NATIVE_DOUBLE, y) ) < 0) HERR(routineName); free(x); free(y); /* attributes */ if (( H5LTset_attribute_uchar(ncid_atmos, ".", "moving", (unsigned char *) &atmos.moving, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_uchar(ncid_atmos, ".", "stokes", (unsigned char *) &atmos.Stokes, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "temperature", "units", "K") ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "velocity_z", "units", "m s^-1") ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "height", "units", "m") ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "element_weight", "units", "atomic_mass_units") ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "x", "units", "m") ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atmos, "y", "units", "m") ) < 0) HERR(routineName); /* --- Definitions for the MPI group --- */ /* dimensions */ if (( H5LTset_attribute_int(ncid_mpi, ".", "nprocesses", &mpi.size, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "niterations", &NMaxIter, 1) ) < 0) HERR(routineName); /* variables*/ dims[0] = mpi.nx; if (( H5LTmake_dataset(ncid_mpi, XNUM_NAME, 1, dims, H5T_NATIVE_INT, mpi.xnum) ) < 0) HERR(routineName); dims[0] = mpi.ny; if (( H5LTmake_dataset(ncid_mpi, YNUM_NAME, 1, dims, H5T_NATIVE_INT, mpi.ynum) ) < 0) HERR(routineName); dims[0] = mpi.nx; dims[1] = mpi.ny; if (( file_dspace = H5Screate_simple(2, dims, NULL) ) < 0) HERR(routineName); if (( plist = H5Pcreate(H5P_DATASET_CREATE) ) < 0) HERR(routineName); if (( H5Pset_fill_value(plist, H5T_NATIVE_FLOAT, &FILLVALUE) ) < 0) HERR(routineName); if (( H5Pset_alloc_time(plist, H5D_ALLOC_TIME_EARLY) ) < 0) HERR(routineName); if (( H5Pset_fill_time(plist, H5D_FILL_TIME_ALLOC) ) < 0) HERR(routineName); if (( io.in_mpi_tm = H5Dcreate(ncid_mpi, TASK_MAP, H5T_NATIVE_LONG, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_mpi_tn = H5Dcreate(ncid_mpi, TASK_NUMBER, H5T_NATIVE_LONG, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_mpi_it = H5Dcreate(ncid_mpi, ITER_NAME, H5T_NATIVE_LONG, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_mpi_conv = H5Dcreate(ncid_mpi, CONV_NAME, H5T_NATIVE_LONG, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_mpi_dm = H5Dcreate(ncid_mpi, DM_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( io.in_mpi_zc = H5Dcreate(ncid_mpi, ZC_NAME, H5T_NATIVE_INT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5Pclose(plist) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); dims[0] = mpi.nx; dims[1] = mpi.ny; dims[2] = NMaxIter; if (( file_dspace = H5Screate_simple(3, dims, NULL) ) < 0) HERR(routineName); if (( plist = H5Pcreate(H5P_DATASET_CREATE) ) < 0) HERR(routineName); if (( H5Pset_fill_value(plist, H5T_NATIVE_FLOAT, &FILLVALUE) ) < 0) HERR(routineName); if (( H5Pset_alloc_time(plist, H5D_ALLOC_TIME_EARLY) ) < 0) HERR(routineName); if (( H5Pset_fill_time(plist, H5D_FILL_TIME_ALLOC) ) < 0) HERR(routineName); if (( io.in_mpi_dmh = H5Dcreate(ncid_mpi, DMH_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5Pclose(plist) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); /* attributes */ if (( H5LTset_attribute_int(ncid_mpi, ".", "x_start", &input.p15d_x0, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "x_end", &input.p15d_x1, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "x_step", &input.p15d_xst, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "y_start", &input.p15d_y0, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "y_end", &input.p15d_y1, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mpi, ".", "y_step", &input.p15d_yst, 1) ) < 0) HERR(routineName); /* Tiago: most of the arrays involving Ntasks or rank as index are not currently being written. They should eventually be migrated into arrays of [ix, iy] and be written for each task. This is to avoid causing problems with pool mode, where these quantities are not known from the start. */ /* Flush ensures file is created in case of crash */ if (( H5Fflush(ncid, H5F_SCOPE_LOCAL) ) < 0) HERR(routineName); /* --- Copy stuff to the IO data struct --- */ io.in_ncid = ncid; io.in_input_ncid = ncid_input; io.in_atmos_ncid = ncid_atmos; io.in_mpi_ncid = ncid_mpi; return; }
int SpIO_FwriteModel(SpFile *sfp, SpModel model) { int status = 0; herr_t hstatus; /* Write the version of format */ if(!status) { hstatus = H5LTset_attribute_string(sfp->h5f_id, "/", "format", "SPARX format v3"); if(hstatus < 0) status = 1; } /* Write the type of coordinat system */ if(!status) { DatINode *geom = Dat_IList_IdxLookup(GEOM_TYPES, model.parms.geom); Deb_ASSERT(geom != NULL); hstatus = H5LTset_attribute_string(sfp->h5f_id, "/", "geom", geom->name); if(hstatus < 0) status = 1; } /* Write T_cmb */ if(!status) { hstatus = H5LTset_attribute_double(sfp->h5f_id, "/", "T_cmb", &model.parms.T_cmb, (size_t)1); if(hstatus < 0) status = 1; } /* Write T_in */ if(!status) { hstatus = H5LTset_attribute_double(sfp->h5f_id, "/", "T_in", &model.parms.T_in, (size_t)1); if(hstatus < 0) status = 1; } /* Write molecule name */ if(!status) { Molec *mol = model.parms.mol; hstatus = H5LTset_attribute_string(sfp->h5f_id, "/", "molec", mol ? mol->name : ""); if(hstatus < 0) status = 1; } /* Write pops-switch */ if(!status) { hstatus = H5LTset_attribute_int(sfp->h5f_id, "/", "pops", &model.parms.pops, (size_t)1); if(hstatus < 0) status = 1; } /* Write dust-switch */ if(!status) { hstatus = H5LTset_attribute_int(sfp->h5f_id, "/", "dust", &model.parms.dust, (size_t)1); if(hstatus < 0) status = 1; } /* Write polariz-switch */ if(!status) { hstatus = H5LTset_attribute_int(sfp->h5f_id, "/", "polariz", &model.parms.polariz, (size_t)1); if(hstatus < 0) status = 1; } /* Write polariz-switch */ if(!status) { hstatus = H5LTset_attribute_double(sfp->h5f_id, "/", "z", &model.parms.z, (size_t)1); if(hstatus < 0) status = 1; } /* Write grid */ if(!status) status = SpIO_H5WriteGrid(sfp->h5f_id, model.grid, &model.parms); if(status) status = Err_SETSTRING("Error writing model to file `%s'", sfp->name); return status; }
herr_t H5IMmake_image_8bitf(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height, int_f *buf) { hid_t did; /* dataset ID */ hid_t sid; /* space ID */ hsize_t dims[IMAGE8_RANK]; /* dimensions */ /* initialize the image dimensions */ dims[0] = height; dims[1] = width; /*------------------------------------------------------------------------- * create and write the dataset *------------------------------------------------------------------------- */ /* create the data space for the dataset. */ if((sid = H5Screate_simple(IMAGE8_RANK, dims, NULL)) < 0) return -1; /* create the dataset as H5T_NATIVE_UCHAR */ if((did = H5Dcreate2(loc_id, dset_name, H5T_NATIVE_UINT8, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) return -1; /* write with memory type H5T_NATIVE_INT */ /* Use long type if Fortran integer is 8 bytes and C long long is also 8 bytes*/ /* Fail if otherwise */ if(buf) { if(sizeof(int_f) == sizeof(int)) { if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else if(sizeof(int_f) == sizeof(long)) { if(H5Dwrite(did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else if(sizeof(int_f) == sizeof(long long)) { if(H5Dwrite(did, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else return -1; } /* close */ if(H5Dclose(did) < 0) return -1; if(H5Sclose(sid) < 0) return -1; /*------------------------------------------------------------------------- * attach the specification attributes *------------------------------------------------------------------------- */ /* attach the CLASS attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "CLASS", IMAGE_CLASS) < 0) return -1; /* attach the VERSION attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "IMAGE_VERSION", IMAGE_VERSION) < 0) return -1; /* attach the IMAGE_SUBCLASS attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_INDEXED") < 0) return -1; return 0; }
herr_t H5IMmake_palettef(hid_t loc_id, const char *pal_name, const hsize_t *pal_dims, int_f *pal_data) { hid_t did; /* dataset ID */ hid_t sid; /* space ID */ int has_pal; /* Check if the dataset already exists */ has_pal = H5LTfind_dataset(loc_id, pal_name); /* It exists. Return */ if(has_pal == 1) return 0; /*------------------------------------------------------------------------- * create and write the dataset *------------------------------------------------------------------------- */ /* create the data space for the dataset. */ if((sid = H5Screate_simple(2, pal_dims, NULL)) < 0) return -1; /* create the dataset as H5T_NATIVE_UCHAR */ if((did = H5Dcreate2(loc_id, pal_name, H5T_NATIVE_UCHAR, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) return -1; /* write with memory type H5T_NATIVE_INT */ if(pal_data) { if(sizeof(int_f) == sizeof(int)) { if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, pal_data) < 0) return -1; } else if(sizeof(int_f) == sizeof(long)) { if(H5Dwrite(did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, pal_data) < 0) return -1; } else if(sizeof(int_f) == sizeof(long long)) { if(H5Dwrite(did, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, pal_data) < 0) return -1; } else return -1; } /* close */ if(H5Dclose(did) < 0) return -1; if(H5Sclose(sid) < 0) return -1; /*------------------------------------------------------------------------- * attach the specification attributes *------------------------------------------------------------------------- */ /* Attach the attribute "CLASS" to the >>palette<< dataset*/ if(H5LTset_attribute_string(loc_id, pal_name, "CLASS", PALETTE_CLASS) < 0) return -1; /* Attach the attribute "PAL_VERSION" to the >>palette<< dataset*/ if(H5LTset_attribute_string(loc_id, pal_name, "PAL_VERSION", "1.2") < 0) return -1; return 0; }
herr_t H5IMmake_image_24bitf(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height, const char *interlace, int_f *buf) { hid_t did; /* dataset ID */ hid_t sid; /* space ID */ hsize_t dims[IMAGE24_RANK]; /* dimensions */ /*------------------------------------------------------------------------- * attach the image dimensions according to the interlace mode *------------------------------------------------------------------------- */ if(strcmp(interlace, "INTERLACE_PIXEL") == 0) { /* Number of color planes is defined as the third dimension */ dims[0] = height; dims[1] = width; dims[2] = IMAGE24_RANK; } else if(strcmp(interlace, "INTERLACE_PLANE") == 0) { /* Number of color planes is defined as the first dimension */ dims[0] = IMAGE24_RANK; dims[1] = height; dims[2] = width; } else return -1; /*------------------------------------------------------------------------- * create and write the dataset *------------------------------------------------------------------------- */ /* create the data space for the dataset. */ if((sid = H5Screate_simple(IMAGE24_RANK, dims, NULL)) < 0) return -1; /* create the dataset as H5T_NATIVE_UCHAR */ if((did = H5Dcreate2(loc_id, dset_name, H5T_NATIVE_UCHAR, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) return -1; /* write with memory type H5T_NATIVE_INT */ if(buf) { if(sizeof(int_f) == sizeof(int)) { if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else if(sizeof(int_f) == sizeof(long)) { if(H5Dwrite(did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else if(sizeof(int_f) == sizeof(long long)) { if(H5Dwrite(did, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) return -1; } else return -1; } /* close */ if(H5Dclose(did) < 0) return -1; if(H5Sclose(sid) < 0) return -1; /*------------------------------------------------------------------------- * attach the specification attributes *------------------------------------------------------------------------- */ /* Attach the CLASS attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "CLASS", IMAGE_CLASS) < 0) return -1; /* Attach the VERSION attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "IMAGE_VERSION", IMAGE_VERSION) < 0) return -1; /* Attach the IMAGE_SUBCLASS attribute */ if(H5LTset_attribute_string(loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_TRUECOLOR") < 0) return -1; /* Attach the INTERLACE_MODE attribute. This attributes is only for true color images */ if(H5LTset_attribute_string(loc_id, dset_name, "INTERLACE_MODE", interlace) < 0) return -1; return 0; }
void write_string_attribute (std::string const & obj_name, std::string const & attr_name, std::string const & value){ herr_t err = H5LTset_attribute_string(_g.getId(),obj_name.c_str(),attr_name.c_str(), value.c_str() ) ; if (err<0) TRIQS_RUNTIME_ERROR << "Error in setting attribute of "<< obj_name<<" named "<< attr_name << " to " << value; }
/*+++++++++++++++++++++++++ .IDENTifer PYTABLE_make_array .PURPOSE create extensible HDF5 dataset .INPUT/OUTPUT call as stat = PYTABLE_make_array( locID, dset_name, title, rank, dims, extdim, typeID, dims_chunk, fill_data, compress, shuffle, fletcher32, buff ); input: hid_t locID : HDF5 identifier of file or group char *dset_name : name of dataset char *title : int rank : number of dimensions hsize_t *dims : size of each dimension int extdim : index of expendable dimension hid_t typeID : data type (HDF5 identifier) hsize_t *dims_chunk : chunk sizes void *fill_data : Fill value for data unsigned int compress : compression level (zero for no compression) bool shuffle : shuffel data for better compression bool fletcher32 : void *buffer : buffer with data to write (or NULL) .RETURNS A negative value is returned on failure. .COMMENTS none -------------------------*/ herr_t PYTABLE_make_array( hid_t locID, const char *dset_name, const char *title, const int rank, const hsize_t *dims, int extdim, hid_t typeID, const hsize_t *dims_chunk, void *fill_data, unsigned int compress, bool shuffle, bool fletcher32, const void *buffer ) { register int ni; hid_t dataID = -1, spaceID = -1; herr_t stat; /* check if the array has to be chunked or not */ if ( dims_chunk != NULL ) { hid_t plistID; hsize_t *maxdims = (hsize_t *) malloc( rank * sizeof(hsize_t) ); if ( maxdims == NULL ) NADC_GOTO_ERROR( NADC_ERR_ALLOC, "maxdims" ); for ( ni = 0; ni < rank; ni++ ) { if ( ni == extdim ) maxdims[ni] = H5S_UNLIMITED; else maxdims[ni] = dims[ni] < dims_chunk[ni] ? dims_chunk[ni] : dims[ni]; } spaceID = H5Screate_simple( rank, dims, maxdims ); free( maxdims ); if ( spaceID < 0 ) NADC_GOTO_ERROR( NADC_ERR_HDF_SPACE, "" ); /* Modify dataset creation properties, i.e. enable chunking */ plistID = H5Pcreate( H5P_DATASET_CREATE ); if ( H5Pset_chunk( plistID, rank, dims_chunk ) < 0 ) goto done; /* set the fill value using a struct as the data type */ if ( fill_data != NULL && H5Pset_fill_value( plistID, typeID, fill_data ) < 0 ) goto done; /* dataset creation property list is modified to use */ /* fletcher must be first */ if ( fletcher32 ) { if ( H5Pset_fletcher32( plistID ) < 0 ) goto done; } /* then shuffle */ if ( shuffle ) { if ( H5Pset_shuffle( plistID ) < 0 ) goto done; } /* finally compression */ if ( compress > 0 ) { if ( H5Pset_deflate( plistID, compress ) < 0 ) goto done; } /* create the (chunked) dataset */ dataID = H5Dcreate( locID, dset_name, typeID, spaceID, H5P_DEFAULT, plistID, H5P_DEFAULT ); if ( dataID < 0 ) NADC_GOTO_ERROR( NADC_ERR_HDF_DATA, dset_name ); /* end access to the property list */ if ( H5Pclose( plistID ) < 0 ) goto done; } else { spaceID = H5Screate_simple( rank, dims, NULL ); if ( spaceID < 0 ) return -1; /* create the dataset (not chunked) */ dataID = H5Dcreate( locID, dset_name, typeID, spaceID, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT ); if ( dataID < 0 ) NADC_GOTO_ERROR( NADC_ERR_HDF_DATA, dset_name ); } /* * write the data */ stat = H5Dwrite( dataID, typeID, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer ); if ( stat < 0 ) NADC_GOTO_ERROR( NADC_ERR_HDF_WR, "" ); (void) H5Dclose( dataID ); (void) H5Sclose( spaceID ); /* * Set the conforming array attributes * * attach the CLASS attribute */ (void) H5LTset_attribute_string( locID, dset_name, "CLASS", PY_ARRAY_CLASS ); /* attach the EXTDIM attribute in case of enlargeable arrays */ (void) H5LTset_attribute_int( locID, dset_name, "EXTDIM", &extdim, 1 ); /* attach the FLAVOR attribute */ (void) H5LTset_attribute_string( locID, dset_name, "FLAVOR", PY_ARRAY_FLAVOR ); /* attach the VERSION attribute */ (void) H5LTset_attribute_string( locID, dset_name, "VERSION", PY_ARRAY_VERSION ); /* attach the TITLE attribute */ (void) H5LTset_attribute_string( locID, dset_name, "TITLE", title ); return 0; done: if ( dataID > 0 ) (void) H5Dclose( dataID ); if ( spaceID > 0 ) (void) H5Sclose( spaceID ); return -1; }
int FileIO::create(Setup *setup) { hid_t file_plist = H5Pcreate(H5P_FILE_ACCESS); #ifdef GKC_PARALLEL_MPI // pass some information onto the underlying MPI_File_open call MPI_Info file_info; check(MPI_Info_create(&file_info), DMESG("File info")); /* H5Pset_sieve_buf_size(file_plist, 262144); H5Pset_alignment(file_plist, 524288, 262144); MPI_Info_set(file_info, (char *) "access_style" , (char *) "write_once"); MPI_Info_set(file_info, (char *) "collective_buffering", (char *) "true"); MPI_Info_set(file_info, (char *) "cb_block_size" , (char *) "1048576"); MPI_Info_set(file_info, (char *) "cb_buffer_size" , (char *) "4194304"); * */ check( H5Pset_fapl_mpio(file_plist, parallel->Comm[DIR_ALL], file_info), DMESG("Set MPI Property")); #endif file = check(H5Fcreate(outputFileName.c_str(), (overwriteFile ? H5F_ACC_TRUNC : H5F_ACC_EXCL), H5P_DEFAULT, file_plist ), DMESG("H5FCreate : HDF5 File (File already exists ? use -f to overwrite) : " + outputFileName)); check( H5Pclose(file_plist), DMESG("H5Pclose")); #ifdef GKC_PARALLEL_MPI MPI_Info_free(&file_info); #endif //////////////////////////////////////////////////////////////// Info Group //////////////////////////////////////////////////////// hid_t infoGroup = check(H5Gcreate(file, "/Info",H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT), DMESG("Error creating group file for Phasespace : H5Gcreate")); check(H5LTset_attribute_string(infoGroup, ".", "Output", outputFileName.c_str()), DMESG("H5LTset_attribute")); check(H5LTset_attribute_string(infoGroup, ".", "Input", inputFileName.c_str()), DMESG("H5LTset_attribute")); check(H5LTset_attribute_string(infoGroup, ".", "Version", PACKAGE_VERSION), DMESG("H5LTset_attribute")); // Some Simulation specific stuff //check(H5LTset_attribute_string(infoGroup, ".", "Solver", ((setup->Solver & VL_LIN) ? "Linear" : "Non-Linear")), DMESG("H5LTset_attribute")); //heck(H5LTset_attribute_string(infoGroup, ".", "Type", ((setup->VlasovType & VLASOV_LOCAL ) ? "Local" : "Global" )), DMESG("H5LTset_attribute")); //heck(H5LTset_attribute_string(infoGroup, ".", "FFTSolverS", ((setup->VlasovType & VLASOV_LOCAL ) ? "Local" : "Global" )), DMESG("H5LTset_attribute")); //check(H5LTset_attribute_string(infoGroup, ".", "Initial Condition", setup->PerturbationMethod.c_str()), DMESG("H5LTset_attribute")); check(H5LTset_attribute_string(infoGroup, ".", "Info", info.c_str()), DMESG("H5LTset_attribute")); check(H5LTset_attribute_string(infoGroup, ".", "Config", setup->configFileString.c_str()), DMESG("H5LTset_attribute")); H5Gclose(infoGroup); /// Wrote setup constants, ugly here //// hid_t constantsGroup = check(H5Gcreate(file, "/Constants",H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT), DMESG("Error creating group file for Phasespace : H5Gcreate")); // if (!setup->parser_constants.empty()) { std::vector<std::string> const_vec = Setup::split(setup->parser_constants, ","); for(int s = 0; s < const_vec.size(); s++) { std::vector<std::string> key_value = Setup::split(const_vec[s],"="); double value = Setup::string_to_double(key_value[1]); int dim[] = { 1 }; // check(H5LTmake_dataset_double(constantsGroup, Setup::trimLower(key_value[0], false).c_str(), 1, dim, &value ), DMESG("Write Constants Attributes")); check(H5LTset_attribute_double(constantsGroup, ".", Setup::trimLower(key_value[0], false).c_str(), &value, 1), DMESG("H5LTset_attribute")); //check(H5LTset_attribute_double(constantsGroup, ".", Setup::trimLower(key_value[0], false).c_str(), &(Setup::string_to_double(key_value[1])), 1), DMESG("H5LTset_attribute")); }; } H5Gclose(constantsGroup); // ********************* setup Table for CFL *****************88 cfl_table = new CFLTable(); cfl_offset[0] = HOFFSET( CFLTable, timeStep ); cfl_offset[1] = HOFFSET( CFLTable, time ); cfl_offset[2] = HOFFSET( CFLTable, Fx ); cfl_offset[3] = HOFFSET( CFLTable, Fy ); cfl_offset[4] = HOFFSET( CFLTable, Fz ); cfl_offset[5] = HOFFSET( CFLTable, Fv ); cfl_offset[6] = HOFFSET( CFLTable, total ); for(int i = 1; i < 7; i++) cfl_sizes[i] = sizeof(double); cfl_sizes[0] = sizeof(int); hid_t cfl_type[7]; for(int i = 1; i < 7; i++) cfl_type [i] = H5T_NATIVE_DOUBLE; cfl_type[0] = H5T_NATIVE_INT; const char *cfl_names[7]; cfl_names[0] = "timeStep"; cfl_names[1] = "time"; cfl_names[2] = "Fx"; cfl_names[3] = "Fy"; cfl_names[4] = "Fz"; cfl_names[5] = "Fv"; cfl_names[6] = "Total"; check(H5TBmake_table("cflTable", file, "cfl", (hsize_t) 7, (hsize_t) 0, sizeof(CFLTable), (const char**) cfl_names, cfl_offset, cfl_type, 32, NULL, 0, cfl_table ), DMESG("H5Tmake_table : cfl")); return HELIOS_SUCCESS; }
int_f h5ltset_attribute_c(hid_t_f *loc_id, size_t_f *namelen, _fcd dsetname, size_t_f *attrnamelen, _fcd attrname, size_t_f *size, void *buf, char *dtype, size_t_f *sizeof_val) { int ret_value = -1; herr_t ret; hid_t c_loc_id; char *c_name = NULL; char *c_attrname = NULL; char *c_buf = NULL; size_t c_size; /* * convert FORTRAN name to C name */ c_name = (char *)HD5f2cstring(dsetname, (size_t)*namelen); if (c_name == NULL) goto done; c_attrname = (char *)HD5f2cstring(attrname, (size_t)*attrnamelen); if (c_attrname == NULL) goto done; /* * call H5LTset_attribute_int function. */ c_loc_id = (hid_t)*loc_id; c_size = (size_t)*size; if( HDstrncmp(dtype,"I",1) == 0 ) { if ((size_t)*sizeof_val == sizeof(int)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_INT, (const int *)buf); else if ((size_t)*sizeof_val == sizeof(long)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_LONG, (const long *)buf); else if ((size_t)*sizeof_val == sizeof(long long)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_LLONG, (const long long *)buf); else goto done; } else if ( HDstrncmp(dtype,"R",1) == 0 ) { if((size_t)*sizeof_val == sizeof(float)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_FLOAT, (const float *)buf); else if((size_t)*sizeof_val == sizeof(double)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_DOUBLE, (const double *)buf); #if H5_SIZEOF_LONG_DOUBLE !=0 else if((size_t)*sizeof_val == sizeof(long double)) ret = H5LT_set_attribute_numerical(c_loc_id,c_name,c_attrname, c_size, H5T_NATIVE_LDOUBLE, (const long double *)buf); #endif else goto done; } else if ( HDstrncmp(dtype,"C",1) == 0 ) { c_buf = (char *)HD5f2cstring((_fcd)buf, c_size); if (c_buf == NULL) goto done; ret = H5LTset_attribute_string(c_loc_id,c_name,c_attrname,c_buf); } if (ret < 0) goto done; ret_value = 0; done: if(c_name!=NULL) HDfree(c_name); if(c_attrname!=NULL) HDfree(c_attrname); if(c_buf!=NULL) HDfree(c_buf); return ret_value; }
/* ------- begin -------------------------- init_aux_new.c -- --- */ void init_aux_new(void) { /* Creates the HDF5 file for the auxiliary data */ const char routineName[] = "init_aux_new"; unsigned int *tmp; double *tmp_double; int i; hid_t plist, ncid, file_dspace, ncid_atom, ncid_mol; hid_t id_x, id_y, id_z, id_n, id_tmp; hsize_t dims[4]; char group_name[ARR_STRLEN]; Atom *atom; Molecule *molecule; /* Create the file */ if (( plist = H5Pcreate(H5P_FILE_ACCESS) ) < 0) HERR(routineName); if (( H5Pset_fapl_mpio(plist, mpi.comm, mpi.info) ) < 0) HERR(routineName); if (( ncid = H5Fcreate(AUX_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, plist) ) < 0) HERR(routineName); if (( H5Pclose(plist) ) < 0) HERR(routineName); /* --- Definitions for the root group --- */ /* dimensions as attributes */ if (( H5LTset_attribute_int(ncid, "/", "nx", &mpi.nx, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid, "/", "ny", &mpi.ny, 1) ) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid, "/", "nz", (int *) &infile.nz, 1 )) < 0) HERR(routineName); /* attributes */ if (( H5LTset_attribute_string(ncid, "/", "atmosID", atmos.ID)) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid, "/", "rev_id", mpi.rev_id) ) < 0) HERR(routineName); /* Create arrays for multiple-atom/molecule output */ io.aux_atom_ncid = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_mol_ncid = (hid_t *) malloc(atmos.Nactivemol * sizeof(hid_t)); if (input.p15d_wpop) { io.aux_atom_pop = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_atom_poplte = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_mol_pop = (hid_t *) malloc(atmos.Nactivemol * sizeof(hid_t)); io.aux_mol_poplte = (hid_t *) malloc(atmos.Nactivemol * sizeof(hid_t)); } if (input.p15d_wrates) { io.aux_atom_RijL = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_atom_RjiL = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_atom_RijC = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); io.aux_atom_RjiC = (hid_t *) malloc(atmos.Nactiveatom * sizeof(hid_t)); } /* Fill value */ if (( plist = H5Pcreate(H5P_DATASET_CREATE) ) < 0) HERR(routineName); if (( H5Pset_fill_value(plist, H5T_NATIVE_FLOAT, &FILLVALUE) ) < 0) HERR(routineName); if (( H5Pset_alloc_time(plist, H5D_ALLOC_TIME_EARLY) ) < 0) HERR(routineName); if (( H5Pset_fill_time(plist, H5D_FILL_TIME_ALLOC) ) < 0) HERR(routineName); /* --- Group loop over active ATOMS --- */ for (i=0; i < atmos.Nactiveatom; i++) { atom = atmos.activeatoms[i]; /* Get group name */ sprintf(group_name, (atom->ID[1] == ' ') ? "atom_%.1s" : "atom_%.2s", atom->ID); if (( ncid_atom = H5Gcreate(ncid, group_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) ) < 0) HERR(routineName); io.aux_atom_ncid[i] = ncid_atom; /* --- dimensions as attributes --- */ if (( H5LTset_attribute_int(ncid_atom, ".", "nlevel", &atom->Nlevel, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_atom, ".", "nline", &atom->Nline, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_atom, ".", "ncontinuum", &atom->Ncont, 1)) < 0) HERR(routineName); /* --- dimension datasets --- */ dims[0] = mpi.nx; if (( H5LTmake_dataset(ncid_atom, X_NAME, 1, dims, H5T_NATIVE_DOUBLE, geometry.xscale) ) < 0) HERR(routineName); if (( id_x = H5Dopen2(ncid_atom, X_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = mpi.ny; if (( H5LTmake_dataset(ncid_atom, Y_NAME, 1, dims, H5T_NATIVE_DOUBLE, geometry.yscale) ) < 0) HERR(routineName); if (( id_y = H5Dopen2(ncid_atom, Y_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = infile.nz; tmp_double = (double *) calloc(infile.nz , sizeof(double)); if (( H5LTmake_dataset(ncid_atom, ZOUT_NAME, 1, dims, H5T_NATIVE_DOUBLE, tmp_double) ) < 0) HERR(routineName); free(tmp_double); if (( id_z = H5Dopen2(ncid_atom, ZOUT_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = atom->Nlevel; tmp = (unsigned int *) calloc(atom->Nlevel , sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_atom, LEVEL_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); dims[0] = atom->Nline; tmp = (unsigned int *) calloc(atom->Nline , sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_atom, LINE_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); if (atom->Ncont > 0) { dims[0] = atom->Ncont; tmp = (unsigned int *) calloc(atom->Ncont , sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_atom, CONT_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); } /* For compatibility with netCDF readers, only use dataset as dimension */ if (( H5LTset_attribute_string(ncid_atom, ZOUT_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atom, LEVEL_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_atom, LINE_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (atom->Ncont > 0) { if (( H5LTset_attribute_string(ncid_atom, CONT_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); } /* --- variables --- */ dims[0] = atom->Nlevel; dims[1] = mpi.nx; dims[2] = mpi.ny; dims[3] = infile.nz; /* Populations */ if (input.p15d_wpop) { if (( file_dspace = H5Screate_simple(4, dims, NULL) ) < 0) HERR(routineName); if (( id_n = H5Dopen2(ncid_atom, LEVEL_NAME, H5P_DEFAULT)) < 0) HERR(routineName); if (atom->n != NULL) { if (( id_tmp = H5Dcreate(ncid_atom, POP_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, POP_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_pop[i] = id_tmp; } if (atom->nstar != NULL) { if (( id_tmp = H5Dcreate(ncid_atom, POPLTE_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, POPLTE_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_poplte[i] = id_tmp; } if (( H5Dclose(id_n) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); } if (input.p15d_wrates) { /* Radiative rates */ dims[0] = atom->Nline; dims[1] = mpi.nx; dims[2] = mpi.ny; dims[3] = infile.nz; if (( file_dspace = H5Screate_simple(4, dims, NULL) ) < 0) HERR(routineName); if (( id_n = H5Dopen2(ncid_atom, LINE_NAME, H5P_DEFAULT)) < 0) HERR(routineName); if (( id_tmp = H5Dcreate(ncid_atom, RIJ_L_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, RIJ_L_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_RijL[i] = id_tmp; if (( id_tmp = H5Dcreate(ncid_atom, RJI_L_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, RJI_L_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_RjiL[i] = id_tmp; if (( H5Dclose(id_n) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); if (atom->Ncont > 0) { dims[0] = atom->Ncont; if (( file_dspace = H5Screate_simple(4, dims, NULL) ) < 0) HERR(routineName); if (( id_n = H5Dopen2(ncid_atom, CONT_NAME, H5P_DEFAULT)) < 0) HERR(routineName); if (( id_tmp = H5Dcreate(ncid_atom, RIJ_C_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, RIJ_C_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_RijC[i] = id_tmp; if (( id_tmp = H5Dcreate(ncid_atom, RJI_C_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); if (( H5LTset_attribute_float(ncid_atom, RJI_C_NAME, "_FillValue", &FILLVALUE, 1) ) < 0) HERR(routineName); io.aux_atom_RjiC[i] = id_tmp; if (( H5Dclose(id_n) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); } } if (( H5Dclose(id_x) ) < 0) HERR(routineName); if (( H5Dclose(id_y) ) < 0) HERR(routineName); if (( H5Dclose(id_z) ) < 0) HERR(routineName); } /* end active ATOMS loop */ /* --- Group loop over active MOLECULES --- */ for (i=0; i < atmos.Nactivemol; i++) { molecule = atmos.activemols[i]; /* Get group name */ sprintf( group_name, "molecule_%s", molecule->ID); if (( ncid_mol = H5Gcreate(ncid, group_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) ) < 0) HERR(routineName); io.aux_mol_ncid[i] = ncid_mol; /* --- dimensions as attributes --- */ if (( H5LTset_attribute_int(ncid_mol, ".", "nlevel_vibr", &molecule->Nv, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mol, ".", "nline_molecule", &molecule->Nrt, 1)) < 0) HERR(routineName); if (( H5LTset_attribute_int(ncid_mol, ".", "nJ", &molecule->NJ, 1)) < 0) HERR(routineName); /* --- dimension datasets --- */ dims[0] = mpi.nx; if (( H5LTmake_dataset(ncid_mol, X_NAME, 1, dims, H5T_NATIVE_DOUBLE, geometry.xscale) ) < 0) HERR(routineName); if (( id_x = H5Dopen2(ncid_mol, X_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = mpi.ny; if (( H5LTmake_dataset(ncid_mol, Y_NAME, 1, dims, H5T_NATIVE_DOUBLE, geometry.yscale) ) < 0) HERR(routineName); if (( id_y = H5Dopen2(ncid_mol, Y_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = infile.nz; tmp_double = (double *) calloc(infile.nz , sizeof(double)); if (( H5LTmake_dataset(ncid_mol, ZOUT_NAME, 1, dims, H5T_NATIVE_DOUBLE, tmp_double) ) < 0) HERR(routineName); free(tmp_double); if (( id_z = H5Dopen2(ncid_mol, ZOUT_NAME, H5P_DEFAULT)) < 0) HERR(routineName); dims[0] = molecule->Nv; tmp = (unsigned int *) calloc(molecule->Nv, sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_mol, VLEVEL_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); dims[0] = molecule->Nrt; tmp = (unsigned int *) calloc(molecule->Nrt, sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_mol, VLINE_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); dims[0] = molecule->NJ; tmp = (unsigned int *) calloc(molecule->NJ, sizeof(unsigned int)); if (( H5LTmake_dataset(ncid_mol, NJ_NAME, 1, dims, H5T_NATIVE_UINT, tmp) ) < 0) HERR(routineName); free(tmp); /* For compatibility with netCDF readers, only use dataset as dimension */ if (( H5LTset_attribute_string(ncid_mol, ZOUT_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_mol, VLEVEL_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_mol, VLINE_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); if (( H5LTset_attribute_string(ncid_mol, NJ_NAME, "NAME", NETCDF_COMPAT) ) < 0) HERR(routineName); /* --- variables --- */ dims[0] = molecule->Nv; dims[1] = mpi.nx; dims[2] = mpi.ny; dims[3] = infile.nz; /* Populations */ if (input.p15d_wpop) { if (( file_dspace = H5Screate_simple(4, dims, NULL) ) < 0) HERR(routineName); if (( id_n = H5Dopen2(ncid_mol, VLEVEL_NAME, H5P_DEFAULT)) < 0) HERR(routineName); if (molecule->nv != NULL) { if (( id_tmp = H5Dcreate(ncid_mol, POP_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); io.aux_mol_pop[i] = id_tmp; } if (molecule->nvstar != NULL) { if (( id_tmp = H5Dcreate(ncid_mol, POPLTE_NAME, H5T_NATIVE_FLOAT, file_dspace, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_n, 0)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_x, 1)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_y, 2)) < 0) HERR(routineName); if (( H5DSattach_scale(id_tmp, id_z, 3)) < 0) HERR(routineName); io.aux_mol_poplte[i] = id_tmp; } if (( H5Dclose(id_n) ) < 0) HERR(routineName); if (( H5Sclose(file_dspace) ) < 0) HERR(routineName); // TODO: molecule->Ediss, molecule->Tmin, molecule->Tmax } if (( H5Dclose(id_x) ) < 0) HERR(routineName); if (( H5Dclose(id_y) ) < 0) HERR(routineName); if (( H5Dclose(id_z) ) < 0) HERR(routineName); } /* end active MOLECULES loop */ io.aux_ncid = ncid; /* Copy stuff to the IO data struct */ if (( H5Pclose(plist) ) < 0) HERR(routineName); /* Free hdf5 resources */ /* Flush ensures file is created in case of crash */ if (( H5Fflush(ncid, H5F_SCOPE_LOCAL) ) < 0) HERR(routineName); return; }
int_f nh5ltset_attribute_string_c(hid_t_f *loc_id, int_f *namelen, _fcd dsetname, int_f *attrnamelen, _fcd attrname, int_f *buflen, void *buf) { int ret_value = -1; herr_t ret; hid_t c_loc_id; char *c_name = NULL; char *c_attrname = NULL; int c_namelen; int c_attrnamelen; char *c_buf = NULL; int c_buflen; /* * convert FORTRAN name to C name */ c_namelen = *namelen; c_name = (char *)HD5f2cstring(dsetname, c_namelen); if (c_name == NULL) goto done; c_attrnamelen = *attrnamelen; c_attrname = (char *)HD5f2cstring(attrname, c_attrnamelen); if (c_attrname == NULL) goto done; c_buflen = *buflen; c_buf = (char *)HD5f2cstring(buf, c_buflen); if (c_buf == NULL) goto done; /* * call H5LTset_attribute_string function. */ c_loc_id = (hid_t)*loc_id; ret = H5LTset_attribute_string(c_loc_id,c_name,c_attrname,c_buf); if (ret < 0) goto done; ret_value = 0; done: if(c_name!=NULL) free(c_name); if(c_attrname!=NULL) free(c_attrname); if(c_buf!=NULL) free(c_buf); return ret_value; }
static herr_t make_attributes( hid_t loc_id, const char* obj_name ) { int rank_out; hsize_t *dims_out = 0; H5T_class_t type_class; size_t type_size; int i; char attr_str_in[] = {"My attribute"}; char attr_str_out[20]; char attr_char_in[5] = {1,2,3,4,5}; char attr_char_out[5]; short attr_short_in[5] = {1,2,3,4,5}; short attr_short_out[5]; int attr_int_in[5] = {1,2,3,4,5}; int attr_int_out[5]; long attr_long_in[5] = {1,2,3,4,5}; long attr_long_out[5]; float attr_float_in[5] = {1,2,3,4,5}; float attr_float_out[5]; double attr_double_in[5] = {1,2,3,4,5}; double attr_double_out[5]; unsigned char attr_uchar_in[5] = {1,2,3,4,5}; unsigned char attr_uchar_out[5]; unsigned short attr_ushort_in[5] = {1,2,3,4,5}; unsigned short attr_ushort_out[5]; unsigned int attr_uint_in[5] = {1,2,3,4,5}; unsigned int attr_uint_out[5]; unsigned long attr_ulong_in[5] = {1,2,3,4,5}; unsigned long attr_ulong_out[5]; /*------------------------------------------------------------------------- * H5LTset_attribute_string test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_string"); /* Set the attribute */ if ( H5LTset_attribute_string( loc_id, obj_name, ATTR1_NAME, attr_str_in ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_string test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_string"); /* Get the attribute */ if ( H5LTget_attribute_string( loc_id, obj_name, ATTR1_NAME, attr_str_out ) < 0 ) return -1; if ( strcmp( attr_str_in, attr_str_out ) != 0 ) { return -1; } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_char test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_char"); /* Set the attribute */ if ( H5LTset_attribute_char( loc_id, obj_name, ATTR2_NAME, attr_char_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_char test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_char"); /* Get the attribute */ if ( H5LTget_attribute_char( loc_id, obj_name, ATTR2_NAME, attr_char_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_char_in[i] != attr_char_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR2_NAME, H5T_NATIVE_CHAR, attr_char_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_char_in[i] != attr_char_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_short test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_short"); /* Set the attribute */ if ( H5LTset_attribute_short( loc_id, obj_name, ATTR3_NAME, attr_short_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_short test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_short"); /* Get the attribute */ if ( H5LTget_attribute_short( loc_id, obj_name, ATTR3_NAME, attr_short_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_short_in[i] != attr_short_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR3_NAME, H5T_NATIVE_SHORT, attr_short_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_short_in[i] != attr_short_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_int test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_int"); /* Set the attribute */ if ( H5LTset_attribute_int( loc_id, obj_name, ATTR4_NAME, attr_int_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_int test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_int"); /* Get the attribute */ if ( H5LTget_attribute_int( loc_id, obj_name, ATTR4_NAME, attr_int_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_int_in[i] != attr_int_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR4_NAME, H5T_NATIVE_INT, attr_int_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_int_in[i] != attr_int_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_long test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_long"); /* Set the attribute */ if ( H5LTset_attribute_long( loc_id, obj_name, ATTR5_NAME, attr_long_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_long test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_long"); /* Get the attribute */ if ( H5LTget_attribute_long( loc_id, obj_name, ATTR5_NAME, attr_long_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_long_in[i] != attr_long_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR5_NAME, H5T_NATIVE_LONG, attr_long_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_long_in[i] != attr_long_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_uchar test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_uchar"); /* Set the attribute */ if ( H5LTset_attribute_uchar( loc_id, obj_name, ATTR6_NAME, attr_uchar_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_uchar test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_uchar"); /* Get the attribute */ if ( H5LTget_attribute_uchar( loc_id, obj_name, ATTR6_NAME, attr_uchar_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_uchar_in[i] != attr_uchar_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR6_NAME, H5T_NATIVE_UCHAR, attr_uchar_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_uchar_in[i] != attr_uchar_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_ushort test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_ushort"); /* Set the attribute */ if ( H5LTset_attribute_ushort( loc_id, obj_name, ATTR7_NAME, attr_ushort_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_ushort test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_ushort"); /* Get the attribute */ if ( H5LTget_attribute_ushort( loc_id, obj_name, ATTR7_NAME, attr_ushort_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_ushort_in[i] != attr_ushort_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR7_NAME, H5T_NATIVE_USHORT, attr_ushort_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_ushort_in[i] != attr_ushort_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_int test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_uint"); /* Set the attribute */ if ( H5LTset_attribute_uint( loc_id, obj_name, ATTR8_NAME, attr_uint_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_int test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_uint"); /* Get the attribute */ if ( H5LTget_attribute_uint( loc_id, obj_name, ATTR8_NAME, attr_uint_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_uint_in[i] != attr_uint_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR8_NAME, H5T_NATIVE_UINT, attr_uint_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_uint_in[i] != attr_uint_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_ulong test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_ulong"); /* Set the attribute */ if ( H5LTset_attribute_ulong( loc_id, obj_name, ATTR9_NAME, attr_ulong_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_long test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_ulong"); /* Get the attribute */ if ( H5LTget_attribute_ulong( loc_id, obj_name, ATTR9_NAME, attr_ulong_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_ulong_in[i] != attr_ulong_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR9_NAME, H5T_NATIVE_ULONG, attr_ulong_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_ulong_in[i] != attr_ulong_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_float test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_float"); /* Set the attribute */ if ( H5LTset_attribute_float( loc_id, obj_name, ATTR10_NAME, attr_float_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_float test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_float"); /* Get the attribute */ if ( H5LTget_attribute_float( loc_id, obj_name, ATTR10_NAME, attr_float_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_float_in[i] != attr_float_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR10_NAME, H5T_NATIVE_FLOAT, attr_float_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_float_in[i] != attr_float_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTset_attribute_double test *------------------------------------------------------------------------- */ TESTING("H5LTset_attribute_double"); /* Set the attribute */ if ( H5LTset_attribute_double( loc_id, obj_name, ATTR11_NAME, attr_double_in, (size_t)5 ) < 0 ) return -1; PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_double test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_double"); /* Get the attribute */ if ( H5LTget_attribute_double( loc_id, obj_name, ATTR11_NAME, attr_double_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_double_in[i] != attr_double_out[i] ) { return -1; } } /* Get the attribute */ if ( H5LTget_attribute( loc_id, obj_name, ATTR11_NAME, H5T_NATIVE_DOUBLE, attr_double_out ) < 0 ) return -1; for (i = 0; i < 5; i++) { if ( attr_double_in[i] != attr_double_out[i] ) { return -1; } } PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_ndims test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_ndims"); if ( H5LTget_attribute_ndims( loc_id, obj_name, ATTR2_NAME, &rank_out ) < 0 ) return -1; if ( rank_out != 1 ) { return -1; } PASSED(); /*------------------------------------------------------------------------- * H5LTget_attribute_info test *------------------------------------------------------------------------- */ TESTING("H5LTget_attribute_info"); dims_out = (hsize_t*) malloc( sizeof(hsize_t) * rank_out ); if ( H5LTget_attribute_info( loc_id, obj_name, ATTR2_NAME, dims_out, &type_class, &type_size) < 0 ) return -1; for (i = 0; i < rank_out; i++) { if ( dims_out[i] != 5 ) { return -1; } } if ( type_class != H5T_INTEGER ) { return -1; } if ( dims_out ) free( dims_out ); PASSED(); return 0; }