7 extern "C" void f0_init_decomposed_ptrs(
double* f0_T_ev_cpp,
double* f0_fg_T_ev_cpp,
double* f0_inv_grid_vol_cpp,
double* f0_grid_vol_cpp,
8 double* f0_grid_vol_vonly_cpp,
double* f0_den_cpp,
10 extern "C" void f0_set_ptrs(
int nnode,
double* f0_delta_n_cpp,
double* f0_delta_u_cpp,
double* f0_delta_T_cpp);
43 View<double**,CLayout, HostType>
f0_den;
50 :
f0_T_ev(
"f0_T_ev", nsp, pol_decomp.nnodes),
51 f0_fg_T_ev(
"f0_fg_T_ev", nsp, pol_decomp.nnodes),
56 f0_den(
"f0_den", nsp, pol_decomp.nnodes),
57 f0_flow(
"f0_flow", nsp, pol_decomp.nnodes)
59 #ifndef NO_FORTRAN_MODULES
94 sp_names{
"e",
"i",
"i2",
"i3",
"i4",
"i5",
"i6"}
123 printf(
"ISP ERROR in for_all_nonadiabatic_sepcies: isp=%d",isp);
207 max_n_ptl = std::max(max_n_ptl,species.n_backup_particles);
210 max_n_ptl = std::max(max_n_ptl,species.n_ptl);
222 species.particles_d = Cabana::AoSoA<ParticleDataTypes,DeviceType,VEC_LEN>();
223 species.owns_particles_d = false;
254 #ifndef NO_FORTRAN_MODULES
268 template<
typename T_in,
typename T_out>
270 auto view_in_subview =
my_subview(view_in, isp);
271 view_out = T_out(view_in_subview.data(), view_in_subview.layout());
277 #ifndef NO_FORTRAN_MODULES
284 int f0_species_cnt=0;
324 all_species[isp].particles_d = Cabana::AoSoA<ParticleDataTypes,DeviceType,VEC_LEN>(
"particles_d", 0);
343 return axis_length / characteristic_velocity;
350 species.read_initial_distribution(nlr, pol_decomp);
int nnodes
Number of nodes belonging to this MPI rank.
Definition: domain_decomposition.hpp:92
int node_offset
Offset of first mesh node belonging to this MPI rank.
Definition: domain_decomposition.hpp:91
int nnode
Number of grid nodes.
Definition: grid.hpp:174
Definition: magnetic_field.hpp:12
Definition: NamelistReader.hpp:193
Definition: plasma.hpp:13
void remap_f0_f0g(const DomainDecomposition< DeviceType > &pol_decomp)
Definition: plasma.hpp:276
VGridDistribution< HostType > f0_f0g
Definition: plasma.hpp:29
View< double **, CLayout, HostType > f0_delta_n
Flux-surface averaged change of density.
Definition: plasma.hpp:78
void update_decomposed_f0_calculations(const DomainDecomposition< DeviceType > &pol_decomp, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const VelocityGrid &vgrid)
Definition: plasma.cpp:29
bool particles_d_has_owner
Whether a species owns the device particles allocation.
Definition: plasma.hpp:17
bool true_for_some_species(F func) const
Definition: plasma.hpp:176
DevicePtlOpt
Definition: plasma.hpp:99
@ NoDevicePtl
Definition: plasma.hpp:101
@ UseDevicePtl
Definition: plasma.hpp:100
bool true_for_all_species(F func) const
Definition: plasma.hpp:184
int nspecies
Number of species including electrons.
Definition: plasma.hpp:83
void validate_f0_checkpoint_file_dims(const XGC_IO_Stream &stream, const Grid< DeviceType > &grid, const VelocityGrid &vgrid)
Definition: plasma.cpp:133
bool electrons_are_reduced_deltaf() const
Definition: plasma.cpp:198
View< double **, CLayout, HostType > f0_delta_u
Flux-surface averaged change of parallel flow.
Definition: plasma.hpp:79
void for_all_nonadiabatic_species(F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:120
void write_checkpoint_files(const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream)
Definition: plasma.cpp:163
void deallocate_device_ptl()
Definition: plasma.hpp:219
View< double *, CLayout, HostType > spitzer_resistivity
Definition: plasma.hpp:81
DecomposedRecalculableF0Arrays decomposed_recalculable_f0_arrays
Contains f0 values that are poloidally decomposed but don't need to be transferred between ranks duri...
Definition: plasma.hpp:75
void read_initial_distribution_all(NLReader::NamelistReader &nlr, const DomainDecomposition< DeviceType > &pol_decomp)
Definition: plasma.hpp:346
void for_all_ions(F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:146
void for_one_species(int isp, F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:169
bool f0_grid() const
Definition: plasma.hpp:196
void read_checkpoint_files(const Grid< DeviceType > &grid, const VelocityGrid &vgrid, const DomainDecomposition< DeviceType > &pol_decomp, const XGC_IO_Stream &stream, const XGC_IO_Stream &f0_stream, bool n_ranks_is_same, int version)
Definition: plasma.cpp:177
bool species_share_particles_d_ownership
Whether to use the device particles sharing scheme.
Definition: plasma.hpp:16
double get_main_ion_toroidal_transit_time(const MagneticField< DeviceType > &magnetic_field) const
Definition: plasma.hpp:339
void for_electrons(F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:135
View< double *, CLayout, HostType > f0_node_cost
Definition: plasma.hpp:30
int particles_d_owner
Which species, if any, owns the device particles allocation.
Definition: plasma.hpp:18
void transfer_particles_d_ownership(int isp)
Definition: plasma.hpp:293
void initialize_spitzer_res()
Definition: plasma.cpp:64
View< double **, CLayout, HostType > f0_delta_T
Flux-surface averaged change of temperature.
Definition: plasma.hpp:80
void set_unmanaged_f0_species_view(const T_in &view_in, int isp, T_out &view_out)
Definition: plasma.hpp:269
std::vector< std::string > sp_names
Definition: plasma.hpp:86
static std::vector< MemoryPrediction > estimate_memory_usage(NLReader::NamelistReader &nlr, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp)
Definition: plasma.cpp:6
void for_all(ParticleType particle_type, F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:157
bool electrons_are_adiabatic() const
Definition: plasma.hpp:192
void manage_particle_ownership(int isp, DevicePtlOpt device_ptl_opt)
Definition: plasma.hpp:318
int largest_n_ptl(bool check_backup)
Definition: plasma.hpp:200
ParticleType
Definition: plasma.hpp:104
@ Ions
Definition: plasma.hpp:106
@ Electrons
Definition: plasma.hpp:105
std::vector< Species< DeviceType > > all_species
Every particle species in the simulation.
Definition: plasma.hpp:24
void init_global_f0_arrays(const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field)
Definition: plasma.hpp:243
void for_all_species(F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:111
Plasma()
Definition: plasma.hpp:89
int n_nonadiabatic_species
Number of nonadiabatic species.
Definition: plasma.hpp:84
double main_ion_characteristic_energy
Definition: plasma.hpp:20
Definition: species.hpp:75
int idx
Index in all_species.
Definition: species.hpp:78
bool maxwellian_init
whether initial distribution is maxwellian
Definition: species.hpp:97
bool owns_particles_d
Whether the species owns the device particle allocation right now.
Definition: species.hpp:109
bool is_adiabatic
Whether this species is adiabatic.
Definition: species.hpp:80
Distribution< Device > f0
Species distribution in velocity space on local mesh nodes.
Definition: species.hpp:132
bool is_electron
Whether this species is the electrons.
Definition: species.hpp:79
void initialize_global_f0_arrays(const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field)
Definition: species.cpp:500
bool dynamic_f0
Whether f0 can evolve in time.
Definition: species.hpp:96
double * data() const
Definition: vgrid_distribution.hpp:109
View< double ****, CLayout, Device > f
Definition: vgrid_distribution.hpp:23
Definition: xgc_io.hpp:24
constexpr double TWOPI
Definition: constants.hpp:10
@ ELECTRON
Definition: globals.hpp:84
@ MAIN_ION
Definition: globals.hpp:85
Kokkos::View< T *, Kokkos::LayoutRight, Device > my_subview(const Kokkos::View< T ****, Kokkos::LayoutRight, Device > &view, int i, int j, int k)
Definition: my_subview.hpp:8
Definition: magnetic_field.F90:1
integer f0_inode1
Definition: pol_decomp.F90:15
integer f0_inode2
Definition: pol_decomp.F90:15
logical false
Definition: module.F90:102
void f0_init_decomposed_ptrs(double *f0_T_ev_cpp, double *f0_fg_T_ev_cpp, double *f0_inv_grid_vol_cpp, double *f0_grid_vol_cpp, double *f0_grid_vol_vonly_cpp, double *f0_den_cpp, double *f0_flow_cpp)
void set_f0_f0g_ptr(int f0_inode1, int f0_inode2, double *f0_f0g_loc)
void f0_set_ptrs(int nnode, double *f0_delta_n_cpp, double *f0_delta_u_cpp, double *f0_delta_T_cpp)
bool default_residence_option()
Definition: species.hpp:35
Definition: plasma.hpp:36
View< double **, CLayout, HostType > f0_flow
Equilibrium flow at nodes.
Definition: plasma.hpp:44
View< double **, CLayout, HostType > f0_fg_vth_inv
thermal velocity from f_grid norm. temp. at nodes (to avoid sqrt ops)
Definition: plasma.hpp:39
View< double **, CLayout, HostType > f0_fg_T_ev
f_Grid normalization temperature at nodes
Definition: plasma.hpp:38
DecomposedRecalculableF0Arrays()
Definition: plasma.hpp:47
View< double **, CLayout, HostType > f0_den
Equilibrium density at nodes.
Definition: plasma.hpp:43
View< double **, CLayout, HostType > f0_grid_vol_vonly
Grid volume (v only) at nodes.
Definition: plasma.hpp:42
View< double **, CLayout, HostType > f0_T_ev
Equilibrium temperature at nodes.
Definition: plasma.hpp:37
DecomposedRecalculableF0Arrays(int nsp, const DomainDecomposition< DeviceType > &pol_decomp)
Definition: plasma.hpp:49
View< double **, CLayout, HostType > f0_grid_vol
Grid volume at nodes.
Definition: plasma.hpp:41
View< double **, CLayout, HostType > f0_inv_grid_vol
Inverse grid volume at nodes.
Definition: plasma.hpp:40
Definition: velocity_grid.hpp:8