7 #ifndef WARPX_breit_wheeler_engine_wrapper_h_ 8 #define WARPX_breit_wheeler_engine_wrapper_h_ 16 #include <AMReX_Extension.H> 17 #include <AMReX_GpuContainers.H> 18 #include <AMReX_GpuQualifiers.H> 19 #include <AMReX_REAL.H> 20 #include <AMReX_Random.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::Real>;
43 picsar::multi_physics::phys::breit_wheeler::
46 amrex::Gpu::DeviceVector<amrex::Real>>;
51 picsar::multi_physics::phys::breit_wheeler::
52 pair_prod_lookup_table_params<amrex::Real>;
55 picsar::multi_physics::phys::breit_wheeler::
56 pair_prod_lookup_table<
58 amrex::Gpu::DeviceVector<amrex::Real>>;
94 amrex::Real operator() (amrex::RandomEngine
const& engine)
const noexcept
96 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
99 return pxr_bw::get_optical_depth(amrex::Random(engine));
126 const amrex::Real bw_minimum_chi_phot):
127 m_table_view{table_view}, m_bw_minimum_chi_phot{bw_minimum_chi_phot}{}
146 const amrex::ParticleReal
ux,
const amrex::ParticleReal uy,
147 const amrex::ParticleReal
uz,
const amrex::ParticleReal ex,
148 const amrex::ParticleReal ey,
const amrex::ParticleReal ez,
149 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
150 const amrex::ParticleReal bz,
const amrex::Real dt,
151 amrex::ParticleReal& opt_depth)
const noexcept
153 namespace pxr_m = picsar::multi_physics::math;
154 namespace pxr_p = picsar::multi_physics::phys;
155 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
157 constexpr amrex::Real m_e = PhysConst::m_e;
158 const auto u_norm = std::sqrt(
ux*
ux + uy*uy +
uz*
uz);
159 const auto energy = u_norm*m_e*PhysConst::c;
161 const auto px = m_e*
ux;
162 const auto py = m_e*uy;
163 const auto pz = m_e*
uz;
166 px, py, pz, ex, ey, ez, bx, by, bz);
171 const auto gamma_photon = pxr_p::compute_gamma_photon<
172 amrex::ParticleReal, pxr_p::unit_system::SI>(
174 if (gamma_photon < pxr_m::two<amrex::Real> ||
175 chi_phot < m_bw_minimum_chi_phot)
178 const auto is_out = pxr_bw::evolve_optical_depth<
181 pxr_p::unit_system::SI>(
182 energy, chi_phot, dt, opt_depth, m_table_view);
214 m_table_view{table_view}{}
233 const amrex::ParticleReal
ux,
const amrex::ParticleReal uy,
234 const amrex::ParticleReal
uz,
const amrex::ParticleReal ex,
235 const amrex::ParticleReal ey,
const amrex::ParticleReal ez,
236 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
237 const amrex::ParticleReal bz, amrex::ParticleReal& e_ux,
238 amrex::ParticleReal& e_uy, amrex::ParticleReal& e_uz,
239 amrex::ParticleReal& p_ux, amrex::ParticleReal& p_uy,
240 amrex::ParticleReal& p_uz,
241 amrex::RandomEngine
const& engine)
const noexcept
243 using namespace amrex;
244 namespace pxr_m = picsar::multi_physics::math;
245 namespace pxr_p = picsar::multi_physics::phys;
246 namespace pxr_bw = picsar::multi_physics::phys::breit_wheeler;
248 const auto rand_zero_one_minus_epsi = amrex::Random(engine);
250 constexpr ParticleReal
me = PhysConst::m_e;
251 constexpr ParticleReal one_over_me = 1._prt/
me;
260 px, py, pz, ex, ey, ez, bx, by, bz);
262 const auto momentum_photon = pxr_m::vec3<amrex::ParticleReal>{px, py, pz};
263 auto momentum_ele = pxr_m::vec3<amrex::ParticleReal>();
264 auto momentum_pos = pxr_m::vec3<amrex::ParticleReal>();
266 const auto is_out = pxr_bw::generate_breit_wheeler_pairs<
269 pxr_p::unit_system::SI>(
271 rand_zero_one_minus_epsi,
273 momentum_ele, momentum_pos);
275 e_ux = momentum_ele[0]*one_over_me;
276 e_uy = momentum_ele[1]*one_over_me;
277 e_uz = momentum_ele[2]*one_over_me;
278 p_ux = momentum_pos[0]*one_over_me;
279 p_uy = momentum_pos[1]*one_over_me;
280 p_uz = momentum_pos[2]*one_over_me;
320 bool are_lookup_tables_initialized ()
const;
328 std::vector<char> export_lookup_tables_data ()
const;
337 bool init_lookup_tables_from_raw_data (
338 const std::vector<char>& raw_data,
339 const amrex::Real bw_minimum_chi_phot);
346 void init_builtin_tables(
const amrex::Real bw_minimum_chi_phot);
355 const amrex::Real bw_minimum_chi_phot);
364 amrex::Real get_minimum_chi_phot()
const;
367 bool m_lookup_tables_initialized =
false;
376 void init_builtin_dndt_table();
377 void init_builtin_pair_prod_table();
384 #endif //WARPX_breit_wheeler_engine_wrapper_H_ BW_pair_prod_table m_pair_prod_table
Definition: BreitWheelerEngineWrapper.H:374
picsar::multi_physics::phys::breit_wheeler::dndt_lookup_table< amrex::Real, amrex::Gpu::DeviceVector< amrex::Real > > BW_dndt_table
Definition: BreitWheelerEngineWrapper.H:46
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:232
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:145
amrex::Real m_bw_minimum_chi_phot
Definition: BreitWheelerEngineWrapper.H:189
BW_pair_prod_table_view m_table_view
Definition: BreitWheelerEngineWrapper.H:286
BW_dndt_table_params dndt_params
Definition: BreitWheelerEngineWrapper.H:64
BreitWheelerEvolveOpticalDepth()
Definition: BreitWheelerEngineWrapper.H:115
me
Definition: yt3d_mpi.py:139
def uz
Definition: read_lab_particles.py:29
Definition: BreitWheelerEngineWrapper.H:62
BW_dndt_table::view_type BW_dndt_table_view
Definition: BreitWheelerEngineWrapper.H:48
BreitWheelerGetOpticalDepth()
Definition: BreitWheelerEngineWrapper.H:85
Definition: BreitWheelerEngineWrapper.H:108
BW_dndt_table m_dndt_table
Definition: BreitWheelerEngineWrapper.H:373
BreitWheelerEvolveOpticalDepth(const BW_dndt_table_view table_view, const amrex::Real bw_minimum_chi_phot)
Definition: BreitWheelerEngineWrapper.H:124
Definition: BreitWheelerEngineWrapper.H:78
BW_dndt_table_view m_table_view
Definition: BreitWheelerEngineWrapper.H:188
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
picsar::multi_physics::phys::breit_wheeler::pair_prod_lookup_table< amrex::Real, amrex::Gpu::DeviceVector< amrex::Real > > BW_pair_prod_table
Definition: BreitWheelerEngineWrapper.H:58
picsar::multi_physics::phys::breit_wheeler::dndt_lookup_table_params< amrex::Real > BW_dndt_table_params
Definition: BreitWheelerEngineWrapper.H:40
Definition: BreitWheelerEngineWrapper.H:196
def ux
Definition: read_lab_particles.py:28
amrex::Real m_bw_minimum_chi_phot
Definition: BreitWheelerEngineWrapper.H:371
Definition: BreitWheelerEngineWrapper.H:294
Definition: BreitWheelerEngineWrapper.H:35
BreitWheelerGeneratePairs(const BW_pair_prod_table_view table_view)
Definition: BreitWheelerEngineWrapper.H:213
picsar::multi_physics::phys::breit_wheeler::pair_prod_lookup_table_params< amrex::Real > BW_pair_prod_table_params
Definition: BreitWheelerEngineWrapper.H:52
BreitWheelerGeneratePairs()
Definition: BreitWheelerEngineWrapper.H:203
BW_pair_prod_table::view_type BW_pair_prod_table_view
Definition: BreitWheelerEngineWrapper.H:60