ASCOT5
Loading...
Searching...
No Matches
hdf5_options.c
Go to the documentation of this file.
1
5#include <stdlib.h>
6#include <hdf5.h>
7#include <hdf5_hl.h>
8#include "../ascot5.h"
9#include "../consts.h"
10#include "../diag.h"
11#include "../diag/diag_orb.h"
12#include "../diag/dist_5D.h"
13#include "../diag/dist_6D.h"
14#include "../diag/dist_rho5D.h"
15#include "../diag/dist_rho6D.h"
16#include "../diag/dist_com.h"
17#include "../endcond.h"
18#include "../math.h"
19#include "../simulate.h"
20#include "hdf5_helpers.h"
21#include "hdf5_options.h"
22#define OPTPATH
23
24int hdf5_options_read_dist5D(hid_t file, dist_5D_data* dist, char* qid);
25int hdf5_options_read_dist6D(hid_t file, dist_6D_data* dist, char* qid);
26int hdf5_options_read_distrho5D(hid_t file, dist_rho5D_data* dist, char* qid);
27int hdf5_options_read_distrho6D(hid_t file, dist_rho6D_data* dist, char* qid);
28int hdf5_options_read_distCOM(hid_t file, dist_COM_data* dist, char* qid);
29int hdf5_options_read_diagorb(hid_t file, diag_orb_data* diagorb, char* qid);
30int hdf5_options_read_diagtrcof(hid_t file, diag_transcoef_data* diagtrcof,
31 char* qid);
32
47int hdf5_options_read(hid_t file, sim_data* sim, char* qid){
48
49 #undef OPTPATH
50 #define OPTPATH "/options/opt_XXXXXXXXXX/"
51
52 real tempfloat; // For reading float data that is converted to int.
53
54 if( hdf5_read_double(OPTPATH "SIM_MODE", &tempfloat,
55 file, qid, __FILE__, __LINE__) ) {return 1;}
56 sim->sim_mode = (int)tempfloat;
57 if( hdf5_read_double(OPTPATH "ENABLE_ADAPTIVE", &tempfloat,
58 file, qid, __FILE__, __LINE__) ) {return 1;}
59 sim->enable_ada = (int)tempfloat;
60 if( hdf5_read_double(OPTPATH "RECORD_MODE", &tempfloat,
61 file, qid, __FILE__, __LINE__) ) {return 1;}
62 sim->record_mode = (int)tempfloat;
63
64
65 if( hdf5_read_double(OPTPATH "FIXEDSTEP_USE_USERDEFINED", &tempfloat,
66 file, qid, __FILE__, __LINE__) ) {return 1;}
67 sim->fix_usrdef_use = (int)tempfloat;
68 if( hdf5_read_double(OPTPATH "FIXEDSTEP_USERDEFINED", &sim->fix_usrdef_val,
69 file, qid, __FILE__, __LINE__) ) {return 1;}
70 if( hdf5_read_double(OPTPATH "FIXEDSTEP_GYRODEFINED", &tempfloat,
71 file, qid, __FILE__, __LINE__) ) {return 1;}
72 sim->fix_gyrodef_nstep = (int)tempfloat;
73
74
75 if( hdf5_read_double(OPTPATH "ADAPTIVE_TOL_ORBIT", &sim->ada_tol_orbfol,
76 file, qid, __FILE__, __LINE__) ) {return 1;}
77 if( hdf5_read_double(OPTPATH "ADAPTIVE_TOL_CCOL", &sim->ada_tol_clmbcol,
78 file, qid, __FILE__, __LINE__) ) {return 1;}
79 if( hdf5_read_double(OPTPATH "ADAPTIVE_MAX_DRHO", &sim->ada_max_drho,
80 file, qid, __FILE__, __LINE__) ) {return 1;}
81 if( hdf5_read_double(OPTPATH "ADAPTIVE_MAX_DPHI", &sim->ada_max_dphi,
82 file, qid, __FILE__, __LINE__) ) {return 1;}
83
84
85 if( hdf5_read_double(OPTPATH "ENABLE_ORBIT_FOLLOWING", &tempfloat,
86 file, qid, __FILE__, __LINE__) ) {return 1;}
87 sim->enable_orbfol = (int)tempfloat;
88 if( hdf5_read_double(OPTPATH "ENABLE_COULOMB_COLLISIONS", &tempfloat,
89 file, qid, __FILE__, __LINE__) ) {return 1;}
90 sim->enable_clmbcol = (int)tempfloat;
91 if( hdf5_read_double(OPTPATH "ENABLE_MHD", &tempfloat,
92 file, qid, __FILE__, __LINE__) ) {return 1;}
93 sim->enable_mhd = (int)tempfloat;
94 if( hdf5_read_double(OPTPATH "ENABLE_ATOMIC", &tempfloat,
95 file, qid, __FILE__, __LINE__) ) {return 1;}
96 sim->enable_atomic = (int)tempfloat;
97 if( hdf5_read_double(OPTPATH "ENABLE_ICRH", &tempfloat,
98 file, qid, __FILE__, __LINE__) ) {return 1;}
99 sim->enable_icrh = (int)tempfloat;
100 if( hdf5_read_double(OPTPATH "ENABLE_ALDFORCE", &tempfloat,
101 file, qid, __FILE__, __LINE__) ) {return 1;}
102 sim->enable_aldforce = (int)tempfloat;
103 if( hdf5_read_double(OPTPATH "DISABLE_FIRSTORDER_GCTRANS", &tempfloat,
104 file, qid, __FILE__, __LINE__) ) {return 1;}
105 sim->disable_gctransform = (int)tempfloat;
106 if( hdf5_read_double(OPTPATH "DISABLE_ENERGY_CCOLL", &tempfloat,
107 file, qid, __FILE__, __LINE__) ) {return 1;}
108 sim->disable_energyccoll = (int)tempfloat;
109 if( hdf5_read_double(OPTPATH "DISABLE_PITCH_CCOLL", &tempfloat,
110 file, qid, __FILE__, __LINE__) ) {return 1;}
111 sim->disable_pitchccoll = (int)tempfloat;
112 if( hdf5_read_double(OPTPATH "DISABLE_GCDIFF_CCOLL", &tempfloat,
113 file, qid, __FILE__, __LINE__) ) {return 1;}
114 sim->disable_gcdiffccoll = (int)tempfloat;
115 if( hdf5_read_double(OPTPATH "REVERSE_TIME", &tempfloat,
116 file, qid, __FILE__, __LINE__) ) {return 1;}
117 sim->reverse_time = (int)tempfloat;
118
119 int ec;
120 sim->endcond_active = 0;
121
122 if( hdf5_read_double(OPTPATH "ENDCOND_SIMTIMELIM", &tempfloat,
123 file, qid, __FILE__, __LINE__) ) {return 1;}
124 ec = (int)tempfloat;
125 sim->endcond_active = sim->endcond_active | endcond_tlim * (ec > 0);
126 if( hdf5_read_double(OPTPATH "ENDCOND_CPUTIMELIM", &tempfloat,
127 file, qid, __FILE__, __LINE__) ) {return 1;}
128 ec = (int)tempfloat;
129 sim->endcond_active = sim->endcond_active | endcond_cpumax * (ec > 0);
130 if( hdf5_read_double(OPTPATH "ENDCOND_RHOLIM", &tempfloat,
131 file, qid, __FILE__, __LINE__) ) {return 1;}
132 ec = (int)tempfloat;
133 sim->endcond_active = sim->endcond_active | endcond_rhomin * (ec > 0);
134 sim->endcond_active = sim->endcond_active | endcond_rhomax * (ec > 0);
135 if( hdf5_read_double(OPTPATH "ENDCOND_ENERGYLIM", &tempfloat,
136 file, qid, __FILE__, __LINE__) ) {return 1;}
137 ec = (int)tempfloat;
138 sim->endcond_active = sim->endcond_active | endcond_emin * (ec > 0);
139 sim->endcond_active = sim->endcond_active | endcond_therm * (ec > 0);
140 if( hdf5_read_double(OPTPATH "ENDCOND_WALLHIT", &tempfloat,
141 file, qid, __FILE__, __LINE__) ) {return 1;}
142 ec = (int)tempfloat;
143 sim->endcond_active = sim->endcond_active | endcond_wall * (ec > 0);
144 if( hdf5_read_double(OPTPATH "ENDCOND_MAXORBS", &tempfloat,
145 file, qid, __FILE__, __LINE__) ) {return 1;}
146 ec = (int)tempfloat;
147 sim->endcond_active = sim->endcond_active | endcond_polmax * (ec > 0);
148 sim->endcond_active = sim->endcond_active | endcond_tormax * (ec > 0);
149 if( hdf5_read_double(OPTPATH "ENDCOND_NEUTRALIZED", &tempfloat,
150 file, qid, __FILE__, __LINE__) ) {return 1;}
151 ec = (int)tempfloat;
152 sim->endcond_active = sim->endcond_active | endcond_neutr * (ec > 0);
153 if( hdf5_read_double(OPTPATH "ENDCOND_IONIZED", &tempfloat,
154 file, qid, __FILE__, __LINE__) ) {return 1;}
155 ec = (int)tempfloat;
156 sim->endcond_active = sim->endcond_active | endcond_ioniz * (ec > 0);
157
158 sim->endcond_torandpol = 0;
159 if( ec == 2) {
160 sim->endcond_torandpol = 1;
161 }
162
163
164 if( hdf5_read_double(OPTPATH "ENDCOND_LIM_SIMTIME",
166 file, qid, __FILE__, __LINE__) ) {return 1;}
167 if( hdf5_read_double(OPTPATH "ENDCOND_MAX_MILEAGE",
169 file, qid, __FILE__, __LINE__) ) {return 1;}
170 if( hdf5_read_double(OPTPATH "ENDCOND_MAX_CPUTIME",
172 file, qid, __FILE__, __LINE__) ) {return 1;}
173 if( hdf5_read_double(OPTPATH "ENDCOND_MAX_RHO",
174 &sim->endcond_max_rho,
175 file, qid, __FILE__, __LINE__) ) {return 1;}
176 if( hdf5_read_double(OPTPATH "ENDCOND_MIN_RHO",
177 &sim->endcond_min_rho,
178 file, qid, __FILE__, __LINE__) ) {return 1;}
179 if( hdf5_read_double(OPTPATH "ENDCOND_MIN_ENERGY",
180 &sim->endcond_min_ekin,
181 file, qid, __FILE__, __LINE__) ) {return 1;}
182 if( hdf5_read_double(OPTPATH "ENDCOND_MIN_THERMAL",
184 file, qid, __FILE__, __LINE__) ) {return 1;}
185 sim->endcond_min_ekin *= CONST_E; // eV -> J
186
187 int temp;
188 if( hdf5_read_double(OPTPATH "ENDCOND_MAX_POLOIDALORBS", &tempfloat,
189 file, qid, __FILE__, __LINE__) ) {return 1;}
190 temp = (int)tempfloat;
191 sim->endcond_max_polorb = temp * 2 *CONST_PI;
192
193 if( hdf5_read_double(OPTPATH "ENDCOND_MAX_TOROIDALORBS", &tempfloat,
194 file, qid, __FILE__, __LINE__) ) {return 1;}
195 temp = (int)tempfloat;
196 sim->endcond_max_tororb = temp * 2 *CONST_PI;
197
198
199 /* See which diagnostics are active */
200 diag_data* diag = &sim->diag_data;
201
202 if( hdf5_read_double(OPTPATH "ENABLE_DIST_5D", &tempfloat,
203 file, qid, __FILE__, __LINE__) ) {return 1;}
204 diag->dist5D_collect = (int)tempfloat;
205 if( hdf5_read_double(OPTPATH "ENABLE_DIST_6D", &tempfloat,
206 file, qid, __FILE__, __LINE__) ) {return 1;}
207 diag->dist6D_collect = (int)tempfloat;
208 if( hdf5_read_double(OPTPATH "ENABLE_DIST_RHO5D", &tempfloat,
209 file, qid, __FILE__, __LINE__) ) {return 1;}
210 diag->distrho5D_collect = (int)tempfloat;
211 if( hdf5_read_double(OPTPATH "ENABLE_DIST_RHO6D", &tempfloat,
212 file, qid, __FILE__, __LINE__) ) {return 1;}
213 diag->distrho6D_collect = (int)tempfloat;
214 if( hdf5_read_double(OPTPATH "ENABLE_DIST_COM", &tempfloat,
215 file, qid, __FILE__, __LINE__) ) {return 1;}
216 diag->distCOM_collect = (int)tempfloat;
217 if( hdf5_read_double(OPTPATH "ENABLE_ORBITWRITE", &tempfloat,
218 file, qid, __FILE__, __LINE__) ) {return 1;}
219 diag->diagorb_collect = (int)tempfloat;
220 if( hdf5_read_double(OPTPATH "ENABLE_TRANSCOEF", &tempfloat,
221 file, qid, __FILE__, __LINE__) ) {return 1;}
222 diag->diagtrcof_collect = (int)tempfloat;
223
224 /* Read individual diagnostics data */
225 if(diag->dist5D_collect) {
226 if( hdf5_options_read_dist5D(file, &diag->dist5D, qid) ) {
227 return 1;
228 }
229 }
230 if(diag->dist6D_collect) {
231 if( hdf5_options_read_dist6D(file, &diag->dist6D, qid) ) {
232 return 1;
233 }
234 }
235 if(diag->distrho5D_collect) {
236 if( hdf5_options_read_distrho5D(file, &diag->distrho5D, qid) ) {
237 return 1;
238 }
239 }
240 if(diag->distrho6D_collect) {
241 if( hdf5_options_read_distrho6D(file, &diag->distrho6D, qid) ) {
242 return 1;
243 }
244 }
245 if(diag->distCOM_collect) {
246 if( hdf5_options_read_distCOM(file, &diag->distCOM, qid) ) {
247 return 1;
248 }
249 }
250 if(diag->diagorb_collect) {
251 diag->diagorb.record_mode = sim->sim_mode;
252 if(sim->record_mode && (sim->sim_mode == simulate_mode_fo ||
253 sim->sim_mode == simulate_mode_hybrid) ) {
255 }
256
257 if( hdf5_options_read_diagorb(file, &diag->diagorb, qid) ) {
258 return 1;
259 }
260 }
261
262 if(diag->diagtrcof_collect) {
263 if( hdf5_options_read_diagtrcof(file, &diag->diagtrcof, qid) ) {
264 return 1;
265 }
266 }
267
268 return 0;
269}
270
281 char* qid) {
282 #undef OPTPATH
283 #define OPTPATH "/options/opt_XXXXXXXXXX/"
284
285 real tempfloat;
286
287 if( hdf5_read_double(OPTPATH "DIST_MIN_R", &dist->min_r,
288 file, qid, __FILE__, __LINE__) ) {return 1;}
289 if( hdf5_read_double(OPTPATH "DIST_MAX_R", &dist->max_r,
290 file, qid, __FILE__, __LINE__) ) {return 1;}
291 if( hdf5_read_double(OPTPATH "DIST_NBIN_R", &tempfloat,
292 file, qid, __FILE__, __LINE__) ) {return 1;}
293 dist->n_r = (int)tempfloat;
294
295 if( hdf5_read_double(OPTPATH "DIST_MIN_PHI", &dist->min_phi,
296 file, qid, __FILE__, __LINE__) ) {return 1;}
297 if( hdf5_read_double(OPTPATH "DIST_MAX_PHI", &dist->max_phi,
298 file, qid, __FILE__, __LINE__) ) {return 1;}
299 if( hdf5_read_double(OPTPATH "DIST_NBIN_PHI", &tempfloat,
300 file, qid, __FILE__, __LINE__) ) {return 1;}
301 dist->n_phi = (int)tempfloat;
302 dist->min_phi = math_deg2rad(dist->min_phi);
303 dist->max_phi = math_deg2rad(dist->max_phi);
304
305 if( hdf5_read_double(OPTPATH "DIST_MIN_Z", &dist->min_z,
306 file, qid, __FILE__, __LINE__) ) {return 1;}
307 if( hdf5_read_double(OPTPATH "DIST_MAX_Z", &dist->max_z,
308 file, qid, __FILE__, __LINE__) ) {return 1;}
309 if( hdf5_read_double(OPTPATH "DIST_NBIN_Z", &tempfloat,
310 file, qid, __FILE__, __LINE__) ) {return 1;}
311 dist->n_z = (int)tempfloat;
312
313 if( hdf5_read_double(OPTPATH "DIST_MIN_PPA", &dist->min_ppara,
314 file, qid, __FILE__, __LINE__) ) {return 1;}
315 if( hdf5_read_double(OPTPATH "DIST_MAX_PPA", &dist->max_ppara,
316 file, qid, __FILE__, __LINE__) ) {return 1;}
317 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPA", &tempfloat,
318 file, qid, __FILE__, __LINE__) ) {return 1;}
319 dist->n_ppara = (int)tempfloat;
320
321 if( hdf5_read_double(OPTPATH "DIST_MIN_PPE", &dist->min_pperp,
322 file, qid, __FILE__, __LINE__) ) {return 1;}
323 if( hdf5_read_double(OPTPATH "DIST_MAX_PPE", &dist->max_pperp,
324 file, qid, __FILE__, __LINE__) ) {return 1;}
325 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPE", &tempfloat,
326 file, qid, __FILE__, __LINE__) ) {return 1;}
327 dist->n_pperp = (int)tempfloat;
328
329 if( hdf5_read_double(OPTPATH "DIST_MIN_TIME", &dist->min_time,
330 file, qid, __FILE__, __LINE__) ) {return 1;}
331 if( hdf5_read_double(OPTPATH "DIST_MAX_TIME", &dist->max_time,
332 file, qid, __FILE__, __LINE__) ) {return 1;}
333 if( hdf5_read_double(OPTPATH "DIST_NBIN_TIME", &tempfloat,
334 file, qid, __FILE__, __LINE__) ) {return 1;}
335 dist->n_time = (int)tempfloat;
336
337 if( hdf5_read_double(OPTPATH "DIST_MIN_CHARGE", &dist->min_q,
338 file, qid, __FILE__, __LINE__) ) {return 1;}
339 if( hdf5_read_double(OPTPATH "DIST_MAX_CHARGE", &dist->max_q,
340 file, qid, __FILE__, __LINE__) ) {return 1;}
341 if( hdf5_read_double(OPTPATH "DIST_NBIN_CHARGE", &tempfloat,
342 file, qid, __FILE__, __LINE__) ) {return 1;}
343 dist->n_q = (int)tempfloat;
344
345 return 0;
346}
347
358 char* qid) {
359 #undef OPTPATH
360 #define OPTPATH "/options/opt_XXXXXXXXXX/"
361
362 real tempfloat;
363
364 if( hdf5_read_double(OPTPATH "DIST_MIN_R", &dist->min_r,
365 file, qid, __FILE__, __LINE__) ) {return 1;}
366 if( hdf5_read_double(OPTPATH "DIST_MAX_R", &dist->max_r,
367 file, qid, __FILE__, __LINE__) ) {return 1;}
368 if( hdf5_read_double(OPTPATH "DIST_NBIN_R", &tempfloat,
369 file, qid, __FILE__, __LINE__) ) {return 1;}
370 dist->n_r = (int)tempfloat;
371
372 if( hdf5_read_double(OPTPATH "DIST_MIN_PHI", &dist->min_phi,
373 file, qid, __FILE__, __LINE__) ) {return 1;}
374 if( hdf5_read_double(OPTPATH "DIST_MAX_PHI", &dist->max_phi,
375 file, qid, __FILE__, __LINE__) ) {return 1;}
376 if( hdf5_read_double(OPTPATH "DIST_NBIN_PHI", &tempfloat,
377 file, qid, __FILE__, __LINE__) ) {return 1;}
378 dist->n_phi = (int)tempfloat;
379 dist->min_phi = math_deg2rad(dist->min_phi);
380 dist->max_phi = math_deg2rad(dist->max_phi);
381
382 if( hdf5_read_double(OPTPATH "DIST_MIN_Z", &dist->min_z,
383 file, qid, __FILE__, __LINE__) ) {return 1;}
384 if( hdf5_read_double(OPTPATH "DIST_MAX_Z", &dist->max_z,
385 file, qid, __FILE__, __LINE__) ) {return 1;}
386 if( hdf5_read_double(OPTPATH "DIST_NBIN_Z", &tempfloat,
387 file, qid, __FILE__, __LINE__) ) {return 1;}
388 dist->n_z = (int)tempfloat;
389
390 if( hdf5_read_double(OPTPATH "DIST_MIN_PR", &dist->min_pr,
391 file, qid, __FILE__, __LINE__) ) {return 1;}
392 if( hdf5_read_double(OPTPATH "DIST_MAX_PR", &dist->max_pr,
393 file, qid, __FILE__, __LINE__) ) {return 1;}
394 if( hdf5_read_double(OPTPATH "DIST_NBIN_PR", &tempfloat,
395 file, qid, __FILE__, __LINE__) ) {return 1;}
396 dist->n_pr = (int)tempfloat;
397
398 if( hdf5_read_double(OPTPATH "DIST_MIN_PPHI", &dist->min_pphi,
399 file, qid, __FILE__, __LINE__) ) {return 1;}
400 if( hdf5_read_double(OPTPATH "DIST_MAX_PPHI", &dist->max_pphi,
401 file, qid, __FILE__, __LINE__) ) {return 1;}
402 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPHI", &tempfloat,
403 file, qid, __FILE__, __LINE__) ) {return 1;}
404 dist->n_pphi = (int)tempfloat;
405
406 if( hdf5_read_double(OPTPATH "DIST_MIN_PZ", &dist->min_pz,
407 file, qid, __FILE__, __LINE__) ) {return 1;}
408 if( hdf5_read_double(OPTPATH "DIST_MAX_PZ", &dist->max_pz,
409 file, qid, __FILE__, __LINE__) ) {return 1;}
410 if( hdf5_read_double(OPTPATH "DIST_NBIN_PZ", &tempfloat,
411 file, qid, __FILE__, __LINE__) ) {return 1;}
412 dist->n_pz = (int)tempfloat;
413
414 if( hdf5_read_double(OPTPATH "DIST_MIN_TIME", &dist->min_time,
415 file, qid, __FILE__, __LINE__) ) {return 1;}
416 if( hdf5_read_double(OPTPATH "DIST_MAX_TIME", &dist->max_time,
417 file, qid, __FILE__, __LINE__) ) {return 1;}
418 if( hdf5_read_double(OPTPATH "DIST_NBIN_TIME", &tempfloat,
419 file, qid, __FILE__, __LINE__) ) {return 1;}
420 dist->n_time = (int)tempfloat;
421
422 if( hdf5_read_double(OPTPATH "DIST_MIN_CHARGE", &dist->min_q,
423 file, qid, __FILE__, __LINE__) ) {return 1;}
424 if( hdf5_read_double(OPTPATH "DIST_MAX_CHARGE", &dist->max_q,
425 file, qid, __FILE__, __LINE__) ) {return 1;}
426 if( hdf5_read_double(OPTPATH "DIST_NBIN_CHARGE", &tempfloat,
427 file, qid, __FILE__, __LINE__) ) {return 1;}
428 dist->n_q = (int)tempfloat;
429
430 return 0;
431}
432
443 char* qid) {
444 #undef OPTPATH
445 #define OPTPATH "/options/opt_XXXXXXXXXX/"
446
447 real tempfloat;
448
449 if( hdf5_read_double(OPTPATH "DIST_MIN_RHO", &dist->min_rho,
450 file, qid, __FILE__, __LINE__) ) {return 1;}
451 if( hdf5_read_double(OPTPATH "DIST_MAX_RHO", &dist->max_rho,
452 file, qid, __FILE__, __LINE__) ) {return 1;}
453 if( hdf5_read_double(OPTPATH "DIST_NBIN_RHO", &tempfloat,
454 file, qid, __FILE__, __LINE__) ) {return 1;}
455 dist->n_rho = (int)tempfloat;
456
457 if( hdf5_read_double(OPTPATH "DIST_MIN_PHI", &dist->min_phi,
458 file, qid, __FILE__, __LINE__) ) {return 1;}
459 if( hdf5_read_double(OPTPATH "DIST_MAX_PHI", &dist->max_phi,
460 file, qid, __FILE__, __LINE__) ) {return 1;}
461 if( hdf5_read_double(OPTPATH "DIST_NBIN_PHI", &tempfloat,
462 file, qid, __FILE__, __LINE__) ) {return 1;}
463 dist->n_phi = (int)tempfloat;
464 dist->min_phi = math_deg2rad(dist->min_phi);
465 dist->max_phi = math_deg2rad(dist->max_phi);
466
467 if( hdf5_read_double(OPTPATH "DIST_MIN_THETA", &dist->min_theta,
468 file, qid, __FILE__, __LINE__) ) {return 1;}
469 if( hdf5_read_double(OPTPATH "DIST_MAX_THETA", &dist->max_theta,
470 file, qid, __FILE__, __LINE__) ) {return 1;}
471 if( hdf5_read_double(OPTPATH "DIST_NBIN_THETA", &tempfloat,
472 file, qid, __FILE__, __LINE__) ) {return 1;}
473 dist->n_theta = (int)tempfloat;
474 dist->min_theta = math_deg2rad(dist->min_theta);
475 dist->max_theta = math_deg2rad(dist->max_theta);
476
477 if( hdf5_read_double(OPTPATH "DIST_MIN_PPA", &dist->min_ppara,
478 file, qid, __FILE__, __LINE__) ) {return 1;}
479 if( hdf5_read_double(OPTPATH "DIST_MAX_PPA", &dist->max_ppara,
480 file, qid, __FILE__, __LINE__) ) {return 1;}
481 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPA", &tempfloat,
482 file, qid, __FILE__, __LINE__) ) {return 1;}
483 dist->n_ppara = (int)tempfloat;
484
485 if( hdf5_read_double(OPTPATH "DIST_MIN_PPE", &dist->min_pperp,
486 file, qid, __FILE__, __LINE__) ) {return 1;}
487 if( hdf5_read_double(OPTPATH "DIST_MAX_PPE", &dist->max_pperp,
488 file, qid, __FILE__, __LINE__) ) {return 1;}
489 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPE", &tempfloat,
490 file, qid, __FILE__, __LINE__) ) {return 1;}
491 dist->n_pperp = (int)tempfloat;
492
493 if( hdf5_read_double(OPTPATH "DIST_MIN_TIME", &dist->min_time,
494 file, qid, __FILE__, __LINE__) ) {return 1;}
495 if( hdf5_read_double(OPTPATH "DIST_MAX_TIME", &dist->max_time,
496 file, qid, __FILE__, __LINE__) ) {return 1;}
497 if( hdf5_read_double(OPTPATH "DIST_NBIN_TIME", &tempfloat,
498 file, qid, __FILE__, __LINE__) ) {return 1;}
499 dist->n_time = (int)tempfloat;
500
501 if( hdf5_read_double(OPTPATH "DIST_MIN_CHARGE", &dist->min_q,
502 file, qid, __FILE__, __LINE__) ) {return 1;}
503 if( hdf5_read_double(OPTPATH "DIST_MAX_CHARGE", &dist->max_q,
504 file, qid, __FILE__, __LINE__) ) {return 1;}
505 if( hdf5_read_double(OPTPATH "DIST_NBIN_CHARGE", &tempfloat,
506 file, qid, __FILE__, __LINE__) ) {return 1;}
507 dist->n_q = (int)tempfloat;
508
509 return 0;
510}
511
522 char* qid) {
523 #undef OPTPATH
524 #define OPTPATH "/options/opt_XXXXXXXXXX/"
525
526 real tempfloat;
527
528 if( hdf5_read_double(OPTPATH "DIST_MIN_RHO", &dist->min_rho,
529 file, qid, __FILE__, __LINE__) ) {return 1;}
530 if( hdf5_read_double(OPTPATH "DIST_MAX_RHO", &dist->max_rho,
531 file, qid, __FILE__, __LINE__) ) {return 1;}
532 if( hdf5_read_double(OPTPATH "DIST_NBIN_RHO", &tempfloat,
533 file, qid, __FILE__, __LINE__) ) {return 1;}
534 dist->n_rho = (int)tempfloat;
535
536 if( hdf5_read_double(OPTPATH "DIST_MIN_PHI", &dist->min_phi,
537 file, qid, __FILE__, __LINE__) ) {return 1;}
538 if( hdf5_read_double(OPTPATH "DIST_MAX_PHI", &dist->max_phi,
539 file, qid, __FILE__, __LINE__) ) {return 1;}
540 if( hdf5_read_double(OPTPATH "DIST_NBIN_PHI", &tempfloat,
541 file, qid, __FILE__, __LINE__) ) {return 1;}
542 dist->n_phi = (int)tempfloat;
543 dist->min_phi = math_deg2rad(dist->min_phi);
544 dist->max_phi = math_deg2rad(dist->max_phi);
545
546 if( hdf5_read_double(OPTPATH "DIST_MIN_THETA", &dist->min_theta,
547 file, qid, __FILE__, __LINE__) ) {return 1;}
548 if( hdf5_read_double(OPTPATH "DIST_MAX_THETA", &dist->max_theta,
549 file, qid, __FILE__, __LINE__) ) {return 1;}
550 if( hdf5_read_double(OPTPATH "DIST_NBIN_THETA", &tempfloat,
551 file, qid, __FILE__, __LINE__) ) {return 1;}
552 dist->n_theta = (int)tempfloat;
553 dist->min_theta = math_deg2rad(dist->min_theta);
554 dist->max_theta = math_deg2rad(dist->max_theta);
555
556 if( hdf5_read_double(OPTPATH "DIST_MIN_PR", &dist->min_pr,
557 file, qid, __FILE__, __LINE__) ) {return 1;}
558 if( hdf5_read_double(OPTPATH "DIST_MAX_PR", &dist->max_pr,
559 file, qid, __FILE__, __LINE__) ) {return 1;}
560 if( hdf5_read_double(OPTPATH "DIST_NBIN_PR", &tempfloat,
561 file, qid, __FILE__, __LINE__) ) {return 1;}
562 dist->n_pr = (int)tempfloat;
563
564 if( hdf5_read_double(OPTPATH "DIST_MIN_PPHI", &dist->min_pphi,
565 file, qid, __FILE__, __LINE__) ) {return 1;}
566 if( hdf5_read_double(OPTPATH "DIST_MAX_PPHI", &dist->max_pphi,
567 file, qid, __FILE__, __LINE__) ) {return 1;}
568 if( hdf5_read_double(OPTPATH "DIST_NBIN_PPHI", &tempfloat,
569 file, qid, __FILE__, __LINE__) ) {return 1;}
570 dist->n_pphi = (int)tempfloat;
571
572 if( hdf5_read_double(OPTPATH "DIST_MIN_PZ", &dist->min_pz,
573 file, qid, __FILE__, __LINE__) ) {return 1;}
574 if( hdf5_read_double(OPTPATH "DIST_MAX_PZ", &dist->max_pz,
575 file, qid, __FILE__, __LINE__) ) {return 1;}
576 if( hdf5_read_double(OPTPATH "DIST_NBIN_PZ", &tempfloat,
577 file, qid, __FILE__, __LINE__) ) {return 1;}
578 dist->n_pz = (int)tempfloat;
579
580 if( hdf5_read_double(OPTPATH "DIST_MIN_TIME", &dist->min_time,
581 file, qid, __FILE__, __LINE__) ) {return 1;}
582 if( hdf5_read_double(OPTPATH "DIST_MAX_TIME", &dist->max_time,
583 file, qid, __FILE__, __LINE__) ) {return 1;}
584 if( hdf5_read_double(OPTPATH "DIST_NBIN_TIME", &tempfloat,
585 file, qid, __FILE__, __LINE__) ) {return 1;}
586 dist->n_time = (int)tempfloat;
587
588 if( hdf5_read_double(OPTPATH "DIST_MIN_CHARGE", &dist->min_q,
589 file, qid, __FILE__, __LINE__) ) {return 1;}
590 if( hdf5_read_double(OPTPATH "DIST_MAX_CHARGE", &dist->max_q,
591 file, qid, __FILE__, __LINE__) ) {return 1;}
592 if( hdf5_read_double(OPTPATH "DIST_NBIN_CHARGE", &tempfloat,
593 file, qid, __FILE__, __LINE__) ) {return 1;}
594 dist->n_q = (int)tempfloat;
595
596 return 0;
597}
598
609 char* qid) {
610 #undef OPTPATH
611 #define OPTPATH "/options/opt_XXXXXXXXXX/"
612
613 real tempfloat;
614 if( hdf5_read_double(OPTPATH "DIST_MIN_MU", &dist->min_mu,
615 file, qid, __FILE__, __LINE__) ) {return 1;}
616 if( hdf5_read_double(OPTPATH "DIST_MAX_MU", &dist->max_mu,
617 file, qid, __FILE__, __LINE__) ) {return 1;}
618 if( hdf5_read_double(OPTPATH "DIST_NBIN_MU", &tempfloat,
619 file, qid, __FILE__, __LINE__) ) {return 1;}
620 dist->n_mu = (int)tempfloat;
621
622 if( hdf5_read_double(OPTPATH "DIST_MIN_EKIN", &dist->min_Ekin,
623 file, qid, __FILE__, __LINE__) ) {return 1;}
624 if( hdf5_read_double(OPTPATH "DIST_MAX_EKIN", &dist->max_Ekin,
625 file, qid, __FILE__, __LINE__) ) {return 1;}
626 if( hdf5_read_double(OPTPATH "DIST_NBIN_EKIN", &tempfloat,
627 file, qid, __FILE__, __LINE__) ) {return 1;}
628 dist->n_Ekin = (int)tempfloat;
629
630 if( hdf5_read_double(OPTPATH "DIST_MIN_PTOR", &dist->min_Ptor,
631 file, qid, __FILE__, __LINE__) ) {return 1;}
632 if( hdf5_read_double(OPTPATH "DIST_MAX_PTOR", &dist->max_Ptor,
633 file, qid, __FILE__, __LINE__) ) {return 1;}
634 if( hdf5_read_double(OPTPATH "DIST_NBIN_PTOR", &tempfloat,
635 file, qid, __FILE__, __LINE__) ) {return 1;}
636 dist->n_Ptor = (int)tempfloat;
637
638 return 0;
639}
640
651 char* qid) {
652 #undef OPTPATH
653 #define OPTPATH "/options/opt_XXXXXXXXXX/"
654
655 real tempfloat;
656
657 if( hdf5_read_double(OPTPATH "ORBITWRITE_MODE", &tempfloat,
658 file, qid, __FILE__, __LINE__) ) {return 1;}
659 diagorb->mode = (int)tempfloat;
660
661 if( hdf5_read_double(OPTPATH "ORBITWRITE_NPOINT", &tempfloat,
662 file, qid, __FILE__, __LINE__) ) {return 1;}
663 diagorb->Npnt = (int)tempfloat;
664 if( hdf5_read_double(OPTPATH "ORBITWRITE_INTERVAL",
665 &(diagorb->writeInterval),
666 file, qid, __FILE__, __LINE__) ) {return 1;}
667
668
669
670 for(int i=0; i < DIAG_ORB_MAXPOINCARES; i++) {
674 }
675
676 if( hdf5_read_double(OPTPATH "ORBITWRITE_TOROIDALANGLES",
677 (diagorb->toroidalangles),
678 file, qid, __FILE__, __LINE__) ) {return 1;}
679 if( hdf5_read_double(OPTPATH "ORBITWRITE_POLOIDALANGLES",
680 (diagorb->poloidalangles),
681 file, qid, __FILE__, __LINE__) ) {return 1;}
682 if( hdf5_read_double(OPTPATH "ORBITWRITE_RADIALDISTANCES",
683 (diagorb->radialdistances),
684 file, qid, __FILE__, __LINE__) ) {return 1;}
685
686
687 for(int i=0; i < DIAG_ORB_MAXPOINCARES; i++) {
688 if(diagorb->toroidalangles[0] < 0) {
689 /* Negative angle means plane is disabled */
690 diagorb->ntoroidalplots = 0;
691 break;
692 }
694 diagorb->ntoroidalplots = i;
695 break;
696 }
697 }
698
699 for(int i=0; i < DIAG_ORB_MAXPOINCARES; i++) {
700 if(diagorb->poloidalangles[0] < 0) {
701 /* Negative angle means plane is disabled */
702 diagorb->npoloidalplots = 0;
703 break;
704 }
706 diagorb->npoloidalplots = i;
707 break;
708 }
709 }
710
711 for(int i=0; i < DIAG_ORB_MAXPOINCARES; i++) {
712 if(diagorb->radialdistances[0] < 0) {
713 /* Negative angle means plane is disabled */
714 diagorb->nradialplots = 0;
715 break;
716 }
717 if(diagorb->radialdistances[i] == RADIAL_FILLER_VALUE) {
718 diagorb->nradialplots = i;
719 break;
720 }
721 }
722
723 for(int i=0; i < diagorb->ntoroidalplots; i++) {
724 diagorb->toroidalangles[i] = diagorb->toroidalangles[i]*CONST_PI/180;
725 }
726 for(int i=0; i < diagorb->npoloidalplots; i++) {
727 diagorb->poloidalangles[i] = diagorb->poloidalangles[i]*CONST_PI/180;
728 }
729 return 0;
730}
731
742 hid_t file, diag_transcoef_data* diagtrcof, char* qid) {
743 #undef OPTPATH
744 #define OPTPATH "/options/opt_XXXXXXXXXX/"
745
746 if( hdf5_read_double(OPTPATH "TRANSCOEF_INTERVAL", &diagtrcof->interval,
747 file, qid, __FILE__, __LINE__) ) {return 1;}
748
749 real tempfloat;
750 if( hdf5_read_double(OPTPATH "TRANSCOEF_NAVG", &tempfloat,
751 file, qid, __FILE__, __LINE__) ) {return 1;}
752 diagtrcof->Navg = (int)tempfloat;
753
754 if( hdf5_read_double(OPTPATH "TRANSCOEF_RECORDRHO", &tempfloat,
755 file, qid, __FILE__, __LINE__) ) {return 1;}
756 diagtrcof->recordrho = (int)tempfloat;
757
758 return 0;
759}
Main header file for ASCOT5.
double real
Definition ascot5.h:85
Header file containing physical and mathematical constants.
#define CONST_PI
pi
Definition consts.h:11
#define CONST_E
Elementary charge [C].
Definition consts.h:35
Header file for diag.c.
Header file for diag_orb.c.
#define DIAG_ORB_MAXPOINCARES
Definition diag_orb.h:15
Header file for dist_5D.c.
Header file for dist_6D.c.
Header file for dist_com.c.
Header file for dist_rho5D.c.
Header file for dist_rho6D.c.
Header file for endcond.c.
@ endcond_therm
Definition endcond.h:21
@ endcond_tormax
Definition endcond.h:26
@ endcond_emin
Definition endcond.h:20
@ endcond_rhomin
Definition endcond.h:23
@ endcond_tlim
Definition endcond.h:19
@ endcond_neutr
Definition endcond.h:29
@ endcond_cpumax
Definition endcond.h:27
@ endcond_polmax
Definition endcond.h:25
@ endcond_rhomax
Definition endcond.h:24
@ endcond_wall
Definition endcond.h:22
@ endcond_ioniz
Definition endcond.h:30
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.
Header file for hdf5_helpers.h.
int hdf5_options_read_dist5D(hid_t file, dist_5D_data *dist, char *qid)
Helper function to read dist5D settings from HDF5 file.
int hdf5_options_read_distCOM(hid_t file, dist_COM_data *dist, char *qid)
Helper function to read COM dist settings from HDF5 file.
int hdf5_options_read_dist6D(hid_t file, dist_6D_data *dist, char *qid)
Helper function to read dist6D settings from HDF5 file.
int hdf5_options_read_distrho6D(hid_t file, dist_rho6D_data *dist, char *qid)
Helper function to read distrho6D settings from HDF5 file.
int hdf5_options_read(hid_t file, sim_data *sim, char *qid)
Read options and diagnostics settings from HDF5 file.
#define OPTPATH
int hdf5_options_read_diagtrcof(hid_t file, diag_transcoef_data *diagtrcof, char *qid)
Helper function to read transport coefficient settings from HDF5 file.
int hdf5_options_read_distrho5D(hid_t file, dist_rho5D_data *dist, char *qid)
Helper function to read distrho5D settings from HDF5 file.
int hdf5_options_read_diagorb(hid_t file, diag_orb_data *diagorb, char *qid)
Helper function to read orbit diagnostics settings from HDF5 file.
Header file for hdf5_options.c.
#define RADIAL_FILLER_VALUE
#define TOROIDAL_ANGLE_FILLER_VALUE
#define POLOIDAL_ANGLE_FILLER_VALUE
Header file for math.c.
#define math_deg2rad(a)
Convert degrees to radians.
Definition math.h:110
Header file for simulate.c.
@ simulate_mode_fo
Definition simulate.h:34
@ simulate_mode_gc
Definition simulate.h:37
@ simulate_mode_hybrid
Definition simulate.h:42
Diagnostics data struct.
Definition diag.h:21
dist_COM_data distCOM
Definition diag.h:35
int distrho5D_collect
Definition diag.h:25
int diagtrcof_collect
Definition diag.h:28
diag_transcoef_data diagtrcof
Definition diag.h:36
int distrho6D_collect
Definition diag.h:26
diag_orb_data diagorb
Definition diag.h:30
dist_rho6D_data distrho6D
Definition diag.h:34
dist_5D_data dist5D
Definition diag.h:31
int dist5D_collect
Definition diag.h:23
int dist6D_collect
Definition diag.h:24
int distCOM_collect
Definition diag.h:27
dist_6D_data dist6D
Definition diag.h:32
dist_rho5D_data distrho5D
Definition diag.h:33
int diagorb_collect
Definition diag.h:22
Orbit diagnostics data struct.
Definition diag_orb.h:42
real poloidalangles[DIAG_ORB_MAXPOINCARES]
Definition diag_orb.h:78
int ntoroidalplots
Definition diag_orb.h:73
real toroidalangles[DIAG_ORB_MAXPOINCARES]
Definition diag_orb.h:77
real writeInterval
Definition diag_orb.h:72
real radialdistances[DIAG_ORB_MAXPOINCARES]
Definition diag_orb.h:79
int nradialplots
Definition diag_orb.h:75
int record_mode
Definition diag_orb.h:76
int npoloidalplots
Definition diag_orb.h:74
Transport coefficient diagnostics offload data struct.
Histogram parameters.
Definition dist_5D.h:15
real min_time
Definition dist_5D.h:37
real max_r
Definition dist_5D.h:18
real max_pperp
Definition dist_5D.h:34
real min_phi
Definition dist_5D.h:21
real max_phi
Definition dist_5D.h:22
real min_ppara
Definition dist_5D.h:29
real max_z
Definition dist_5D.h:26
real max_time
Definition dist_5D.h:38
int n_ppara
Definition dist_5D.h:28
int n_pperp
Definition dist_5D.h:32
real min_z
Definition dist_5D.h:25
real max_ppara
Definition dist_5D.h:30
real min_r
Definition dist_5D.h:17
real max_q
Definition dist_5D.h:42
real min_pperp
Definition dist_5D.h:33
real min_q
Definition dist_5D.h:41
Histogram parameters on target.
Definition dist_6D.h:15
real max_phi
Definition dist_6D.h:22
real min_phi
Definition dist_6D.h:21
real min_pz
Definition dist_6D.h:37
real max_pz
Definition dist_6D.h:38
real min_time
Definition dist_6D.h:41
real min_q
Definition dist_6D.h:45
real max_pphi
Definition dist_6D.h:34
real max_time
Definition dist_6D.h:42
real min_pphi
Definition dist_6D.h:33
real min_pr
Definition dist_6D.h:29
real max_pr
Definition dist_6D.h:30
real max_z
Definition dist_6D.h:26
real min_r
Definition dist_6D.h:17
real max_r
Definition dist_6D.h:18
real max_q
Definition dist_6D.h:46
real min_z
Definition dist_6D.h:25
Histogram parameters on target.
Definition dist_com.h:16
real max_Ptor
Definition dist_com.h:27
real min_Ptor
Definition dist_com.h:26
real min_Ekin
Definition dist_com.h:22
real max_Ekin
Definition dist_com.h:23
Histogram parameters.
Definition dist_rho5D.h:15
Histogram parameters on target.
Definition dist_rho6D.h:15
Simulation data struct.
Definition simulate.h:58
int enable_orbfol
Definition simulate.h:99
real endcond_min_ekin
Definition simulate.h:122
int endcond_torandpol
Definition simulate.h:127
real endcond_max_rho
Definition simulate.h:121
int record_mode
Definition simulate.h:80
int sim_mode
Definition simulate.h:78
int disable_energyccoll
Definition simulate.h:107
real ada_max_drho
Definition simulate.h:93
real ada_tol_clmbcol
Definition simulate.h:91
real endcond_max_tororb
Definition simulate.h:125
int enable_atomic
Definition simulate.h:102
int disable_gcdiffccoll
Definition simulate.h:111
real endcond_min_thermal
Definition simulate.h:123
real endcond_max_mileage
Definition simulate.h:118
real fix_usrdef_val
Definition simulate.h:84
int enable_aldforce
Definition simulate.h:104
int disable_pitchccoll
Definition simulate.h:109
int enable_mhd
Definition simulate.h:101
int endcond_active
Definition simulate.h:116
int fix_usrdef_use
Definition simulate.h:83
real endcond_max_polorb
Definition simulate.h:126
int fix_gyrodef_nstep
Definition simulate.h:85
real endcond_max_cputime
Definition simulate.h:119
real endcond_min_rho
Definition simulate.h:120
real endcond_lim_simtime
Definition simulate.h:117
int enable_ada
Definition simulate.h:79
int reverse_time
Definition simulate.h:113
real ada_max_dphi
Definition simulate.h:95
int enable_icrh
Definition simulate.h:103
int enable_clmbcol
Definition simulate.h:100
int disable_gctransform
Definition simulate.h:105
real ada_tol_orbfol
Definition simulate.h:89
diag_data diag_data
Definition simulate.h:69