7#ifndef WARPX_PARTICLES_COLLISION_IMPACT_IONIZATION_H_
8#define WARPX_PARTICLES_COLLISION_IMPACT_IONIZATION_H_
54 amrex::ParticleReal
const total_collision_prob,
55 amrex::ParticleReal
const nu_max,
71 template <
typename PData>
77 using namespace amrex;
84 const auto& p = ptd.getSuperParticle(i);
93 const ParticleReal ux = ptd.m_rdata[
PIdx::ux][i];
94 const ParticleReal uy = ptd.m_rdata[
PIdx::uy][i];
95 const ParticleReal uz = ptd.m_rdata[
PIdx::uz][i];
102 const ParticleReal sigma_E =
m_mcc_process.getCrossSection(
static_cast<amrex::ParticleReal
>(E_coll));
105 const ParticleReal u_coll2 = ux*ux + uy*uy + uz*uz;
106 const ParticleReal nu_i = n_a * sigma_E *
sqrt(u_coll2) /
m_nu_max;
109 return (
Random(engine) <= nu_i);
151 amrex::ParticleReal energy_cost,
double mass1, amrex::ParticleReal sqrt_kb_m,
170 template <
typename DstData,
typename SrcData>
173 int const i_src,
int const i_dst1,
int const i_dst2,
176 using namespace amrex;
180 const auto& p = src.getSuperParticle(i_src);
181 ParticleReal x, y, z;
190 auto& ux = src.m_rdata[
PIdx::ux][i_src];
191 auto& uy = src.m_rdata[
PIdx::uy][i_src];
192 auto& uz = src.m_rdata[
PIdx::uz][i_src];
195 auto& e_ux = dst1.m_rdata[
PIdx::ux][i_dst1];
196 auto& e_uy = dst1.m_rdata[
PIdx::uy][i_dst1];
197 auto& e_uz = dst1.m_rdata[
PIdx::uz][i_dst1];
198 auto& i_ux = dst2.m_rdata[
PIdx::ux][i_dst2];
199 auto& i_uy = dst2.m_rdata[
PIdx::uy][i_dst2];
200 auto& i_uz = dst2.m_rdata[
PIdx::uz][i_dst2];
207 const auto E_out =
static_cast<amrex::ParticleReal
>((E_coll -
m_energy_cost) / 2.0_prt * eV);
213 const amrex::ParticleReal up =
sqrt(E_out * (E_out + 2.0_prt*mc2) / c2) /
m_mass1;
220 i_ux = ion_vel_std *
RandomNormal(0_prt, 1.0_prt, engine);
221 i_uy = ion_vel_std *
RandomNormal(0_prt, 1.0_prt, engine);
222 i_uz = ion_vel_std *
RandomNormal(0_prt, 1.0_prt, engine);
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void get_particle_position(const WarpXParticleContainer::SuperParticleType &p, amrex::ParticleReal &x, amrex::ParticleReal &y, amrex::ParticleReal &z) noexcept
Extract the cartesian position coordinates of the particle p and store them in the variables x,...
Definition GetAndSetPosition.H:27
ImpactIonizationFilterFunc(ScatteringProcess const &mcc_process, double const mass, amrex::ParticleReal const total_collision_prob, amrex::ParticleReal const nu_max, amrex::ParserExecutor< 4 > const &n_a_func, amrex::Real t)
Constructor of the ImpactIonizationFilterFunc functor.
Definition ImpactIonization.H:51
double m_mass
Definition ImpactIonization.H:114
amrex::ParticleReal m_nu_max
Definition ImpactIonization.H:116
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool operator()(const PData &ptd, int const i, amrex::RandomEngine const &engine) const noexcept
Functor call. This method determines if a given (electron) particle should undergo an ionization coll...
Definition ImpactIonization.H:73
amrex::ParticleReal m_total_collision_prob
Definition ImpactIonization.H:115
amrex::ParserExecutor< 4 > m_n_a_func
Definition ImpactIonization.H:117
amrex::Real m_t
Definition ImpactIonization.H:118
ScatteringProcess::Executor m_mcc_process
Definition ImpactIonization.H:113
Definition ScatteringProcess.H:31
AMREX_GPU_HOST_DEVICE AMREX_INLINE T KineticEnergy(const amrex::ParticleReal ux, const amrex::ParticleReal uy, const amrex::ParticleReal uz, const amrex::ParticleReal mass)
Computes the kinetic energy of a particle. This method should not be used with photons.
Definition KineticEnergy.H:36
AMREX_GPU_HOST_DEVICE AMREX_INLINE void RandomizeVelocity(amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, const amrex::ParticleReal vp, amrex::RandomEngine const &engine)
Function to perform scattering of a particle that results in a random velocity vector with given magn...
Definition ParticleUtils.H:221
static constexpr auto c
vacuum speed of light [m/s]
Definition constant.H:44
static constexpr auto q_e
elementary charge [C]
Definition constant.H:52
Real RandomNormal(Real mean, Real stddev)
__host__ __device__ GpuComplex< T > sqrt(const GpuComplex< T > &a_z) noexcept
@ uz
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70
Definition ScatteringProcess.H:75