62 template<
class Device>
143 Species(
int idx_in,
int nonadiabatic_idx_in,
bool is_electron_in,
bool is_adiabatic_in,
KinType kintype_in,
double mass_in,
double charge_in,
double charge_eu_in,
200 auto ph = Particles::slice<PtlSlice::Ph>(
particles);
201 auto ct = Particles::slice<PtlSlice::Ct>(
particles);
202 auto gid = Particles::slice<PtlSlice::Gid>(
particles);
204 auto flag = Particles::slice<PtlSlice::Flag>(
particles);
211 long long int gid_offset = 0;
215 for (
int i=0;i<
n_ptl;i++){
217 gid(i) = gid_offset + i+1;
222 for (
int j=0;j<
PTL_NPHASE;j++) ph(i, j) = gid(i) + (j)*0.1;
230 for (
int j=0;j<
PTL_NPHASE;j++) ph(i, j) = gid(i) + (j)*0.1;
372 int last_ptl_index =
n_ptl - 1;
373 auto ph = Particles::slice<PtlSlice::Ph>(
particles_d);
374 auto ct = Particles::slice<PtlSlice::Ct>(
particles_d);
375 auto gid = Particles::slice<PtlSlice::Gid>(
particles_d);
377 auto flag = Particles::slice<PtlSlice::Flag>(
particles_d);
382 for (
int j=0;j<
PTL_NPHASE;j++) ph(i, j) = ph(last_ptl_index, j);
383 for (
int j=0;j<
PTL_NCONST;j++) ct(i, j) = ct(last_ptl_index, j);
386 flag(i) = flag(last_ptl_index);
401 int last_ptl_index =
n_ptl - 1;
402 auto ph = Particles::slice<PtlSlice::Ph>(
phase0_d);
406 for (
int j=0;j<6;j++) ph(i, j) = ph(last_ptl_index, j);
429 auto ph_b = Particles::slice<PtlSlice::Ph>(backup_SoA);
430 auto ct_b = Particles::slice<PtlSlice::Ct>(backup_SoA);
431 auto gid_b = Particles::slice<PtlSlice::Gid>(backup_SoA);
433 auto flag_b = Particles::slice<PtlSlice::Flag>(backup_SoA);
436 auto ph = Particles::slice<PtlSlice::Ph>(
particles_d);
437 auto ct = Particles::slice<PtlSlice::Ct>(
particles_d);
438 auto gid = Particles::slice<PtlSlice::Gid>(
particles_d);
440 auto flag = Particles::slice<PtlSlice::Flag>(
particles_d);
443 Kokkos::parallel_for(
"backup_first_soa", Kokkos::RangePolicy<ExSpace>( 0, n ), KOKKOS_LAMBDA(
const int i ){
444 int i_offset = i + offset;
446 for (
int j=0;j<
PTL_NPHASE;j++) ph_b(i, j) = ph(i_offset, j);
447 for (
int j=0;j<
PTL_NCONST;j++) ct_b(i, j) = ct(i_offset, j);
448 gid_b(i) = gid(i_offset);
450 flag_b(i) = flag(i_offset);
458 auto ph_b = Particles::slice<PtlSlice::Ph>(backup_SoA);
459 auto ct_b = Particles::slice<PtlSlice::Ct>(backup_SoA);
460 auto gid_b = Particles::slice<PtlSlice::Gid>(backup_SoA);
462 auto flag_b = Particles::slice<PtlSlice::Flag>(backup_SoA);
465 auto ph = Particles::slice<PtlSlice::Ph>(
particles_d);
466 auto ct = Particles::slice<PtlSlice::Ct>(
particles_d);
467 auto gid = Particles::slice<PtlSlice::Gid>(
particles_d);
469 auto flag = Particles::slice<PtlSlice::Flag>(
particles_d);
472 Kokkos::parallel_for(
"backup_first_soa", Kokkos::RangePolicy<ExSpace>( 0, n ), KOKKOS_LAMBDA(
const int i ){
473 int i_offset = i + offset;
475 for (
int j=0;j<
PTL_NPHASE;j++) ph(i_offset, j) = ph_b(i, j);
476 for (
int j=0;j<
PTL_NCONST;j++) ct(i_offset, j) = ct_b(i, j);
477 gid(i_offset) = gid_b(i);
479 flag(i_offset) = flag_b(i);
490 inline void for_particle_range(
int begin_idx,
int end_idx,
const std::string label, F lambda_func)
const {
491 if(end_idx <= begin_idx)
return;
494 int first_soa = begin_idx/VEC_LEN;
495 int n_other_ptl_in_first_soa = begin_idx - first_soa*VEC_LEN;
496 bool first_soa_is_partial = (n_other_ptl_in_first_soa>0);
497 int last_soa = (end_idx-1)/VEC_LEN;
498 int n_other_ptl_in_last_soa = (last_soa+1)*VEC_LEN - end_idx;
499 bool last_soa_is_partial = (n_other_ptl_in_last_soa>0);
502 int first_item_in_shifted_range = first_soa*VEC_LEN;
504 int first_item_in_shifted_range = first_soa;
509 if(first_soa_is_partial){
512 back_up_SoA(ptl_first_soa, first_soa*VEC_LEN, n_other_ptl_in_first_soa);
514 if(last_soa_is_partial){
517 back_up_SoA(ptl_last_soa, end_idx, n_other_ptl_in_last_soa);
521 Kokkos::RangePolicy<ExSpace> particle_range_policy( first_item_in_shifted_range,
p_range<DeviceType>(end_idx) );
525 if(first_soa_is_partial){
528 if(last_soa_is_partial){
543 if(!
owns_particles_d)
exit_XGC(
"\nSpecies tried to loop over particles on device, but doesn't own the device array.");
547 use_streaming =
false;
556 if((!send_ptl) && (!return_ptl)) use_streaming =
false;
571 #ifdef USE_EPUSH_LAUNCH_BOUNDS
572 # if !defined(PUSH_MAX_THREADS_PER_BLOCK) || !defined(PUSH_MIN_WARPS_PER_EU)
573 # error "USE_EPUSH_LAUNCH_BOUNDS requires PUSH_MAX_THREADS_PER_BLOCK and PUSH_MIN_WARPS_PER_EU to be defined"
575 Kokkos::RangePolicy<ExSpace, Kokkos::LaunchBounds<PUSH_MAX_THREADS_PER_BLOCK, PUSH_MIN_WARPS_PER_EU>>
579 exit_XGC(
"\nERROR: LaunchBounds::Custom specified, but USE_EPUSH_LAUNCH_BOUNDS is not defined\n");
582 Kokkos::RangePolicy<ExSpace>
604 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
605 int p_vec = inds.
a + i_simd;
606 ph0_loc[inds.
s].
r[p_vec] = ptl_loc[inds.
s].
ph.
r[p_vec];
607 ph0_loc[inds.
s].
z[p_vec] = ptl_loc[inds.
s].
ph.
z[p_vec];
608 ph0_loc[inds.
s].
phi[p_vec] = ptl_loc[inds.
s].
ph.
phi[p_vec];
609 ph0_loc[inds.
s].
rho[p_vec] = ptl_loc[inds.
s].
ph.
rho[p_vec];
610 ph0_loc[inds.
s].
w1[p_vec] = ptl_loc[inds.
s].
ph.
w1[p_vec];
611 ph0_loc[inds.
s].
w2[p_vec] = ptl_loc[inds.
s].
ph.
w2[p_vec];
709 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
710 int p_vec = inds.
a + i_simd;
711 part_one.
ph.
r[i_simd] = ph0_loc[inds.
s].
r[p_vec];
712 part_one.
ph.
z[i_simd] = ph0_loc[inds.
s].
z[p_vec];
713 part_one.
ph.
phi[i_simd] = ph0_loc[inds.
s].
phi[p_vec];
714 part_one.
ph.
rho[i_simd] = ph0_loc[inds.
s].
rho[p_vec];
715 part_one.
ph.
w1[i_simd] = ph0_loc[inds.
s].
w1[p_vec];
716 part_one.
ph.
w2[i_simd] = ph0_loc[inds.
s].
w2[p_vec];
722 long long int tmp_n_ptl =
n_ptl;
723 long long int out_n_ptl = 0;
724 MPI_Allreduce(&tmp_n_ptl, &out_n_ptl, 1, MPI_LONG_LONG_INT, MPI_SUM,
SML_COMM_WORLD);
727 return (
long long int)(
n_ptl);
733 int tmp_n_ptl =
n_ptl;
735 MPI_Allreduce(&tmp_n_ptl, &out_n_ptl, 1, MPI_INT, MPI_MAX,
SML_COMM_WORLD);
784 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
785 not_in_triangle[i_simd] = !grid_wts0.is_valid(i_simd);
791 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
792 if(!grid_wts0.is_valid(i_simd))
continue;
794 nearest_node[i_simd]=grid_wts0.node[i_simd] - pol_decomp.
node_offset;
795 not_in_poloidal_domain[i_simd] = (nearest_node[i_simd]<0 || nearest_node[i_simd]>=pol_decomp.
nnodes);
797 double temp_ev_norm = not_in_poloidal_domain[i_simd] ?
f0.fg_temp_ev(0) :
f0.fg_temp_ev(nearest_node[i_simd]);
800 const double& B = bmag[i_simd];
818 int ibase = i_item*SIMD_SIZE;
819 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
820 int i = ibase + i_simd;
KOKKOS_INLINE_FUNCTION double thermal_velocity(double mass, double temp_ev)
Definition: basic_physics.hpp:75
KOKKOS_INLINE_FUNCTION double normalized_v_para(double c_m, double mass, double B, double temp_ev, double rho)
Definition: basic_physics.hpp:97
KOKKOS_INLINE_FUNCTION double normalized_sqrt_mu(double B, double temp_ev, double mu)
Definition: basic_physics.hpp:107
int nnodes
Number of nodes belonging to this MPI rank.
Definition: domain_decomposition.hpp:96
int node_offset
Offset of first mesh node belonging to this MPI rank.
Definition: domain_decomposition.hpp:95
Definition: profile.hpp:171
KOKKOS_INLINE_FUNCTION void wedge_modulo_phi(Simd< double > &phi_mod) const
Definition: grid.tpp:100
KOKKOS_INLINE_FUNCTION void get_grid_weights(const MagneticField< Device > &magnetic_field, const SimdVector &v, const Simd< double > &psi, SimdVector2D &xff, SimdGridWeights< Order::One, PIT > &grid_wts) const
Definition: grid.tpp:32
Definition: gyro_avg_mat.hpp:18
Definition: magnetic_field.hpp:12
Definition: NamelistReader.hpp:199
Definition: particles.hpp:248
Definition: species.hpp:63
int n_backup_particles
Definition: species.hpp:114
void read_ptl_checkpoint_files(const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream, std::string sp_name, bool n_ranks_is_same, int version)
Definition: species.cpp:671
Eq::Profile< Device > eq_fg_temp
Definition: species.hpp:129
void read_f0_checkpoint_files(const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream, std::string sp_name)
Definition: species.cpp:766
Eq::Profile< Device > eq_den
Definition: species.hpp:125
double c2_2m
c2/2m
Definition: species.hpp:75
void copy_phase0_to_device_if_not_resident()
Definition: species.hpp:620
Particles::Array< PhaseDataTypes, Device > phase0_d
Definition: species.hpp:109
void restore_particles_from_backup()
Definition: species.hpp:653
void resize_device_particles(int new_n_ptl)
Definition: species.hpp:298
int nonadiabatic_idx
Index of species skipping adiabatic species (for compatibility with fortran arrays)
Definition: species.hpp:69
bool backup_particles_on_device
Definition: species.hpp:115
int get_max_n_ptl()
Definition: species.hpp:731
double c_m
c/m
Definition: species.hpp:74
long long int get_max_gid() const
Definition: species.cpp:573
View< int *, CLayout, Device > tr_save
Definition: species.hpp:118
KOKKOS_INLINE_FUNCTION VecPhase * ph0() const
Definition: species.hpp:595
KOKKOS_INLINE_FUNCTION double get_f0_fg_unit_velocity_lnode_h(int inode) const
Definition: species.hpp:769
int ncycles
Number of subcycles.
Definition: species.hpp:87
void resize_host_particles_to_match_device()
Definition: species.hpp:260
Particles::Array< ParticleDataTypes, Device > particles_d
Particles on device.
Definition: species.hpp:95
void restore_backup_SoA(Particles::Array< ParticleDataTypes, Device > &backup_SoA, int offset, int n) const
Definition: species.hpp:457
int collision_grid_index
Which collision grid to use.
Definition: species.hpp:122
bool particles_are_backed_up
Whether particles are currently backed up.
Definition: species.hpp:105
Species(int idx_in, int nonadiabatic_idx_in, bool is_electron_in, bool is_adiabatic_in, KinType kintype_in, double mass_in, double charge_in, double charge_eu_in, int ncycles_in)
Definition: species.cpp:11
int idx
Index in all_species.
Definition: species.hpp:66
int n_ptl
Number of particles.
Definition: species.hpp:91
void save_backup_particles()
Definition: species.hpp:627
void set_buffer_particles_d()
Definition: species.hpp:370
KOKKOS_INLINE_FUNCTION double get_f0_eq_thermal_velocity(int inode) const
Definition: species.hpp:753
Particles::Array< ParticleDataTypes, HostType > backup_particles
Copy of particles to be restored for RK2.
Definition: species.hpp:112
double charge_eu
Particle charge in eu.
Definition: species.hpp:73
Eq::Profile< Device > eq_flow
Definition: species.hpp:126
Eq::Profile< Device > eq_mk_den
Definition: species.hpp:134
Species(SpeciesType sp_type, int n_ptl)
Definition: species.hpp:149
bool particles_resident_on_device
Whether the particles can reside on device.
Definition: species.hpp:99
MarkerType marker_type
Marker type: reduced delta-f, total-f, full-f, or none (placeholder for adiabatic species)
Definition: species.hpp:77
void copy_to_phase0(Species< Device > &species)
Definition: species.hpp:599
double charge
Particle charge.
Definition: species.hpp:72
int eq_flow_type
Definition: species.hpp:127
Eq::Profile< Device > eq_fg_flow
Definition: species.hpp:130
GyroAverageMatrices< Device > gyro_avg_matrices
Definition: species.hpp:139
bool maxwellian_init
whether initial distribution is maxwellian
Definition: species.hpp:85
KOKKOS_INLINE_FUNCTION double get_f0_eq_thermal_velocity_lnode_h(int inode) const
Definition: species.hpp:765
int eq_fg_flow_type
Definition: species.hpp:131
KOKKOS_INLINE_FUNCTION void restore_phase_from_phase0(const AoSoAIndices< Device > &inds, SimdParticles &part_one) const
Definition: species.hpp:707
int ncycles_between_sorts
Number of subcycles between sorts.
Definition: species.hpp:88
int minimum_ptl_reservation
The minimum reservation size for particles.
Definition: species.hpp:90
bool owns_particles_d
Whether the species owns the device particle allocation right now.
Definition: species.hpp:97
double mass
Particle mass.
Definition: species.hpp:71
RKRestorationMethod RK_restoration_method
Currently, electrons must use first method and ions must use second.
Definition: species.hpp:103
KOKKOS_INLINE_FUNCTION double eq_flow_ms(const MagneticField< DeviceType > &magnetic_field, double psi_in, double r, double z, double bphi_over_b) const
Definition: species.hpp:807
KOKKOS_INLINE_FUNCTION void get_tr_save(int i_item, Simd< int > &itr) const
Definition: species.hpp:817
KOKKOS_INLINE_FUNCTION VecParticles * ptl() const
Definition: species.hpp:591
Eq::Profile< Device > eq_mk_temp
Definition: species.hpp:133
LaunchBounds
Definition: species.hpp:412
void copy_particles_to_device_if_not_resident()
Definition: species.hpp:353
void copy_particles_from_device_if_not_resident()
Definition: species.hpp:359
bool is_adiabatic
Whether this species is adiabatic.
Definition: species.hpp:68
bool stream_particles
Whether to stream particles between host and device if possible.
Definition: species.hpp:100
void for_particle_range(int begin_idx, int end_idx, const std::string label, F lambda_func) const
Definition: species.hpp:490
KOKKOS_INLINE_FUNCTION void get_particle_velocity_and_nearest_node(const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const DomainDecomposition< DeviceType > &pol_decomp, SimdParticles &part, Simd< double > &smu, Simd< double > &vp, Simd< int > &nearest_node, Simd< bool > ¬_in_triangle, Simd< bool > ¬_in_poloidal_domain) const
Definition: species.hpp:774
Particles::Array< ParticleDataTypes, HostType > particles
Particles.
Definition: species.hpp:92
long long int get_total_n_ptl()
Definition: species.hpp:720
static int get_initial_n_ptl(NLReader::NamelistReader &nlr, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, int species_idx, bool verbose)
Definition: species.cpp:100
void resize_device_particles()
Definition: species.hpp:283
void copy_particles_to_device()
Definition: species.hpp:312
void for_all_particles(const std::string label, F lambda_func) const
Definition: species.hpp:423
KOKKOS_INLINE_FUNCTION double get_f0_eq_thermal_velocity_lnode(int inode) const
Definition: species.hpp:759
void copy_particles_from_device_if_resident()
Definition: species.hpp:347
void back_up_SoA(Particles::Array< ParticleDataTypes, Device > &backup_SoA, int offset, int n) const
Definition: species.hpp:428
void update_decomposed_f0_calculations(const DomainDecomposition< DeviceType > &pol_decomp, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const VelocityGrid &vgrid)
Definition: species.cpp:434
KOKKOS_INLINE_FUNCTION double get_fg_gyro_radius(int inode, double smu_n, double bfield) const
Definition: species.hpp:746
void clear_backup_phase()
Definition: species.hpp:700
Distribution< Device > f0
Species distribution in velocity space on local mesh nodes.
Definition: species.hpp:120
Eq::Profile< Device > eq_mk_flow
Definition: species.hpp:135
void move_phase0_from_device_if_not_resident()
Definition: species.hpp:691
static std::vector< MemoryPrediction > estimate_memory_usage(NLReader::NamelistReader &nlr, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, int species_idx)
Definition: species.cpp:45
void set_buffer_phase0_d()
Definition: species.hpp:399
WeightEvoEq weight_evo_eq
Definition: species.hpp:79
bool phase0_is_stored() const
Definition: species.hpp:616
KinType kintype
Whether the species is gyrokinetic or drift kinetic.
Definition: species.hpp:70
FAnalyticShape f_analytic_shape
f_analytic_shape shape: Maxwellian, SlowingDown or None
Definition: species.hpp:78
Eq::Profile< Device > eq_temp
Definition: species.hpp:124
bool is_electron
Whether this species is the electrons.
Definition: species.hpp:67
void write_f0_checkpoint_files(const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream, std::string sp_name)
Definition: species.cpp:730
void initialize_global_f0_arrays(const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field)
Definition: species.cpp:500
Species(int n_ptl_in)
Definition: species.hpp:185
void for_all_particles(const std::string label, F lambda_func, const PtlMvmt mvmt, LaunchBounds launch_bounds=LaunchBounds::Default)
Definition: species.hpp:541
void unassign_host_particles()
Definition: species.hpp:277
Particles::Array< PhaseDataTypes, HostType > phase0
Definition: species.hpp:108
void copy_particles_from_device()
Definition: species.hpp:328
void copy_particles_to_device_if_resident()
Definition: species.hpp:341
Particles::Array< ParticleDataTypes, Device > backup_particles_d
Copy of particles to be restored for RK2.
Definition: species.hpp:113
void resize_particles(int new_n_ptl)
Definition: species.hpp:240
bool dynamic_f0
Whether f0 can evolve in time.
Definition: species.hpp:84
int eq_mk_flow_type
Definition: species.hpp:136
void get_ptl_write_total_and_offsets(const DomainDecomposition< DeviceType > &pol_decomp, long long int &inum_total, long long int &ioff) const
Definition: species.cpp:596
void write_ptl_checkpoint_files(const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream, std::string sp_name)
Definition: species.cpp:621
void read_initial_distribution(NLReader::NamelistReader &nlr, const DomainDecomposition< DeviceType > &pol_decomp)
Definition: species.cpp:803
Definition: xgc_io.hpp:24
constexpr double EV_2_J
Conversion rate ev to J.
Definition: constants.hpp:5
constexpr double UNIT_CHARGE
Charge of an electron (C)
Definition: constants.hpp:4
constexpr double PROTON_MASS
Definition: constants.hpp:7
void exit_XGC(std::string msg)
Definition: globals.hpp:38
@ PTL_NPHASE
Definition: globals.hpp:235
FAnalyticShape
Definition: globals.hpp:139
SpeciesType
Definition: globals.hpp:106
@ ELECTRON
Definition: globals.hpp:107
KOKKOS_INLINE_FUNCTION int divide_and_round_up(int a, int b)
Definition: globals.hpp:249
WeightEvoEq
Definition: globals.hpp:144
KinType
Definition: globals.hpp:111
@ GyroKin
Definition: globals.hpp:113
@ DriftKin
Definition: globals.hpp:112
@ PTL_NCONST
Definition: globals.hpp:245
MarkerType
Definition: globals.hpp:133
int SML_COMM_RANK
Definition: my_mpi.cpp:5
MPI_Comm SML_COMM_WORLD
Definition: my_mpi.cpp:4
void deep_copy(const Array< DataType, Device > &dest, const Array< DataType, Device2 > &src)
Definition: particles.hpp:310
Option
Definition: streamed_parallel_for.hpp:13
@ NoReturn
Definition: streamed_parallel_for.hpp:16
@ NoSend
Definition: streamed_parallel_for.hpp:14
@ Normal
Definition: streamed_parallel_for.hpp:15
void parallel_for(const std::string name, int n_ptl, Function func, Option option, HostAoSoA aosoa_h, DeviceAoSoA aosoa_d)
Definition: streamed_parallel_for.hpp:252
Definition: magnetic_field.F90:1
logical false
Definition: module.F90:103
logical true
Definition: module.F90:103
long long int add_vec_buffer(T n_ptl)
Definition: particles.hpp:190
int p_range< DeviceType >(int num_particle)
Definition: particles.hpp:182
constexpr static const Kokkos::Experimental::WorkItemProperty::HintLightWeight_t Async
Definition: space_settings.hpp:83
void set_min_max_num(int isp, int n_ptl)
bool default_residence_option()
Definition: species.hpp:32
RKRestorationMethod
Definition: species.hpp:56
@ RestoreOnOriginalRank
Definition: species.hpp:57
@ BringOldPhaseToNewRank
Definition: species.hpp:58
bool default_streaming_option()
Definition: species.hpp:25
void set_spall_num_and_ptr(int idx, int n_ptl, int n_vecs, VecParticles *ptl)
void adjust_n_ptl_for_core_ptl(int *n_ptl)
Definition: particles.hpp:143
int s
The index in the outer array of the AoSoA.
Definition: particles.hpp:144
int a
The index in the inner array of the AoSoA.
Definition: particles.hpp:145
Definition: distribution.hpp:11
Definition: species.hpp:36
SendOpt send_opt
Definition: species.hpp:50
ReturnOpt return_opt
Definition: species.hpp:51
SendOpt
Definition: species.hpp:38
@ NoSend
Definition: species.hpp:39
@ SendIfNotResident
Definition: species.hpp:41
@ Send
Definition: species.hpp:40
PtlMvmt(SendOpt send_opt, ReturnOpt return_opt)
Definition: species.hpp:53
ReturnOpt
Definition: species.hpp:44
@ ReturnIfNotResident
Definition: species.hpp:47
@ Return
Definition: species.hpp:46
@ NoReturn
Definition: species.hpp:45
Simd< double > mu
m*v_perp^2/(2B)
Definition: particles.hpp:41
Definition: grid_weights.hpp:47
Definition: particles.hpp:50
SimdPhase ph
Definition: particles.hpp:51
SimdConstants ct
Definition: particles.hpp:52
Simd< double > w2
(1 - background distribution)/f0
Definition: particles.hpp:12
Simd< double > w1
delta-f weight
Definition: particles.hpp:11
Simd< double > rho
m*v_para/(q*B) - A_para^h/B (should it be plus or minus?)
Definition: particles.hpp:10
Simd< double > z
Cylindrical coordinate Z.
Definition: particles.hpp:8
Simd< double > r
Cylindrical coordinate R (major radial direction)
Definition: particles.hpp:7
Simd< double > phi
Cylindrical coordinate phi (toroidal direction)
Definition: particles.hpp:9
KOKKOS_INLINE_FUNCTION SimdVector & v()
Definition: particles.hpp:28
Definition: particles.hpp:104
VecPhase ph
Definition: particles.hpp:105
Definition: particles.hpp:84
double r[VEC_LEN]
Definition: particles.hpp:85
double w2[VEC_LEN]
Definition: particles.hpp:90
double phi[VEC_LEN]
Definition: particles.hpp:87
double rho[VEC_LEN]
Definition: particles.hpp:88
double w1[VEC_LEN]
Definition: particles.hpp:89
double z[VEC_LEN]
Definition: particles.hpp:86
Definition: velocity_grid.hpp:8
#define TIMER(N, F)
Definition: timer_macro.hpp:24