8 #ifndef WARPX_IONIZATION_H_
9 #define WARPX_IONIZATION_H_
83 const amrex::Real* AMREX_RESTRICT a_ionization_energies,
84 const amrex::Real* AMREX_RESTRICT a_adk_prefactor,
85 const amrex::Real* AMREX_RESTRICT a_adk_exp_prefactor,
86 const amrex::Real* AMREX_RESTRICT a_adk_power,
87 const amrex::Real* AMREX_RESTRICT a_adk_correction_factors,
90 int a_do_adk_correction,
91 int a_offset = 0) noexcept;
93 template <typename PData>
94 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
95 bool operator() (const PData& ptd,
int i,
amrex::RandomEngine const& engine) const noexcept
97 using namespace amrex::literals;
99 const int ion_lev = ptd.m_runtime_idata[
comp][
i];
103 constexpr amrex::Real c2_inv = amrex::Real(1.)/
c/
c;
106 amrex::ParticleReal xp, yp, zp;
126 const amrex::ParticleReal ux = ptd.m_rdata[
PIdx::ux][
i];
127 const amrex::ParticleReal uy = ptd.m_rdata[
PIdx::uy][
i];
128 const amrex::ParticleReal uz = ptd.m_rdata[
PIdx::uz][
i];
130 const auto ga =
static_cast<amrex::Real
>(
131 std::sqrt(1. + (ux*ux + uy*uy + uz*uz) * c2_inv));
132 const amrex::Real E = std::sqrt(
133 - ( ux*ex + uy*ey + uz*ez ) * ( ux*ex + uy*ey + uz*ez ) * c2_inv
134 + ( ga *ex + uy*bz - uz*by ) * ( ga *ex + uy*bz - uz*by )
135 + ( ga *ey + uz*bx - ux*bz ) * ( ga *ey + uz*bx - ux*bz )
136 + ( ga *ez + ux*by - uy*bx ) * ( ga *ez + ux*by - uy*bx )
140 amrex::Real w_dtau = (E <= 0._rt) ? 0._rt : 1._rt/ ga *
m_adk_prefactor[ion_lev] *
150 const amrex::Real p = 1._rt - std::exp( - w_dtau );
164 template <
typename DstData,
typename SrcData>
170 src.m_runtime_idata[0][i_src] += 1;
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeN(const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, amrex::ParticleReal &Exp, amrex::ParticleReal &Eyp, amrex::ParticleReal &Ezp, amrex::ParticleReal &Bxp, amrex::ParticleReal &Byp, amrex::ParticleReal &Bzp, amrex::Array4< amrex::Real const > const &ex_arr, amrex::Array4< amrex::Real const > const &ey_arr, amrex::Array4< amrex::Real const > const &ez_arr, amrex::Array4< amrex::Real const > const &bx_arr, amrex::Array4< amrex::Real const > const &by_arr, amrex::Array4< amrex::Real const > const &bz_arr, const amrex::IndexType ex_type, const amrex::IndexType ey_type, const amrex::IndexType ez_type, const amrex::IndexType bx_type, const amrex::IndexType by_type, const amrex::IndexType bz_type, const amrex::GpuArray< amrex::Real, 3 > &dx, const amrex::GpuArray< amrex::Real, 3 > &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes)
Field gather for a single particle.
Definition: FieldGather.H:38
Definition: WarpXParticleContainer.H:53
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
i
Definition: check_interp_points_and_weights.py:174
Functor class that assigns external field values (E and B) to particles.
Definition: GetExternalFields.H:25
Definition: Ionization.H:31
amrex::ParticleReal m_Ez_external_particle
Definition: Ionization.H:46
amrex::IndexType m_by_type
Definition: Ionization.H:62
int m_do_adk_correction
Definition: Ionization.H:40
amrex::IndexType m_bx_type
Definition: Ionization.H:61
int comp
Definition: Ionization.H:38
amrex::GpuArray< amrex::Real, 3 > m_dx_arr
Definition: Ionization.H:65
amrex::ParticleReal m_Bx_external_particle
Definition: Ionization.H:47
amrex::Array4< const amrex::Real > m_ey_arr
Definition: Ionization.H:52
bool m_galerkin_interpolation
Definition: Ionization.H:68
amrex::Array4< const amrex::Real > m_by_arr
Definition: Ionization.H:55
amrex::ParticleReal m_Ex_external_particle
Definition: Ionization.H:44
amrex::ParticleReal m_Bz_external_particle
Definition: Ionization.H:49
amrex::Array4< const amrex::Real > m_bx_arr
Definition: Ionization.H:54
amrex::Dim3 m_lo
Definition: Ionization.H:72
IonizationFilterFunc(const WarpXParIter &a_pti, int lev, amrex::IntVect ngEB, amrex::FArrayBox const &exfab, amrex::FArrayBox const &eyfab, amrex::FArrayBox const &ezfab, amrex::FArrayBox const &bxfab, amrex::FArrayBox const &byfab, amrex::FArrayBox const &bzfab, amrex::Vector< amrex::ParticleReal > &E_external_particle, amrex::Vector< amrex::ParticleReal > &B_external_particle, const amrex::Real *AMREX_RESTRICT a_ionization_energies, const amrex::Real *AMREX_RESTRICT a_adk_prefactor, const amrex::Real *AMREX_RESTRICT a_adk_exp_prefactor, const amrex::Real *AMREX_RESTRICT a_adk_power, const amrex::Real *AMREX_RESTRICT a_adk_correction_factors, int a_comp, int a_atomic_number, int a_do_adk_correction, int a_offset=0) noexcept
Definition: Ionization.cpp:20
const amrex::Real *AMREX_RESTRICT m_adk_exp_prefactor
Definition: Ionization.H:34
const amrex::Real *AMREX_RESTRICT m_adk_power
Definition: Ionization.H:35
const amrex::Real *AMREX_RESTRICT m_adk_correction_factors
Definition: Ionization.H:36
amrex::Array4< const amrex::Real > m_ex_arr
Definition: Ionization.H:51
amrex::IndexType m_ez_type
Definition: Ionization.H:60
const amrex::Real *AMREX_RESTRICT m_adk_prefactor
Definition: Ionization.H:33
amrex::IndexType m_bz_type
Definition: Ionization.H:63
GetExternalEBField m_get_externalEB
Definition: Ionization.H:43
const amrex::Real *AMREX_RESTRICT m_ionization_energies
Definition: Ionization.H:32
int m_nox
Definition: Ionization.H:69
amrex::Array4< const amrex::Real > m_ez_arr
Definition: Ionization.H:53
amrex::IndexType m_ey_type
Definition: Ionization.H:59
int m_n_rz_azimuthal_modes
Definition: Ionization.H:70
GetParticlePosition< PIdx > m_get_position
Definition: Ionization.H:42
amrex::IndexType m_ex_type
Definition: Ionization.H:58
amrex::ParticleReal m_By_external_particle
Definition: Ionization.H:48
amrex::Array4< const amrex::Real > m_bz_arr
Definition: Ionization.H:56
amrex::ParticleReal m_Ey_external_particle
Definition: Ionization.H:45
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool operator()(const PData &ptd, int i, amrex::RandomEngine const &engine) const noexcept
Definition: Ionization.H:95
amrex::GpuArray< amrex::Real, 3 > m_xyzmin_arr
Definition: Ionization.H:66
int m_atomic_number
Definition: Ionization.H:39
@ uz
Definition: NamedComponentParticleContainer.H:34
@ uy
Definition: NamedComponentParticleContainer.H:34
@ ux
Definition: NamedComponentParticleContainer.H:34