ImpactX
Public Member Functions | Private Attributes | List of all members
impactx::initialization::InitSingleParticleData< T_Distribution > Struct Template Reference

#include <InitDistribution.H>

Public Member Functions

 InitSingleParticleData (T_Distribution distribution, amrex::ParticleReal *AMREX_RESTRICT part_x, amrex::ParticleReal *AMREX_RESTRICT part_y, amrex::ParticleReal *AMREX_RESTRICT part_t, amrex::ParticleReal *AMREX_RESTRICT part_px, amrex::ParticleReal *AMREX_RESTRICT part_py, amrex::ParticleReal *AMREX_RESTRICT part_pt)
 
 InitSingleParticleData ()=delete
 
 InitSingleParticleData (InitSingleParticleData const &)=default
 
 InitSingleParticleData (InitSingleParticleData &&)=default
 
 ~InitSingleParticleData ()=default
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void operator() (amrex::Long i, amrex::RandomEngine const &engine) const
 

Private Attributes

T_Distribution const m_distribution
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_x
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_y
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_t
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_px
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_py
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_pt
 

Detailed Description

template<typename T_Distribution>
struct impactx::initialization::InitSingleParticleData< T_Distribution >

Initialize a single particle's data using the given distribution

Note: we usually would just write a C++ lambda below in ParallelFor. But, due to restrictions in NVCC as of 11.5, we cannot write a lambda in a lambda as we also std::visit the element types of our lattice elements list. error #3206-D: An extended device lambda cannot be defined inside a generic lambda expression("operator()"). Thus, we fall back to writing a C++ functor here, instead of nesting two lambdas.

Nvidia bug report: 3458976 Minimal demonstrator: https://cuda.godbolt.org/z/39e4q53Ye

Template Parameters
T_DistributionThis can be a
See also
Gaussian,
Waterbag,
Kurth6D,
Thermal etc.

Constructor & Destructor Documentation

◆ InitSingleParticleData() [1/4]

template<typename T_Distribution >
impactx::initialization::InitSingleParticleData< T_Distribution >::InitSingleParticleData ( T_Distribution  distribution,
amrex::ParticleReal *AMREX_RESTRICT  part_x,
amrex::ParticleReal *AMREX_RESTRICT  part_y,
amrex::ParticleReal *AMREX_RESTRICT  part_t,
amrex::ParticleReal *AMREX_RESTRICT  part_px,
amrex::ParticleReal *AMREX_RESTRICT  part_py,
amrex::ParticleReal *AMREX_RESTRICT  part_pt 
)
inline

Constructor taking in pointers to particle data

Parameters
distributionthe type of distribution function to call
part_xthe array to the particle position (x)
part_ythe array to the particle position (y)
part_tthe array to the particle position (t)
part_pxthe array to the particle momentum (x)
part_pythe array to the particle momentum (y)
part_ptthe array to the particle momentum (t)

◆ InitSingleParticleData() [2/4]

template<typename T_Distribution >
impactx::initialization::InitSingleParticleData< T_Distribution >::InitSingleParticleData ( )
delete

◆ InitSingleParticleData() [3/4]

template<typename T_Distribution >
impactx::initialization::InitSingleParticleData< T_Distribution >::InitSingleParticleData ( InitSingleParticleData< T_Distribution > const &  )
default

◆ InitSingleParticleData() [4/4]

template<typename T_Distribution >
impactx::initialization::InitSingleParticleData< T_Distribution >::InitSingleParticleData ( InitSingleParticleData< T_Distribution > &&  )
default

◆ ~InitSingleParticleData()

template<typename T_Distribution >
impactx::initialization::InitSingleParticleData< T_Distribution >::~InitSingleParticleData ( )
default

Member Function Documentation

◆ operator()()

template<typename T_Distribution >
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void impactx::initialization::InitSingleParticleData< T_Distribution >::operator() ( amrex::Long  i,
amrex::RandomEngine const &  engine 
) const
inline

Initialize the data for a single particle

Parameters
iparticle index in the current box
enginea random number engine (with associated state)

Member Data Documentation

◆ m_distribution

template<typename T_Distribution >
T_Distribution const impactx::initialization::InitSingleParticleData< T_Distribution >::m_distribution
private

◆ m_part_pt

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_pt
private

◆ m_part_px

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_px
private

◆ m_part_py

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_py
private

◆ m_part_t

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_t
private

◆ m_part_x

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_x
private

◆ m_part_y

template<typename T_Distribution >
amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleData< T_Distribution >::m_part_y
private

The documentation for this struct was generated from the following file: