31void __ascot5_icrh_routines_MOD_call_initev_excl_marker_stuff(
32 const char* xml_filename,
int **xml_filename_len,
void** cptr_rfglobal,
33 void** cptr_rfof_input_params);
34void __ascot5_icrh_routines_MOD_call_initialise_res_mem(
void** cptr_mem,
35 int* cptr_mem_shape_i,
int* cptr_mem_shape_j,
void** cptr_rfglobal,
36 void** cptr_rfof_input_param);
37void __ascot5_icrh_routines_MOD_call_initialise_diagnostics(
38 void** cptr_RFglobal,
void** cptr_diagno);
40void __ascot5_icrh_routines_MOD_call_set_marker_pointers(
void** cptr_marker,
44 real** vdriftRho,
real** acc,
int* isOrbitTimeAccelerated,
45 int* is_already_allocated);
47void __ascot5_icrh_routines_MOD_call_rf_kick(
double*time,
double*dtin,
48 int* mpi_rank,
void** cptr_marker,
void** cptr_mem,
void** cptr_rfglobal,
49 void** cptr_rfdiagno,
void** cptr_rfof_input,
int* mem_shape_i,
52void __ascot5_icrh_routines_MOD_call_reset_res_mem(
void** rfof_mem_pointer,
53 int* mem_shape_i,
int* mem_shape_j);
55void __ascot5_icrh_routines_MOD_call_deallocate_rfof_input_param(
56 void** cptr_rfof_input_param);
57void __ascot5_icrh_routines_MOD_call_deallocate_rfglobal(
void** cptr_rfglobal);
58void __ascot5_icrh_routines_MOD_call_deallocate_res_mem(
void** cptr_res_mem,
59 int* cptr_mem_shape_i,
int* cptr_mem_shape_j);
60void __ascot5_icrh_routines_MOD_call_deallocate_diagnostics(
void** cptr_diagno);
61void __ascot5_icrh_routines_MOD_deallocate_marker(
void** cptr_rfof_marker);
63void __ascot5_icrh_routines_MOD_get_rf_wave_local_v2(
real*
R,
real* z,
64 real* rho_tor,
real* theta,
void** cptr_rfglobal,
real* e_plus_real,
65 real* e_minus_real,
real* e_plus_imag,
real* e_minus_imag);
67void __ascot5_icrh_routines_MOD_eval_resonance_function(
void** cptr_marker,
68 void** cptr_rfglobal,
real* omega_res,
int* nharm);
70void __ascot5_icrh_routines_MOD_print_marker_stuff(
void** marker_pointer);
72void __ascot5_icrh_routines_MOD_print_mem_stuff(
void** mem_pointer);
86 int xml_filename_len = strlen(xml_filename);
87 int*xml_filename_len_ptr = &xml_filename_len;
88 __ascot5_icrh_routines_MOD_call_initev_excl_marker_stuff(xml_filename,
102 __ascot5_icrh_routines_MOD_call_deallocate_rfof_input_param(
104 __ascot5_icrh_routines_MOD_call_deallocate_rfglobal(&rfof->
rfglobal);
118 for(
int i=0; i<
NSIMD; i++) {
120 real dummy = -999.0, *ptr = &dummy;
122 int dummyint = 0, *iptr = &dummyint;
126 int is_accelerated = 0;
127 int is_already_allocated = 0;
128 __ascot5_icrh_routines_MOD_call_set_marker_pointers(
129 &(rfof_mrk->
p[i]), &iptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr,
130 &ptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr, &ptr,
131 &is_accelerated, &is_already_allocated);
134 __ascot5_icrh_routines_MOD_call_initialise_res_mem(
140 __ascot5_icrh_routines_MOD_call_initialise_diagnostics(
155 for(
int i=0; i<
NSIMD; i++) {
156 __ascot5_icrh_routines_MOD_call_deallocate_res_mem(
159 __ascot5_icrh_routines_MOD_call_deallocate_diagnostics(
161 __ascot5_icrh_routines_MOD_deallocate_marker(&rfof_mrk->
p[i]);
179 __ascot5_icrh_routines_MOD_call_reset_res_mem(
206void rfof_resonance_check_and_kick_gc(
210 for(
int i=0; i<
NSIMD; i++) {
211 if(p->id[i] > 0 && p->running[i]) {
216 real psi, B, Ekin, vnorm, P_phi, v_par, v_perp, gyrof,
221 B =
math_normc(p->B_r[i], p->B_phi[i], p->B_z[i]);
222 v_par = p->ppar[i]/p->mass[i];
223 Ekin = p->ppar[i]*p->ppar[i]/(2*p->mass[i]) + p->mu[i]*B;
224 vnorm = sqrt( (p->ppar[i]/p->mass[i])*(p->ppar[i]/p->mass[i]) + 2*p->mu[i]*B/p->mass[i] );
225 v_perp = sqrt( 2 * p->mu[i]*B/p->mass[i] );
234 tauB =
CONST_2PI*q_safe*p->r[i]/fabs(v_par)*sqrt(2*majR/minR);
236 real acceleration = 1.0;
237 int is_accelerated = 0;
238 int is_preallocated = 1;
241 int* dummy_Id_ptr = &dummy_id;
243 real* weight_ptr = &(p->weight[i]);
244 real* r_ptr = &(p->r[i]);
245 real* phi_ptr = &(p->phi[i]);
246 real* z_ptr = &(p->z[i]);
247 real* charge_ptr = &(p->charge[i]);
248 real* mass_ptr = &(p->mass[i]);
249 real* mu_ptr = &(p->mu[i]);
250 real* Ekin_ptr = &Ekin;
251 real* psi_ptr = ψ
252 real* speed_ptr = &vnorm;
253 real* P_phi_ptr = &P_phi;
254 real* v_par_ptr = &v_par;
255 real* v_perp_ptr = &v_perp;
256 real* gyrof_ptr = &gyrof;
257 real* tauB_ptr = &tauB;
258 real* vdriftRho_ptr = &vdriftRho;
259 real* acc_ptr = &acceleration;
262 __ascot5_icrh_routines_MOD_call_set_marker_pointers(
302 __ascot5_icrh_routines_MOD_call_rf_kick(
303 &(p->time[i]), &(hin[i]), &mpi_rank,
307 &(rfof_mrk->
ncol[i]), &err, &rfof_data_pack);
311 p->ppar[i] = p->ppar[i] + p->mass[i]*(rfof_data_pack.
dvpar);
317 hout[i] = -rfof_data_pack.
RFdt;
321 hout[i] = rfof_data_pack.
RFdt;
361 int* is_accelerated,
int* is_already_allocated) {
366 real* tauB = &tauB_target;
367 __ascot5_icrh_routines_MOD_call_set_marker_pointers(
368 &rfof_mrk->
p[0], &
id, &weight, &
R, &phi, &z, &psi, &charge, &mass,
369 &Ekin, &vnorm, &mu, &Pphi, &vpar, &vperp, &gyrof, &tauB, &vdriftRho, &acc,
370 is_accelerated, is_already_allocated);
392void rfof_eval_rf_wave(
393 real* e_plus_real,
real* e_minus_real,
real* e_plus_imag,
401 real rho_tor = -999.0;
403 __ascot5_icrh_routines_MOD_get_rf_wave_local_v2(
404 &
R, &z, &rho_tor, &theta, &rfof->
rfglobal, e_plus_real, e_minus_real,
405 e_plus_imag, e_minus_imag);
423void rfof_eval_resonance_function(
426 __ascot5_icrh_routines_MOD_eval_resonance_function(
427 &rfof_mrk->
p[0], &rfof->
rfglobal, omega_res, nharm);
a5err B_field_eval_psi(real *psi, real r, real phi, real z, real t, B_field_data *Bdata)
Evaluate poloidal flux psi.
#define NSIMD
Number of particles simulated simultaneously in a particle group operations.
#define RFOF_CODEPARAM_XML
Input filename where RFOF parameters are stored.
Header file containing physical and mathematical constants.
#define math_normc(a1, a2, a3)
Calculate norm of 3D vector from its components a1, a2, a3.
Header file for particle.c.
Methods to evaluate elementary physical quantities.
#define phys_ptoroid_gc(q, R, ppar, psi, B, Bphi)
Evaluate toroidal canonical momentum for particle.
#define phys_gyrofreq_ppar(m, q, mu, ppar, B)
Evaluate gyrofrequency [rad/s] from parallel momentum and magnetic moment.
Contains the functions to be called from the simulation loop when using ICRH.
Magnetic field simulation data.
Struct representing NSIMD guiding center markers.
RFOF simulation input data.
Reusable struct for storing marker specific data during the simulation loop.
void * history_array[NSIMD]