XGCa
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Public Types | Public Member Functions | Public Attributes | List of all members
Species< Device > Class Template Reference

#include <species.hpp>

Public Types

enum  LaunchBounds { LaunchBounds::Default, LaunchBounds::Custom }
 

Public Member Functions

 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, bool is_deltaf_in, int ncycles_in)
 
 Species (NLReader::NamelistReader &nlr, int idx_in, int nonadiabatic_idx_in)
 
 Species (SpeciesType sp_type, int n_ptl)
 
 Species (int n_ptl_in)
 
void resize_particles (int new_n_ptl)
 
void resize_host_particles_to_match_device ()
 
void unassign_host_particles ()
 
void resize_device_particles ()
 
void resize_device_particles (int new_n_ptl)
 
void copy_particles_to_device ()
 
void copy_particles_from_device ()
 
void copy_particles_to_device_if_resident ()
 
void copy_particles_from_device_if_resident ()
 
void copy_particles_to_device_if_not_resident ()
 
void copy_particles_from_device_if_not_resident ()
 
void set_buffer_particles_d ()
 
void set_buffer_phase0_d ()
 
template<typename F >
void for_all_particles (const std::string label, F lambda_func) const
 
template<typename F >
void for_all_particles (const std::string label, F lambda_func, const PtlMvmt mvmt, LaunchBounds launch_bounds=LaunchBounds::Default)
 
KOKKOS_INLINE_FUNCTION
VecParticles
ptl () const
 
KOKKOS_INLINE_FUNCTION VecPhaseph0 () const
 
void copy_to_phase0 (Species< Device > &species)
 
void save_backup_particles ()
 
void restore_particles_from_backup ()
 
KOKKOS_INLINE_FUNCTION void restore_phase_from_phase0 (const AoSoAIndices< Device > &inds, SimdParticles &part_one) const
 

Public Attributes

int idx
 Index in all_species. More...
 
bool is_electron
 Whether this species is the electrons. More...
 
bool is_adiabatic
 Whether this species is adiabatic. More...
 
int nonadiabatic_idx
 Index of species skipping adiabatic species (for compatibility with fortran arrays) More...
 
KinType kintype
 Whether the species is gyrokinetic or drift kinetic. More...
 
double mass
 Particle mass. More...
 
double charge
 Particle charge. More...
 
double charge_eu
 Particle charge in eu. More...
 
double c_m
 c/m More...
 
double c2_2m
 c2/2m More...
 
bool is_deltaf
 Whether this species is deltaf. More...
 
int ncycles
 Number of subcycles. More...
 
int ncycles_between_sorts
 Number of subcycles between sorts. More...
 
int n_ptl
 Number of particles. More...
 
Cabana::AoSoA
< ParticleDataTypes, HostType,
VEC_LEN > 
particles
 Particles. More...
 
Cabana::AoSoA
< ParticleDataTypes, Device,
VEC_LEN > 
particles_d
 Particles on device. More...
 
bool owns_particles_d
 Whether the species owns the device particle allocation right now. More...
 
bool particles_resident_on_device
 Whether the particles can reside on device. More...
 
bool stream_particles
 Whether to stream particles between host and device if possible. More...
 
RKRestorationMethod RK_restoration_method
 Currently, electrons must use first method and ions must use second. More...
 
bool particles_are_backed_up
 Whether particles are currently backed up. More...
 
Cabana::AoSoA< PhaseDataTypes,
HostType, VEC_LEN > 
phase0
 
Cabana::AoSoA< PhaseDataTypes,
Device, VEC_LEN > 
phase0_d
 
Cabana::AoSoA
< ParticleDataTypes, HostType,
VEC_LEN > 
backup_particles
 Copy of particles to be restored for RK2. More...
 
int n_backup_particles
 
Distribution< Device > f0
 Species distribution in velocity space on local mesh nodes. More...
 
Eq::Profile< Device > eq_temp
 
Eq::Profile< Device > eq_den
 
Eq::Profile< Device > eq_flow
 

Member Enumeration Documentation

template<class Device>
enum Species::LaunchBounds
strong
Enumerator
Default 
Custom 

Constructor & Destructor Documentation

template<class Device >
Species< Device >::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,
bool  is_deltaf_in,
int  ncycles_in 
)

Constructor for species class used in collisions kernel

template<class Device >
Species< Device >::Species ( NLReader::NamelistReader nlr,
int  idx_in,
int  nonadiabatic_idx_in 
)

Constructor for species class

Here is the call graph for this function:

template<class Device>
Species< Device >::Species ( SpeciesType  sp_type,
int  n_ptl 
)
inline
template<class Device>
Species< Device >::Species ( int  n_ptl_in)
inline

Here is the call graph for this function:

Member Function Documentation

template<class Device>
void Species< Device >::copy_particles_from_device ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_particles_from_device_if_not_resident ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_particles_from_device_if_resident ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_particles_to_device ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_particles_to_device_if_not_resident ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_particles_to_device_if_resident ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::copy_to_phase0 ( Species< Device > &  species)
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
template<typename F >
void Species< Device >::for_all_particles ( const std::string  label,
lambda_func 
) const
inline

Loops over particles and calls a parallel_for, with no particle movement

Parameters
[in]labelis the label of the parallel_for used for debugging
[in]lambda_funcis the lambda function. Must be copy [=] not by reference

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
template<typename F >
void Species< Device >::for_all_particles ( const std::string  label,
lambda_func,
const PtlMvmt  mvmt,
LaunchBounds  launch_bounds = LaunchBounds::Default 
)
inline

Loops over particles and calls a parallel_for, with particle being moved where requested

Parameters
[in]labelis the label of the parallel_for used for debugging
[in]lambda_funcis the lambda function. Must be copy [=] not by reference
[in]mvmtspecifies whether particles need to be sent to device or host
[in]launch_boundsspecifies whether to use default launch bounds or custom

Here is the call graph for this function:

template<class Device>
KOKKOS_INLINE_FUNCTION VecPhase* Species< Device >::ph0 ( ) const
inline

Here is the caller graph for this function:

template<class Device>
KOKKOS_INLINE_FUNCTION VecParticles* Species< Device >::ptl ( ) const
inline

Here is the caller graph for this function:

template<class Device>
void Species< Device >::resize_device_particles ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::resize_device_particles ( int  new_n_ptl)
inline

Here is the call graph for this function:

template<class Device>
void Species< Device >::resize_host_particles_to_match_device ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::resize_particles ( int  new_n_ptl)
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::restore_particles_from_backup ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
KOKKOS_INLINE_FUNCTION void Species< Device >::restore_phase_from_phase0 ( const AoSoAIndices< Device > &  inds,
SimdParticles part_one 
) const
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::save_backup_particles ( )
inline

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::set_buffer_particles_d ( )
inline

Fills the remainder of the last AoSoA vector with realistic-looking particles (clones of the final particle). Since gid is set to -1, they will basically act as tracers in the kernel. Ideally garbage data in this buffer doesn't affect anything, but better to be safe here

Returns
void

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::set_buffer_phase0_d ( )
inline

Fills the remainder of the last AoSoA phase0 vector with realistic-looking particles (clones of the final particle). Since gid is set to -1, they will basically act as tracers in the kernel. Ideally garbage data in this buffer doesn't affect anything, but better to be safe here

Returns
void

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device>
void Species< Device >::unassign_host_particles ( )
inline

Here is the caller graph for this function:

Member Data Documentation

template<class Device>
Cabana::AoSoA<ParticleDataTypes,HostType,VEC_LEN> Species< Device >::backup_particles

Copy of particles to be restored for RK2.

template<class Device>
double Species< Device >::c2_2m

c2/2m

template<class Device>
double Species< Device >::c_m

c/m

template<class Device>
double Species< Device >::charge

Particle charge.

template<class Device>
double Species< Device >::charge_eu

Particle charge in eu.

template<class Device>
Eq::Profile<Device> Species< Device >::eq_den
template<class Device>
Eq::Profile<Device> Species< Device >::eq_flow
template<class Device>
Eq::Profile<Device> Species< Device >::eq_temp
template<class Device>
Distribution<Device> Species< Device >::f0

Species distribution in velocity space on local mesh nodes.

template<class Device>
int Species< Device >::idx

Index in all_species.

template<class Device>
bool Species< Device >::is_adiabatic

Whether this species is adiabatic.

template<class Device>
bool Species< Device >::is_deltaf

Whether this species is deltaf.

template<class Device>
bool Species< Device >::is_electron

Whether this species is the electrons.

template<class Device>
KinType Species< Device >::kintype

Whether the species is gyrokinetic or drift kinetic.

template<class Device>
double Species< Device >::mass

Particle mass.

template<class Device>
int Species< Device >::n_backup_particles
template<class Device>
int Species< Device >::n_ptl

Number of particles.

template<class Device>
int Species< Device >::ncycles

Number of subcycles.

template<class Device>
int Species< Device >::ncycles_between_sorts

Number of subcycles between sorts.

template<class Device>
int Species< Device >::nonadiabatic_idx

Index of species skipping adiabatic species (for compatibility with fortran arrays)

template<class Device>
bool Species< Device >::owns_particles_d

Whether the species owns the device particle allocation right now.

template<class Device>
Cabana::AoSoA<ParticleDataTypes,HostType,VEC_LEN> Species< Device >::particles

Particles.

template<class Device>
bool Species< Device >::particles_are_backed_up

Whether particles are currently backed up.

template<class Device>
Cabana::AoSoA<ParticleDataTypes,Device,VEC_LEN> Species< Device >::particles_d

Particles on device.

template<class Device>
bool Species< Device >::particles_resident_on_device

Whether the particles can reside on device.

template<class Device>
Cabana::AoSoA<PhaseDataTypes,HostType,VEC_LEN> Species< Device >::phase0
template<class Device>
Cabana::AoSoA<PhaseDataTypes,Device,VEC_LEN> Species< Device >::phase0_d
template<class Device>
RKRestorationMethod Species< Device >::RK_restoration_method

Currently, electrons must use first method and ions must use second.

Whether to restore particles on original rank, or to carry phase0 to new rank and restore there.

template<class Device>
bool Species< Device >::stream_particles

Whether to stream particles between host and device if possible.


The documentation for this class was generated from the following files: