7 #ifndef WARPX_breit_wheeler_engine_wrapper_h_ 8 #define WARPX_breit_wheeler_engine_wrapper_h_ 22 #include <picsar_qed/containers/picsar_array.hpp> 23 #include <picsar_qed/math/cmath_overloads.hpp> 24 #include <picsar_qed/math/math_constants.h> 25 #include <picsar_qed/math/vec_functions.hpp> 26 #include <picsar_qed/physics/breit_wheeler/breit_wheeler_engine_core.hpp> 27 #include <picsar_qed/physics/breit_wheeler/breit_wheeler_engine_tables.hpp> 28 #include <picsar_qed/physics/gamma_functions.hpp> 29 #include <picsar_qed/physics/phys_constants.h> 30 #include <picsar_qed/physics/unit_conversion.hpp> 35 namespace amrex {
struct RandomEngine; }
39 picsar::multi_physics::phys::breit_wheeler::
40 dndt_lookup_table_params<amrex::ParticleReal>;
43 picsar::multi_physics::phys::breit_wheeler::
51 picsar::multi_physics::phys::breit_wheeler::
52 pair_prod_lookup_table_params<amrex::ParticleReal>;
55 picsar::multi_physics::phys::breit_wheeler::
56 pair_prod_lookup_table<
95 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
125 const amrex::ParticleReal bw_minimum_chi_phot):
126 m_table_view{table_view}, m_bw_minimum_chi_phot{bw_minimum_chi_phot}{}
145 const amrex::ParticleReal ux,
const amrex::ParticleReal uy,
146 const amrex::ParticleReal uz,
const amrex::ParticleReal
ex,
147 const amrex::ParticleReal
ey,
const amrex::ParticleReal
ez,
148 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
149 const amrex::ParticleReal bz,
const amrex::Real
dt,
150 amrex::ParticleReal& opt_depth)
const noexcept
152 namespace pxr_m = picsar::multi_physics::math;
153 namespace pxr_p = picsar::multi_physics::phys;
154 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
157 const auto u_norm = std::sqrt(ux*ux + uy*uy + uz*uz);
160 const auto px = m_e*ux;
161 const auto py = m_e*uy;
162 const auto pz = m_e*uz;
165 px, py, pz,
ex,
ey,
ez, bx, by, bz);
170 const auto gamma_photon = pxr_p::compute_gamma_photon<
171 amrex::ParticleReal, pxr_p::unit_system::SI>(
173 if (gamma_photon < pxr_m::two<amrex::ParticleReal> ||
174 chi_phot < m_bw_minimum_chi_phot)
177 const auto is_out = pxr_bw::evolve_optical_depth<
180 pxr_p::unit_system::SI>(
181 energy, chi_phot,
dt, opt_depth, m_table_view);
213 m_table_view{table_view}{}
232 const amrex::ParticleReal ux,
const amrex::ParticleReal uy,
233 const amrex::ParticleReal uz,
const amrex::ParticleReal
ex,
234 const amrex::ParticleReal
ey,
const amrex::ParticleReal
ez,
235 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
236 const amrex::ParticleReal bz, amrex::ParticleReal& e_ux,
237 amrex::ParticleReal& e_uy, amrex::ParticleReal& e_uz,
238 amrex::ParticleReal& p_ux, amrex::ParticleReal& p_uy,
239 amrex::ParticleReal& p_uz,
242 using namespace amrex;
243 namespace pxr_m = picsar::multi_physics::math;
244 namespace pxr_p = picsar::multi_physics::phys;
245 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
250 constexpr ParticleReal one_over_me = 1._prt/
me;
259 px, py, pz,
ex,
ey,
ez, bx, by, bz);
261 const auto momentum_photon = pxr_m::vec3<amrex::ParticleReal>{px, py, pz};
262 auto momentum_ele = pxr_m::vec3<amrex::ParticleReal>();
263 auto momentum_pos = pxr_m::vec3<amrex::ParticleReal>();
265 const auto is_out = pxr_bw::generate_breit_wheeler_pairs<
268 pxr_p::unit_system::SI>(
270 rand_zero_one_minus_epsi,
272 momentum_ele, momentum_pos);
274 e_ux = momentum_ele[0]*one_over_me;
275 e_uy = momentum_ele[1]*one_over_me;
276 e_uz = momentum_ele[2]*one_over_me;
277 p_ux = momentum_pos[0]*one_over_me;
278 p_uy = momentum_pos[1]*one_over_me;
279 p_uz = momentum_pos[2]*one_over_me;
319 bool are_lookup_tables_initialized ()
const;
327 std::vector<char> export_lookup_tables_data ()
const;
336 bool init_lookup_tables_from_raw_data (
337 const std::vector<char>& raw_data,
338 const amrex::ParticleReal bw_minimum_chi_phot);
345 void init_builtin_tables(
const amrex::ParticleReal bw_minimum_chi_phot);
354 const amrex::ParticleReal bw_minimum_chi_phot);
363 amrex::ParticleReal get_minimum_chi_phot()
const;
366 bool m_lookup_tables_initialized =
false;
375 void init_builtin_dndt_table();
376 void init_builtin_pair_prod_table();
383 #endif //WARPX_breit_wheeler_engine_wrapper_H_ BW_pair_prod_table m_pair_prod_table
Definition: BreitWheelerEngineWrapper.H:373
BreitWheelerEvolveOpticalDepth(const BW_dndt_table_view table_view, const amrex::ParticleReal bw_minimum_chi_phot)
Definition: BreitWheelerEngineWrapper.H:123
AMREX_GPU_DEVICE AMREX_FORCE_INLINE int operator()(const amrex::ParticleReal ux, const amrex::ParticleReal uy, const amrex::ParticleReal uz, const amrex::ParticleReal ex, const amrex::ParticleReal ey, const amrex::ParticleReal ez, const amrex::ParticleReal bx, const amrex::ParticleReal by, const amrex::ParticleReal bz, amrex::ParticleReal &e_ux, amrex::ParticleReal &e_uy, amrex::ParticleReal &e_uz, amrex::ParticleReal &p_ux, amrex::ParticleReal &p_uy, amrex::ParticleReal &p_uz, amrex::RandomEngine const &engine) const noexcept
Definition: BreitWheelerEngineWrapper.H:231
AMREX_GPU_DEVICE AMREX_FORCE_INLINE int operator()(const amrex::ParticleReal ux, const amrex::ParticleReal uy, const amrex::ParticleReal uz, const amrex::ParticleReal ex, const amrex::ParticleReal ey, const amrex::ParticleReal ez, const amrex::ParticleReal bx, const amrex::ParticleReal by, const amrex::ParticleReal bz, const amrex::Real dt, amrex::ParticleReal &opt_depth) const noexcept
Definition: BreitWheelerEngineWrapper.H:144
picsar::multi_physics::phys::breit_wheeler::dndt_lookup_table< amrex::ParticleReal, amrex::Gpu::DeviceVector< amrex::ParticleReal > > BW_dndt_table
Definition: BreitWheelerEngineWrapper.H:46
BW_pair_prod_table_view m_table_view
Definition: BreitWheelerEngineWrapper.H:285
picsar::multi_physics::phys::breit_wheeler::dndt_lookup_table_params< amrex::ParticleReal > BW_dndt_table_params
Definition: BreitWheelerEngineWrapper.H:40
BW_dndt_table_params dndt_params
Definition: BreitWheelerEngineWrapper.H:64
picsar::multi_physics::phys::breit_wheeler::pair_prod_lookup_table< amrex::ParticleReal, amrex::Gpu::DeviceVector< amrex::ParticleReal > > BW_pair_prod_table
Definition: BreitWheelerEngineWrapper.H:58
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
me
Definition: yt3d_mpi.py:142
int dt
Definition: Stencil.py:468
Definition: BreitWheelerEngineWrapper.H:62
BW_dndt_table::view_type BW_dndt_table_view
Definition: BreitWheelerEngineWrapper.H:48
Definition: BreitWheelerEngineWrapper.H:107
BW_dndt_table m_dndt_table
Definition: BreitWheelerEngineWrapper.H:372
#define AMREX_FORCE_INLINE
int ey
Definition: Stencil.py:480
picsar::multi_physics::phys::breit_wheeler::pair_prod_lookup_table_params< amrex::ParticleReal > BW_pair_prod_table_params
Definition: BreitWheelerEngineWrapper.H:52
Definition: BreitWheelerEngineWrapper.H:78
#define AMREX_GPU_HOST_DEVICE
amrex::ParticleReal m_bw_minimum_chi_phot
Definition: BreitWheelerEngineWrapper.H:188
int ez
Definition: Stencil.py:481
BW_dndt_table_view m_table_view
Definition: BreitWheelerEngineWrapper.H:187
BW_pair_prod_table_params pair_prod_params
Definition: BreitWheelerEngineWrapper.H:65
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real chi_photon(const amrex::ParticleReal px, const amrex::ParticleReal py, const amrex::ParticleReal pz, const amrex::ParticleReal ex, const amrex::ParticleReal ey, const amrex::ParticleReal ez, const amrex::ParticleReal bx, const amrex::ParticleReal by, const amrex::ParticleReal bz)
Definition: QedChiFunctions.H:31
Definition: BreitWheelerEngineWrapper.H:195
int ex
Definition: Stencil.py:479
Definition: BreitWheelerEngineWrapper.H:293
static constexpr auto m_e
electron mass [kg]
Definition: constant.H:52
amrex::ParticleReal m_bw_minimum_chi_phot
Definition: BreitWheelerEngineWrapper.H:370
BreitWheelerGeneratePairs(const BW_pair_prod_table_view table_view)
Definition: BreitWheelerEngineWrapper.H:212
BW_pair_prod_table::view_type BW_pair_prod_table_view
Definition: BreitWheelerEngineWrapper.H:60