ASCOT5
Loading...
Searching...
No Matches
particle.h
Go to the documentation of this file.
1
19#ifndef PARTICLE_H
20#define PARTICLE_H
21
22#include "ascot5.h"
23#include "B_field.h"
24#include "E_field.h"
25#include "error.h"
26
81
103
125
141
154typedef struct {
155 int n;
158 volatile int next;
159 volatile int finished;
162
174
186typedef struct {
188 union {
189 particle p;
193 };
195
210typedef struct {
211 /* Physical coordinates and parameters */
221 int* znum;
222 int* anum;
223
224 /* Magnetic field data */
228
238
239 /* Quantities used in diagnostics */
240 int* bounces;
245
249
250 /* Meta data */
256 size_t n_mrk;
258
275typedef struct {
276 /* Physical coordinates and parameters */
286
287 /* Magnetic field data */
294
304
305 /* Quantities used in diagnostics */
306 int* bounces;
311
316
317 /* Meta data */
324 size_t n_mrk;
326
343typedef struct {
344 /* Physical coordinates and parameters */
351
352 /* Magnetic field data */
359
364 real B_phi_dphi[NSIMD] __memalign__;
369
370 /* Quantities used in diagnostics */
375
380
381 /* Meta data */
389
390
391void particle_allocate_fo(particle_simd_fo* p_fo, int nmrk);
392void particle_allocate_gc(particle_simd_gc* p_gc, int nmrk);
393void particle_to_fo_dummy(particle_simd_fo* p_fo, int j);
394void particle_to_gc_dummy(particle_simd_gc* p_gc, int j);
395void particle_to_fo_dummy(particle_simd_fo* p_fo, int j);
396void particle_to_gc_dummy(particle_simd_gc* p_gc, int j);
397void particle_to_ml_dummy(particle_simd_ml* p_ml, int j);
398
400 B_field_data* Bdata, int* cycle);
402 B_field_data* Bdata, int* cycle);
404 B_field_data* Bdata, int* cycle);
405
407 B_field_data* Bdata);
409 B_field_data* Bdata);
411 B_field_data* Bdata);
413 B_field_data* Bdata);
414
419
420DECLARE_TARGET_SIMD_UNIFORM(Bdata)
422 int j, B_field_data* Bdata);
423DECLARE_TARGET_SIMD_UNIFORM(Bdata)
425 B_field_data* Bdata);
426DECLARE_TARGET_SIMD_UNIFORM(Bdata)
428 int j, B_field_data* Bdata);
429DECLARE_TARGET_SIMD_UNIFORM(Bdata)
431 B_field_data* Bdata);
432DECLARE_TARGET_SIMD_UNIFORM(Bdata)
434 int j, B_field_data* Bdata);
435DECLARE_TARGET_SIMD_UNIFORM(Bdata)
437 B_field_data* Bdata);
438DECLARE_TARGET_SIMD_UNIFORM(p_fo,Bdata)
440 B_field_data* Bdata);
441GPU_DECLARE_TARGET_SIMD
442void particle_copy_fo(particle_simd_fo* p1, int i, particle_simd_fo* p2, int j);
443DECLARE_TARGET_END
444GPU_DECLARE_TARGET_SIMD
445void particle_copy_gc(particle_simd_gc* p1, int i, particle_simd_gc* p2, int j);
446DECLARE_TARGET_SIMD
447void particle_copy_ml(particle_simd_ml* p1, int i, particle_simd_ml* p2, int j);
448
449#endif
Header file for B_field.c.
Header file for E_field.c.
Main header file for ASCOT5.
double real
Definition ascot5.h:85
#define NSIMD
Number of particles simulated simultaneously in a particle group operations.
Definition ascot5.h:91
long integer
Definition ascot5.h:84
Error module for ASCOT5.
unsigned long int a5err
Simulation error flag.
Definition error.h:17
void particle_allocate_gc(particle_simd_gc *p_gc, int nmrk)
Allocates guiding center struct representing particle markers.
Definition particle.c:126
void particle_onload_gc(particle_simd_gc *p)
Onload guiding center particle struct from the GPU.
Definition particle.c:1914
void particle_onload_fo(particle_simd_fo *p)
Onload particle struct from the GPU.
Definition particle.c:1824
void particle_to_ml_dummy(particle_simd_ml *p_ml, int j)
Makes a dummy ML simulation marker.
Definition particle.c:270
void particle_gc_to_state(particle_simd_gc *p_gc, int j, particle_state *p, B_field_data *Bdata)
Convert GC to state.
Definition particle.c:988
a5err particle_input_gc_to_state(particle_gc *p, particle_state *ps, B_field_data *Bdata)
Convert an input guiding center marker to particle state.
Definition particle.c:1592
void particle_copy_gc(particle_simd_gc *p1, int i, particle_simd_gc *p2, int j)
Copy GC struct.
Definition particle.c:1407
a5err particle_state_to_gc(particle_state *p, int i, particle_simd_gc *p_gc, int j, B_field_data *Bdata)
Convert state into a GC SIMD marker.
Definition particle.c:923
a5err particle_state_to_fo(particle_state *p, int i, particle_simd_fo *p_fo, int j, B_field_data *Bdata)
Convert state into a FO SIMD marker.
Definition particle.c:711
void particle_fo_to_state(particle_simd_fo *p_fo, int j, particle_state *p, B_field_data *Bdata)
Convert FO to state.
Definition particle.c:796
void particle_to_fo_dummy(particle_simd_fo *p_fo, int j)
Makes a dummy FO simulation marker.
Definition particle.c:184
void particle_offload_gc(particle_simd_gc *p)
Offload guiding center particle struct to GPU.
Definition particle.c:1870
int particle_fo_to_gc(particle_simd_fo *p_fo, int j, particle_simd_gc *p_gc, B_field_data *Bdata)
Convert FO struct into a GC struct.
Definition particle.c:1237
a5err particle_input_ml_to_state(particle_ml *p, particle_state *ps, B_field_data *Bdata)
Convert an input field line marker to particle state.
Definition particle.c:1708
void particle_input_to_state(input_particle *p, particle_state *ps, B_field_data *Bdata)
Converts input marker to a marker state.
Definition particle.c:602
void particle_to_gc_dummy(particle_simd_gc *p_gc, int j)
Makes a dummy GC simulation marker.
Definition particle.c:224
void particle_copy_ml(particle_simd_ml *p1, int i, particle_simd_ml *p2, int j)
Copy ML struct.
Definition particle.c:1456
void particle_allocate_fo(particle_simd_fo *p_fo, int nmrk)
Allocates struct representing particle markers.
Definition particle.c:69
a5err particle_state_to_ml(particle_state *p, int i, particle_simd_ml *p_ml, int j, B_field_data *Bdata)
Convert state to a ML SIMD marker.
Definition particle.c:1104
a5err particle_input_p_to_state(particle *p, particle_state *ps, B_field_data *Bdata)
Convert an input particle marker to particle state.
Definition particle.c:1501
void particle_offload_fo(particle_simd_fo *p)
Offload particle struct to GPU.
Definition particle.c:1778
int particle_cycle_ml(particle_queue *q, particle_simd_ml *p, B_field_data *Bdata, int *cycle)
Replace finished ML markers with new ones or dummies.
Definition particle.c:513
void particle_ml_to_state(particle_simd_ml *p_ml, int j, particle_state *p, B_field_data *Bdata)
Convert ML to state.
Definition particle.c:1169
int particle_cycle_gc(particle_queue *q, particle_simd_gc *p, B_field_data *Bdata, int *cycle)
Replace finished GC markers with new ones or dummies.
Definition particle.c:419
int particle_cycle_fo(particle_queue *q, particle_simd_fo *p, B_field_data *Bdata, int *cycle)
Replace finished FO markers with new ones or dummies.
Definition particle.c:320
void particle_copy_fo(particle_simd_fo *p1, int i, particle_simd_fo *p2, int j)
Copy FO struct.
Definition particle.c:1354
input_particle_type
Marker types enum.
Definition particle.h:168
@ input_particle_type_gc
Definition particle.h:170
@ input_particle_type_p
Definition particle.h:169
@ input_particle_type_ml
Definition particle.h:171
@ input_particle_type_s
Definition particle.h:172
Magnetic field simulation data.
Definition B_field.h:41
Wrapper for marker structs.
Definition particle.h:186
input_particle_type type
Definition particle.h:187
Guiding center input.
Definition particle.h:110
real weight
Definition particle.h:121
real energy
Definition particle.h:114
integer id
Definition particle.h:123
real charge
Definition particle.h:118
Field line input.
Definition particle.h:132
real weight
Definition particle.h:137
integer id
Definition particle.h:139
Marker queue.
Definition particle.h:154
particle_state ** p
Definition particle.h:156
volatile int next
Definition particle.h:158
volatile int finished
Definition particle.h:159
Struct representing NSIMD particle markers.
Definition particle.h:210
real * B_phi_dphi
Definition particle.h:233
integer * id
Definition particle.h:246
integer * endcond
Definition particle.h:247
integer * index
Definition particle.h:255
integer * walltile
Definition particle.h:248
integer * running
Definition particle.h:252
Struct representing NSIMD guiding center markers.
Definition particle.h:275
integer * walltile
Definition particle.h:314
integer * endcond
Definition particle.h:313
integer * running
Definition particle.h:320
integer * id
Definition particle.h:312
integer * index
Definition particle.h:323
real * B_phi_dphi
Definition particle.h:299
Struct representing NSIMD field line markers.
Definition particle.h:343
real r[NSIMD] __memalign__
Definition particle.h:345
General representation of a marker.
Definition particle.h:40
integer id
Definition particle.h:63
integer walltile
Definition particle.h:65
real B_phi_dphi
Definition particle.h:73
integer endcond
Definition particle.h:64
Particle input.
Definition particle.h:88
real charge
Definition particle.h:96
int anum
Definition particle.h:97
real z
Definition particle.h:91
real weight
Definition particle.h:99
real phi
Definition particle.h:90
real p_phi
Definition particle.h:93
real time
Definition particle.h:100
int znum
Definition particle.h:98
real r
Definition particle.h:89
real mass
Definition particle.h:95
real p_z
Definition particle.h:94
integer id
Definition particle.h:101
real p_r
Definition particle.h:92