ImpactX
Loading...
Searching...
No Matches
impactx::initialization::InitSingleParticleSpin Struct Reference

#include <InitDistribution.H>

Public Member Functions

 InitSingleParticleSpin (distribution::SpinvMF spinv, amrex::ParticleReal *AMREX_RESTRICT part_sx, amrex::ParticleReal *AMREX_RESTRICT part_sy, amrex::ParticleReal *AMREX_RESTRICT part_sz)
 
 InitSingleParticleSpin ()=delete
 
 InitSingleParticleSpin (InitSingleParticleSpin const &)=default
 
 InitSingleParticleSpin (InitSingleParticleSpin &&)=default
 
 ~InitSingleParticleSpin ()=default
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void operator() (amrex::Long i, amrex::RandomEngine const &engine) const
 

Private Attributes

distribution::SpinvMF const m_spinv
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_sx
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_sy
 
amrex::ParticleReal *const AMREX_RESTRICT m_part_sz
 

Detailed Description

Initialize a single particle's spin using the SpinvMF distribution

Note: we usually would just write a C++ lambda below in ParallelForRNG. 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

Constructor & Destructor Documentation

◆ InitSingleParticleSpin() [1/4]

impactx::initialization::InitSingleParticleSpin::InitSingleParticleSpin ( distribution::SpinvMF spinv,
amrex::ParticleReal *AMREX_RESTRICT part_sx,
amrex::ParticleReal *AMREX_RESTRICT part_sy,
amrex::ParticleReal *AMREX_RESTRICT part_sz )
inline

Constructor taking in pointers to particle data

Parameters
spinvspin distribution function to call
part_sxthe array to the particle spin in x (sx)
part_sythe array to the particle spin in y (sy)
part_szthe array to the particle spin in z (sz)

◆ InitSingleParticleSpin() [2/4]

impactx::initialization::InitSingleParticleSpin::InitSingleParticleSpin ( )
delete

◆ InitSingleParticleSpin() [3/4]

impactx::initialization::InitSingleParticleSpin::InitSingleParticleSpin ( InitSingleParticleSpin const & )
default

◆ InitSingleParticleSpin() [4/4]

impactx::initialization::InitSingleParticleSpin::InitSingleParticleSpin ( InitSingleParticleSpin && )
default

◆ ~InitSingleParticleSpin()

impactx::initialization::InitSingleParticleSpin::~InitSingleParticleSpin ( )
default

Member Function Documentation

◆ operator()()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE void impactx::initialization::InitSingleParticleSpin::operator() ( amrex::Long i,
amrex::RandomEngine const & engine ) const
inline

Initialize the spin for a single particle

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

Member Data Documentation

◆ m_part_sx

amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleSpin::m_part_sx
private

◆ m_part_sy

amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleSpin::m_part_sy
private

◆ m_part_sz

amrex::ParticleReal* const AMREX_RESTRICT impactx::initialization::InitSingleParticleSpin::m_part_sz
private

◆ m_spinv

distribution::SpinvMF const impactx::initialization::InitSingleParticleSpin::m_spinv
private

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