19 for(
int i = 0; i < HIST_ALLDIM; i++) {
20 abscissa_dim += hist->
axes[i].
n ? 1 : 0;
23 int* abscissa_n_slots = (
int*) malloc(abscissa_dim *
sizeof(
int));
24 double* abscissa_min = (
double*) malloc(abscissa_dim *
sizeof(
double));
25 double* abscissa_max = (
double*) malloc(abscissa_dim *
sizeof(
double));
26 char** abscissa_names = (
char**) malloc(abscissa_dim *
sizeof(
char*));
27 char** abscissa_units = (
char**) malloc(abscissa_dim *
sizeof(
char*));
30 for(
int i = 0; i < HIST_ALLDIM; i++) {
31 if(!hist->
axes[i].
n) {
34 abscissa_min[k] = hist->
axes[i].
min;
35 abscissa_max[k] = hist->
axes[i].
max;
36 abscissa_n_slots[k] = hist->
axes[i].
n;
41 abscissa_names[k] =
"r";
42 abscissa_units[k] =
"m";
45 abscissa_names[k] =
"phi";
46 abscissa_units[k] =
"deg";
51 abscissa_names[k] =
"z";
52 abscissa_units[k] =
"m";
55 abscissa_names[k] =
"rho";
56 abscissa_units[k] =
"1";
59 abscissa_names[k] =
"theta";
60 abscissa_units[k] =
"deg";
63 abscissa_names[k] =
"ppar";
64 abscissa_units[k] =
"kg*m/s";
67 abscissa_names[k] =
"pperp";
68 abscissa_units[k] =
"kg*m/s";
71 abscissa_names[k] =
"pr";
72 abscissa_units[k] =
"kg*m/s";
75 abscissa_names[k] =
"pphi";
76 abscissa_units[k] =
"kg*m/s";
79 abscissa_names[k] =
"pz";
80 abscissa_units[k] =
"kg*m/s";
83 abscissa_names[k] =
"ekin";
84 abscissa_units[k] =
"eV";
89 abscissa_names[k] =
"pitch";
90 abscissa_units[k] =
"1";
93 abscissa_names[k] =
"mu";
94 abscissa_units[k] =
"T/eV";
97 abscissa_names[k] =
"ptor";
98 abscissa_units[k] =
"kg*m/s";
101 abscissa_names[k] =
"time";
102 abscissa_units[k] =
"s";
105 abscissa_names[k] =
"charge";
106 abscissa_units[k] =
"e";
111 char* ordinate_names[] = {
"distribution" };
112 char* ordinate_units[] = {
"s/(m^5*kg^2*deg*e)" };
116 f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
117 abscissa_max, abscissa_units, abscissa_names, ordinate_units,
118 ordinate_names, hist->
bins);
119 free(abscissa_n_slots);
122 free(abscissa_names);
123 free(abscissa_units);
160 hid_t f,
const char *path,
int abscissaDim,
int ordinateDim,
161 int *abscissaNslots,
double *abscissaMin,
double *abscissaMax,
162 char **abscissaUnits,
char **abscissaNames,
163 char **ordinateUnits,
char **ordinateNames,
double *ordinate) {
168 hid_t
histogram = H5Gcreate2(f, path, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
175 dims[0] = ordinateDim;
176 for (
int i=0; i<abscissaDim; i++) {
177 dims[i+1] = abscissaNslots[i];
182 err = H5LTmake_dataset_double(
histogram ,
"ordinate", abscissaDim+1,
188 for(
int i=0; i<ordinateDim; i++) {
189 sprintf(temppath,
"name_%02d", i);
190 H5LTset_attribute_string(
histogram,
"ordinate", temppath,
192 sprintf(temppath,
"unit_%02d", i);
193 H5LTset_attribute_string(
histogram,
"ordinate", temppath,
200 err = H5LTmake_dataset_int(
histogram ,
"ordinate_ndim", 1, &dimsize,
206 err = H5LTmake_dataset_int(
histogram ,
"abscissa_ndim", 1, &dimsize,
214 for (
int i=0; i<abscissaDim; i++) {
216 double* abscissavec = (
double *) malloc( (dims[i+1]+1)*
sizeof(
double) );
217 for(
int j=0; j<dims[i+1]+1; j++) {
219 abscissaMin[i] + j * ( (abscissaMax[i] - abscissaMin[i])
220 / abscissaNslots[i] );
224 char abscissapath[256];
225 sprintf(abscissapath,
"abscissa_vec_%02d",i+1);
226 hsize_t abscissasize[1] = {abscissaNslots[i]+1};
227 err = H5LTmake_dataset_double(
histogram , abscissapath, 1, abscissasize,
236 sprintf(temppath,
"abscissa_nbin_%02d", i+1);
237 err = H5LTmake_dataset_int(
histogram, temppath, 1, &dimsize,
238 &(abscissaNslots[i]));
245 sprintf(temppath,
"name_%02d", i);
246 H5LTset_attribute_string(
histogram, abscissapath, temppath,
248 sprintf(temppath,
"unit_%02d", i);
249 H5LTset_attribute_string(
histogram, abscissapath, temppath,
int hdf5_histogram_write_uniform_double(hid_t f, const char *path, int abscissaDim, int ordinateDim, int *abscissaNslots, double *abscissaMin, double *abscissaMax, char **abscissaUnits, char **abscissaNames, char **ordinateUnits, char **ordinateNames, double *ordinate)
Write a histogram with uniform grid to HDF5 file.