forked from ascot4fusion/ascot5
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdiag.h
96 lines (78 loc) · 4.16 KB
/
diag.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* @file diag.h
* @brief Header file for diag.c
*/
#ifndef DIAG_H
#define DIAG_H
#include "ascot5.h"
#include "particle.h"
#include "B_field.h"
#include "diag/dist_5D.h"
#include "diag/dist_6D.h"
#include "diag/dist_rho5D.h"
#include "diag/dist_rho6D.h"
#include "diag/dist_com.h"
#include "diag/diag_orb.h"
#include "diag/diag_transcoef.h"
/**
* @brief Diagnostics offload data struct
*/
typedef struct {
int diagorb_collect; /**< Flag for collecting orbit data */
int dist5D_collect; /**< Flag for collecting 5D distribution */
int dist6D_collect; /**< Flag for collecting 6D distribution */
int distrho5D_collect; /**< Flag for collecting 5D rho distribution */
int distrho6D_collect; /**< Flag for collecting 6D rho distribution */
int distCOM_collect; /**< Flag for collecting COM distribution */
int diagtrcof_collect; /**< Flag for collecting transport coefficients */
diag_orb_offload_data diagorb; /**< Orbit offload data */
dist_5D_offload_data dist5D; /**< 5D distribution offload data */
dist_6D_offload_data dist6D; /**< 6D distribution offload data */
dist_rho5D_offload_data distrho5D; /**< 5D rho distribution offload data */
dist_rho6D_offload_data distrho6D; /**< 6D rho distribution offload data */
dist_COM_offload_data distCOM; /**< COM distribution offload data */
diag_transcoef_offload_data diagtrcof; /**< Transp. Coef. offload data */
int offload_dist5D_index; /**< Index for 5D dist in offload array */
int offload_dist6D_index; /**< Index for 5D dist in offload array */
int offload_distrho5D_index; /**< Index for 5D dist in offload array */
int offload_distrho6D_index; /**< Index for 6D rho dist in offload array */
int offload_distCOM_index; /**< Index for COM dist in offload array */
int offload_diagorb_index; /**< Index for orbit data in offload array */
int offload_diagtrcof_index; /**< Index for trcoef data in offload array */
int offload_dist_length; /**< Number of elements in distributions */
int offload_array_length; /**< Number of elements in offload_array */
} diag_offload_data;
/**
* @brief Diagnostics data struct
*/
typedef struct {
int diagorb_collect; /**< Flag for collecting orbit data */
int dist5D_collect; /**< Flag for collecting 5D distribution */
int dist6D_collect; /**< Flag for collecting 6D distribution */
int distrho5D_collect; /**< Flag for collecting 5D rho distribution */
int distrho6D_collect; /**< Flag for collecting 6D rho distribution */
int distCOM_collect; /**< Flag for collecting COM distribution */
int diagtrcof_collect; /**< Flag for collecting transport coefficients */
diag_orb_data diagorb; /**< Orbit diagnostics data */
dist_5D_data dist5D; /**< 5D distribution diagnostics data */
dist_6D_data dist6D; /**< 6D distribution diagnostics data */
dist_rho5D_data distrho5D; /**< 5D rho distribution diagnosticsd data */
dist_rho6D_data distrho6D; /**< 6D rho distribution diagnostics data */
dist_COM_data distCOM; /**< COM distribution diagnostics data */
diag_transcoef_data diagtrcof; /**< Transp. Coef. diagnostics data */
} diag_data;
int diag_init_offload(diag_offload_data* data, real** offload_array, int Nmrk);
void diag_free_offload(diag_offload_data* data, real** offload_array);
void diag_sum(diag_offload_data* data, real* array1, real* array2);
#pragma omp declare target
void diag_init(diag_data* data, diag_offload_data* offload_data,
real* offload_array);
void diag_free(diag_data* data);
void diag_update_fo(diag_data* data, B_field_data* Bdata, particle_simd_fo* p_f,
particle_simd_fo* p_i);
void diag_update_gc(diag_data* data, B_field_data* Bdata, particle_simd_gc* p_f,
particle_simd_gc* p_i);
void diag_update_ml(diag_data* data, particle_simd_ml* p_f,
particle_simd_ml* p_i);
#pragma omp end declare target
#endif