ASCOT5
Toggle main menu visibility
Loading...
Searching...
No Matches
hdf5io
hdf5_dist.c
Go to the documentation of this file.
1
5
#include <stdlib.h>
6
#include <hdf5.h>
7
#include "
../ascot5.h
"
8
#include "
../diag/dist_5D.h
"
9
#include "
../diag/dist_6D.h
"
10
#include "
../diag/dist_rho5D.h
"
11
#include "
../diag/dist_rho6D.h
"
12
#include "
../diag/dist_com.h
"
13
#include "
../math.h
"
14
#include "
../consts.h
"
15
#include "
hdf5_histogram.h
"
16
#include "
hdf5_helpers.h
"
17
#include "hdf5_dist.h"
18
26
int
hdf5_dist_write_5D
(hid_t f,
char
* path,
dist_5D_data
* dist) {
27
int
abscissa_dim = 7;
28
int
ordinate_dim = 1;
29
30
int
abscissa_n_slots[7];
31
abscissa_n_slots[0] = dist->
n_r
;
32
abscissa_n_slots[1] = dist->
n_phi
;
33
abscissa_n_slots[2] = dist->
n_z
;
34
abscissa_n_slots[3] = dist->
n_ppara
;
35
abscissa_n_slots[4] = dist->
n_pperp
;
36
abscissa_n_slots[5] = dist->
n_time
;
37
abscissa_n_slots[6] = dist->
n_q
;
38
39
double
abscissa_min[7];
40
abscissa_min[0] = dist->
min_r
;
41
abscissa_min[1] =
math_rad2deg
(dist->
min_phi
);
42
abscissa_min[2] = dist->
min_z
;
43
abscissa_min[3] = dist->
min_ppara
;
44
abscissa_min[4] = dist->
min_pperp
;
45
abscissa_min[5] = dist->
min_time
;
46
abscissa_min[6] = dist->
min_q
;
47
48
double
abscissa_max[7];
49
abscissa_max[0] = dist->
max_r
;
50
abscissa_max[1] =
math_rad2deg
(dist->
max_phi
);
51
abscissa_max[2] = dist->
max_z
;
52
abscissa_max[3] = dist->
max_ppara
;
53
abscissa_max[4] = dist->
max_pperp
;
54
abscissa_max[5] = dist->
max_time
;
55
abscissa_max[6] = dist->
max_q
;
56
57
char
* abscissa_names[] = {
"r"
,
"phi"
,
"z"
,
"ppar"
,
"pperp"
,
"time"
,
58
"charge"
};
59
char
* abscissa_units[] = {
"m"
,
"deg"
,
"m"
,
"kg*m/s"
,
"kg*m/s"
,
"s"
,
"e"
};
60
char
* ordinate_names[] = {
"distribution"
};
61
char
* ordinate_units[] = {
"s/(m^5*kg^2*deg*e)"
};
62
63
/* Create a group for this distribution and write the data in it */
64
int
retval =
hdf5_histogram_write_uniform_double
(
65
f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
66
abscissa_max, abscissa_units, abscissa_names, ordinate_units,
67
ordinate_names, dist->
histogram
);
68
69
return
retval;
70
}
71
80
int
hdf5_dist_write_6D
(hid_t f,
char
* path,
dist_6D_data
* dist) {
81
int
abscissa_dim = 8;
82
int
ordinate_dim = 1;
83
84
int
abscissa_n_slots[8];
85
abscissa_n_slots[0] = dist->
n_r
;
86
abscissa_n_slots[1] = dist->
n_phi
;
87
abscissa_n_slots[2] = dist->
n_z
;
88
abscissa_n_slots[3] = dist->
n_pr
;
89
abscissa_n_slots[4] = dist->
n_pphi
;
90
abscissa_n_slots[5] = dist->
n_pz
;
91
abscissa_n_slots[6] = dist->
n_time
;
92
abscissa_n_slots[7] = dist->
n_q
;
93
94
double
abscissa_min[8];
95
abscissa_min[0] = dist->
min_r
;
96
abscissa_min[1] =
math_rad2deg
(dist->
min_phi
);
97
abscissa_min[2] = dist->
min_z
;
98
abscissa_min[3] = dist->
min_pr
;
99
abscissa_min[4] = dist->
min_pphi
;
100
abscissa_min[5] = dist->
min_pz
;
101
abscissa_min[6] = dist->
min_time
;
102
abscissa_min[7] = dist->
min_q
;
103
104
double
abscissa_max[8];
105
abscissa_max[0] = dist->
max_r
;
106
abscissa_max[1] =
math_rad2deg
(dist->
max_phi
);
107
abscissa_max[2] = dist->
max_z
;
108
abscissa_max[3] = dist->
max_pr
;
109
abscissa_max[4] = dist->
max_pphi
;
110
abscissa_max[5] = dist->
max_pz
;
111
abscissa_max[6] = dist->
max_time
;
112
abscissa_max[7] = dist->
max_q
;
113
114
char
* abscissa_names[] = {
"r"
,
"phi"
,
"z"
,
"pr"
,
"pphi"
,
"pz"
,
"time"
,
115
"charge"
};
116
char
* abscissa_units[] = {
"m"
,
"deg"
,
"m"
,
"kg*m/s"
,
"kg*m/s"
,
"kg*m/s"
,
117
"s"
,
"e"
};
118
char
* ordinate_names[] = {
"distribution"
};
119
char
* ordinate_units[] = {
"s/(m^6*kg^3*deg*e)"
};
120
121
/* Create a group for this distribution and write the data in it */
122
int
retval =
hdf5_histogram_write_uniform_double
(
123
f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
124
abscissa_max, abscissa_units, abscissa_names, ordinate_units,
125
ordinate_names, dist->
histogram
);
126
127
return
retval;
128
}
129
137
int
hdf5_dist_write_rho5D
(hid_t f,
char
* path,
dist_rho5D_data
* dist) {
138
int
abscissa_dim = 7;
139
int
ordinate_dim = 1;
140
141
int
abscissa_n_slots[7];
142
abscissa_n_slots[0] = dist->
n_rho
;
143
abscissa_n_slots[1] = dist->
n_theta
;
144
abscissa_n_slots[2] = dist->
n_phi
;
145
abscissa_n_slots[3] = dist->
n_ppara
;
146
abscissa_n_slots[4] = dist->
n_pperp
;
147
abscissa_n_slots[5] = dist->
n_time
;
148
abscissa_n_slots[6] = dist->
n_q
;
149
150
double
abscissa_min[7];
151
abscissa_min[0] = dist->
min_rho
;
152
abscissa_min[1] =
math_rad2deg
(dist->
min_theta
);
153
abscissa_min[2] =
math_rad2deg
(dist->
min_phi
);
154
abscissa_min[3] = dist->
min_ppara
;
155
abscissa_min[4] = dist->
min_pperp
;
156
abscissa_min[5] = dist->
min_time
;
157
abscissa_min[6] = dist->
min_q
;
158
159
double
abscissa_max[7];
160
abscissa_max[0] = dist->
max_rho
;
161
abscissa_max[1] =
math_rad2deg
(dist->
max_theta
);
162
abscissa_max[2] =
math_rad2deg
(dist->
max_phi
);
163
abscissa_max[3] = dist->
max_ppara
;
164
abscissa_max[4] = dist->
max_pperp
;
165
abscissa_max[5] = dist->
max_time
;
166
abscissa_max[6] = dist->
max_q
;
167
168
char
* abscissa_names[] = {
"rho"
,
"theta"
,
"phi"
,
"ppar"
,
"pperp"
,
"time"
,
169
"charge"
};
170
char
* abscissa_units[] = {
"1"
,
"deg"
,
"deg"
,
"kg*m/s"
,
"kg*m/s"
,
171
"s"
,
"e"
};
172
char
* ordinate_names[] = {
"distribution"
};
173
char
* ordinate_units[] = {
"s/(m^2*kg^2*deg^2*e)"
};
174
175
/* Create a group for this distribution and write the data in it */
176
int
retval =
hdf5_histogram_write_uniform_double
(
177
f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
178
abscissa_max, abscissa_units, abscissa_names, ordinate_units,
179
ordinate_names, dist->
histogram
);
180
181
return
retval;
182
}
183
191
int
hdf5_dist_write_rho6D
(hid_t f,
char
* path,
dist_rho6D_data
* dist) {
192
int
abscissa_dim = 8;
193
int
ordinate_dim = 1;
194
195
int
abscissa_n_slots[8];
196
abscissa_n_slots[0] = dist->
n_rho
;
197
abscissa_n_slots[1] = dist->
n_theta
;
198
abscissa_n_slots[2] = dist->
n_phi
;
199
abscissa_n_slots[3] = dist->
n_pr
;
200
abscissa_n_slots[4] = dist->
n_pphi
;
201
abscissa_n_slots[5] = dist->
n_pz
;
202
abscissa_n_slots[6] = dist->
n_time
;
203
abscissa_n_slots[7] = dist->
n_q
;
204
205
double
abscissa_min[8];
206
abscissa_min[0] = dist->
min_rho
;
207
abscissa_min[1] =
math_rad2deg
(dist->
min_theta
);
208
abscissa_min[2] =
math_rad2deg
(dist->
min_phi
);
209
abscissa_min[3] = dist->
min_pr
;
210
abscissa_min[4] = dist->
min_pphi
;
211
abscissa_min[5] = dist->
min_pz
;
212
abscissa_min[6] = dist->
min_time
;
213
abscissa_min[7] = dist->
min_q
;
214
215
double
abscissa_max[8];
216
abscissa_max[0] = dist->
max_rho
;
217
abscissa_max[1] =
math_rad2deg
(dist->
max_theta
);
218
abscissa_max[2] =
math_rad2deg
(dist->
max_phi
);
219
abscissa_max[3] = dist->
max_pr
;
220
abscissa_max[4] = dist->
max_pphi
;
221
abscissa_max[5] = dist->
max_pz
;
222
abscissa_max[6] = dist->
max_time
;
223
abscissa_max[7] = dist->
max_q
;
224
225
char
* abscissa_names[] = {
"rho"
,
"theta"
,
"phi"
,
"pr"
,
"pphi"
,
"pz"
,
226
"time"
,
"charge"
};
227
char
* abscissa_units[] = {
"1"
,
"deg"
,
"deg"
,
"kg*m/s"
,
"kg*m/s"
,
"kg*m/s"
,
228
"s"
,
"e"
};
229
char
* ordinate_names[] = {
"distribution"
};
230
char
* ordinate_units[] = {
"s^2/(m^3*kg^3*deg^2*e)"
};
231
232
/* Create a group for this distribution and write the data in it */
233
int
retval =
hdf5_histogram_write_uniform_double
(
234
f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
235
abscissa_max, abscissa_units, abscissa_names, ordinate_units,
236
ordinate_names, dist->
histogram
);
237
238
return
retval;
239
}
240
248
int
hdf5_dist_write_COM
(hid_t f,
char
* path,
dist_COM_data
* dist) {
249
250
int
abscissa_dim = 3;
251
int
ordinate_dim = 1;
252
253
int
abscissa_n_slots[3];
254
abscissa_n_slots[0] = dist->
n_mu
;
255
abscissa_n_slots[1] = dist->
n_Ekin
;
256
abscissa_n_slots[2] = dist->
n_Ptor
;
257
258
double
abscissa_min[3];
259
abscissa_min[0] = dist->
min_mu
/
CONST_E
;
260
abscissa_min[1] = dist->
min_Ekin
/
CONST_E
;
261
abscissa_min[2] = dist->
min_Ptor
/
CONST_E
;
262
263
double
abscissa_max[3];
264
abscissa_max[0] = dist->
max_mu
/
CONST_E
;
265
abscissa_max[1] = dist->
max_Ekin
/
CONST_E
;
266
abscissa_max[2] = dist->
max_Ptor
/
CONST_E
;
267
268
char
* abscissa_names[] = {
"mu"
,
"ekin"
,
"ptor"
};
269
char
* abscissa_units[] = {
"eV/T"
,
"eV"
,
"eV*s"
};
270
char
* ordinate_names[] = {
"distribution"
};
271
char
* ordinate_units[] = {
"T/(eV**3*s)"
};
272
273
/* Create a group for this distribution and write the data in it */
274
int
retval =
hdf5_histogram_write_uniform_double
(
275
f, path, abscissa_dim, ordinate_dim, abscissa_n_slots, abscissa_min,
276
abscissa_max, abscissa_units, abscissa_names, ordinate_units,
277
ordinate_names, dist->
histogram
);
278
279
return
retval;
280
}
ascot5.h
Main header file for ASCOT5.
consts.h
Header file containing physical and mathematical constants.
CONST_E
#define CONST_E
Elementary charge [C].
Definition
consts.h:35
dist_5D.h
Header file for dist_5D.c.
dist_6D.h
Header file for dist_6D.c.
dist_com.h
Header file for dist_com.c.
dist_rho5D.h
Header file for dist_rho5D.c.
dist_rho6D.h
Header file for dist_rho6D.c.
hdf5_dist_write_rho6D
int hdf5_dist_write_rho6D(hid_t f, char *path, dist_rho6D_data *dist)
Write rho 6D distribution to an existing result group.
Definition
hdf5_dist.c:191
hdf5_dist_write_COM
int hdf5_dist_write_COM(hid_t f, char *path, dist_COM_data *dist)
Write constants-of-motion distribution to an existing result group.
Definition
hdf5_dist.c:248
hdf5_dist_write_5D
int hdf5_dist_write_5D(hid_t f, char *path, dist_5D_data *dist)
Write 5D distribution to an existing result group.
Definition
hdf5_dist.c:26
hdf5_dist_write_rho5D
int hdf5_dist_write_rho5D(hid_t f, char *path, dist_rho5D_data *dist)
Write rho 5D distribution to an existing result group.
Definition
hdf5_dist.c:137
hdf5_dist_write_6D
int hdf5_dist_write_6D(hid_t f, char *path, dist_6D_data *dist)
Write 6D distribution to an existing result group.
Definition
hdf5_dist.c:80
hdf5_helpers.h
Header file for hdf5_helpers.h.
hdf5_histogram_write_uniform_double
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.
Definition
hdf5_histogram.c:161
hdf5_histogram.h
Header file for hdf5_histogram.c.
math.h
Header file for math.c.
math_rad2deg
#define math_rad2deg(a)
Convert radians to degrees.
Definition
math.h:114
dist_5D_data
Histogram parameters.
Definition
dist_5D.h:15
dist_5D_data::n_z
int n_z
Definition
dist_5D.h:24
dist_5D_data::min_time
real min_time
Definition
dist_5D.h:37
dist_5D_data::max_r
real max_r
Definition
dist_5D.h:18
dist_5D_data::max_pperp
real max_pperp
Definition
dist_5D.h:34
dist_5D_data::min_phi
real min_phi
Definition
dist_5D.h:21
dist_5D_data::max_phi
real max_phi
Definition
dist_5D.h:22
dist_5D_data::min_ppara
real min_ppara
Definition
dist_5D.h:29
dist_5D_data::n_q
int n_q
Definition
dist_5D.h:40
dist_5D_data::max_z
real max_z
Definition
dist_5D.h:26
dist_5D_data::n_phi
int n_phi
Definition
dist_5D.h:20
dist_5D_data::max_time
real max_time
Definition
dist_5D.h:38
dist_5D_data::n_time
int n_time
Definition
dist_5D.h:36
dist_5D_data::n_ppara
int n_ppara
Definition
dist_5D.h:28
dist_5D_data::n_pperp
int n_pperp
Definition
dist_5D.h:32
dist_5D_data::min_z
real min_z
Definition
dist_5D.h:25
dist_5D_data::n_r
int n_r
Definition
dist_5D.h:16
dist_5D_data::max_ppara
real max_ppara
Definition
dist_5D.h:30
dist_5D_data::min_r
real min_r
Definition
dist_5D.h:17
dist_5D_data::max_q
real max_q
Definition
dist_5D.h:42
dist_5D_data::histogram
real * histogram
Definition
dist_5D.h:51
dist_5D_data::min_pperp
real min_pperp
Definition
dist_5D.h:33
dist_5D_data::min_q
real min_q
Definition
dist_5D.h:41
dist_6D_data
Histogram parameters on target.
Definition
dist_6D.h:15
dist_6D_data::max_phi
real max_phi
Definition
dist_6D.h:22
dist_6D_data::n_q
int n_q
Definition
dist_6D.h:44
dist_6D_data::min_phi
real min_phi
Definition
dist_6D.h:21
dist_6D_data::n_time
int n_time
Definition
dist_6D.h:40
dist_6D_data::histogram
real * histogram
Definition
dist_6D.h:56
dist_6D_data::min_pz
real min_pz
Definition
dist_6D.h:37
dist_6D_data::max_pz
real max_pz
Definition
dist_6D.h:38
dist_6D_data::min_time
real min_time
Definition
dist_6D.h:41
dist_6D_data::n_r
int n_r
Definition
dist_6D.h:16
dist_6D_data::min_q
real min_q
Definition
dist_6D.h:45
dist_6D_data::max_pphi
real max_pphi
Definition
dist_6D.h:34
dist_6D_data::n_pz
int n_pz
Definition
dist_6D.h:36
dist_6D_data::max_time
real max_time
Definition
dist_6D.h:42
dist_6D_data::min_pphi
real min_pphi
Definition
dist_6D.h:33
dist_6D_data::min_pr
real min_pr
Definition
dist_6D.h:29
dist_6D_data::max_pr
real max_pr
Definition
dist_6D.h:30
dist_6D_data::n_pphi
int n_pphi
Definition
dist_6D.h:32
dist_6D_data::n_z
int n_z
Definition
dist_6D.h:24
dist_6D_data::n_pr
int n_pr
Definition
dist_6D.h:28
dist_6D_data::max_z
real max_z
Definition
dist_6D.h:26
dist_6D_data::min_r
real min_r
Definition
dist_6D.h:17
dist_6D_data::max_r
real max_r
Definition
dist_6D.h:18
dist_6D_data::n_phi
int n_phi
Definition
dist_6D.h:20
dist_6D_data::max_q
real max_q
Definition
dist_6D.h:46
dist_6D_data::min_z
real min_z
Definition
dist_6D.h:25
dist_COM_data
Histogram parameters on target.
Definition
dist_com.h:16
dist_COM_data::max_Ptor
real max_Ptor
Definition
dist_com.h:27
dist_COM_data::n_Ptor
int n_Ptor
Definition
dist_com.h:25
dist_COM_data::histogram
real * histogram
Definition
dist_com.h:32
dist_COM_data::n_Ekin
int n_Ekin
Definition
dist_com.h:21
dist_COM_data::min_mu
real min_mu
Definition
dist_com.h:18
dist_COM_data::max_mu
real max_mu
Definition
dist_com.h:19
dist_COM_data::min_Ptor
real min_Ptor
Definition
dist_com.h:26
dist_COM_data::min_Ekin
real min_Ekin
Definition
dist_com.h:22
dist_COM_data::n_mu
int n_mu
Definition
dist_com.h:17
dist_COM_data::max_Ekin
real max_Ekin
Definition
dist_com.h:23
dist_rho5D_data
Histogram parameters.
Definition
dist_rho5D.h:15
dist_rho5D_data::n_phi
int n_phi
Definition
dist_rho5D.h:24
dist_rho5D_data::n_ppara
int n_ppara
Definition
dist_rho5D.h:28
dist_rho5D_data::max_theta
real max_theta
Definition
dist_rho5D.h:22
dist_rho5D_data::min_time
real min_time
Definition
dist_rho5D.h:37
dist_rho5D_data::max_time
real max_time
Definition
dist_rho5D.h:38
dist_rho5D_data::max_ppara
real max_ppara
Definition
dist_rho5D.h:30
dist_rho5D_data::min_theta
real min_theta
Definition
dist_rho5D.h:21
dist_rho5D_data::min_rho
real min_rho
Definition
dist_rho5D.h:17
dist_rho5D_data::min_pperp
real min_pperp
Definition
dist_rho5D.h:33
dist_rho5D_data::n_pperp
int n_pperp
Definition
dist_rho5D.h:32
dist_rho5D_data::min_phi
real min_phi
Definition
dist_rho5D.h:25
dist_rho5D_data::max_pperp
real max_pperp
Definition
dist_rho5D.h:34
dist_rho5D_data::max_phi
real max_phi
Definition
dist_rho5D.h:26
dist_rho5D_data::max_rho
real max_rho
Definition
dist_rho5D.h:18
dist_rho5D_data::histogram
real * histogram
Definition
dist_rho5D.h:51
dist_rho5D_data::min_q
real min_q
Definition
dist_rho5D.h:41
dist_rho5D_data::n_q
int n_q
Definition
dist_rho5D.h:40
dist_rho5D_data::n_rho
int n_rho
Definition
dist_rho5D.h:16
dist_rho5D_data::n_theta
int n_theta
Definition
dist_rho5D.h:20
dist_rho5D_data::max_q
real max_q
Definition
dist_rho5D.h:42
dist_rho5D_data::min_ppara
real min_ppara
Definition
dist_rho5D.h:29
dist_rho5D_data::n_time
int n_time
Definition
dist_rho5D.h:36
dist_rho6D_data
Histogram parameters on target.
Definition
dist_rho6D.h:15
dist_rho6D_data::n_pr
int n_pr
Definition
dist_rho6D.h:28
dist_rho6D_data::min_pr
real min_pr
Definition
dist_rho6D.h:29
dist_rho6D_data::max_pr
real max_pr
Definition
dist_rho6D.h:30
dist_rho6D_data::n_pphi
int n_pphi
Definition
dist_rho6D.h:32
dist_rho6D_data::n_theta
int n_theta
Definition
dist_rho6D.h:20
dist_rho6D_data::min_theta
real min_theta
Definition
dist_rho6D.h:21
dist_rho6D_data::histogram
real * histogram
Definition
dist_rho6D.h:56
dist_rho6D_data::n_time
int n_time
Definition
dist_rho6D.h:40
dist_rho6D_data::min_pz
real min_pz
Definition
dist_rho6D.h:37
dist_rho6D_data::n_q
int n_q
Definition
dist_rho6D.h:44
dist_rho6D_data::max_q
real max_q
Definition
dist_rho6D.h:46
dist_rho6D_data::max_rho
real max_rho
Definition
dist_rho6D.h:18
dist_rho6D_data::max_time
real max_time
Definition
dist_rho6D.h:42
dist_rho6D_data::max_pz
real max_pz
Definition
dist_rho6D.h:38
dist_rho6D_data::max_theta
real max_theta
Definition
dist_rho6D.h:22
dist_rho6D_data::n_phi
int n_phi
Definition
dist_rho6D.h:24
dist_rho6D_data::max_phi
real max_phi
Definition
dist_rho6D.h:26
dist_rho6D_data::min_rho
real min_rho
Definition
dist_rho6D.h:17
dist_rho6D_data::min_time
real min_time
Definition
dist_rho6D.h:41
dist_rho6D_data::max_pphi
real max_pphi
Definition
dist_rho6D.h:34
dist_rho6D_data::min_phi
real min_phi
Definition
dist_rho6D.h:25
dist_rho6D_data::n_pz
int n_pz
Definition
dist_rho6D.h:36
dist_rho6D_data::n_rho
int n_rho
Definition
dist_rho6D.h:16
dist_rho6D_data::min_q
real min_q
Definition
dist_rho6D.h:45
dist_rho6D_data::min_pphi
real min_pphi
Definition
dist_rho6D.h:33
Generated on
for ASCOT5 by
1.18.0