7#ifndef WARPX_quantum_sync_engine_wrapper_h_
8#define WARPX_quantum_sync_engine_wrapper_h_
21#include <picsar_qed/containers/picsar_array.hpp>
22#include <picsar_qed/math/cmath_overloads.hpp>
23#include <picsar_qed/math/vec_functions.hpp>
24#include <picsar_qed/physics/phys_constants.h>
25#include <picsar_qed/physics/quantum_sync/quantum_sync_engine_core.hpp>
26#include <picsar_qed/physics/quantum_sync/quantum_sync_engine_tables.hpp>
27#include <picsar_qed/physics/unit_conversion.hpp>
36 picsar::multi_physics::phys::quantum_sync::
37 dndt_lookup_table_params<amrex::ParticleReal>;
40 picsar::multi_physics::phys::quantum_sync::
48 picsar::multi_physics::phys::quantum_sync::
49 photon_emission_lookup_table_params<amrex::ParticleReal>;
52 picsar::multi_physics::phys::quantum_sync::
53 photon_emission_lookup_table<
92 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
121 const amrex::ParticleReal qs_minimum_chi_part):
139 const amrex::ParticleReal ux,
const amrex::ParticleReal uy,
const amrex::ParticleReal uz,
140 const amrex::ParticleReal ex,
const amrex::ParticleReal ey,
const amrex::ParticleReal ez,
141 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
const amrex::ParticleReal bz,
142 const amrex::Real dt, amrex::ParticleReal& opt_depth)
const noexcept
144 using namespace amrex::literals;
145 namespace pxr_p = picsar::multi_physics::phys;
146 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
150 const amrex::ParticleReal gamma = std::sqrt(1._rt + (ux*ux + uy*uy + uz*uz)*inv_c2);
154 m_e*ux, m_e*uy, m_e*uz, ex, ey, ez, bx, by, bz);
160 const auto is_out = pxr_qs::evolve_optical_depth<
163 pxr_p::unit_system::SI>(
213 amrex::ParticleReal& ux, amrex::ParticleReal& uy,
214 amrex::ParticleReal& uz,
215 const amrex::ParticleReal ex,
const amrex::ParticleReal ey,
216 const amrex::ParticleReal ez,
const amrex::ParticleReal bx,
217 const amrex::ParticleReal by,
const amrex::ParticleReal bz,
218 amrex::ParticleReal& g_ux, amrex::ParticleReal& g_uy,
221 using namespace amrex;
222 namespace pxr_m = picsar::multi_physics::math;
223 namespace pxr_p = picsar::multi_physics::phys;
224 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
229 constexpr ParticleReal one_over_me = 1._prt/me;
238 px, py, pz, ex, ey, ez, bx, by, bz);
240 auto momentum_particle = pxr_m::vec3<amrex::ParticleReal>{px, py, pz};
241 auto momentum_photon = pxr_m::vec3<amrex::ParticleReal>();
243 const auto is_out = pxr_qs::generate_photon_update_momentum<
246 pxr_p::unit_system::SI>(
247 chi_particle, momentum_particle,
248 rand_zero_one_minus_epsi,
252 ux = momentum_particle[0]*one_over_me;
253 uy = momentum_particle[1]*one_over_me;
254 uz = momentum_particle[2]*one_over_me;
255 g_ux = momentum_photon[0]*one_over_me;
256 g_uy = momentum_photon[1]*one_over_me;
257 g_uz = momentum_photon[2]*one_over_me;
316 amrex::ParticleReal qs_minimum_chi_part);
332 amrex::ParticleReal qs_minimum_chi_part);
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
std::vector< Real > PicsarQedVector
Definition QedWrapperCommons.H:105
picsar::multi_physics::phys::quantum_sync:: dndt_lookup_table< amrex::ParticleReal, PicsarQedVector< amrex::ParticleReal > > QS_dndt_table
Definition QuantumSyncEngineWrapper.H:39
picsar::multi_physics::phys::quantum_sync:: photon_emission_lookup_table_params< amrex::ParticleReal > QS_phot_em_table_params
Definition QuantumSyncEngineWrapper.H:47
QS_dndt_table::view_type QS_dndt_table_view
Definition QuantumSyncEngineWrapper.H:45
picsar::multi_physics::phys::quantum_sync:: dndt_lookup_table_params< amrex::ParticleReal > QS_dndt_table_params
Definition QuantumSyncEngineWrapper.H:35
QS_phot_em_table::view_type QS_phot_em_table_view
Definition QuantumSyncEngineWrapper.H:57
picsar::multi_physics::phys::quantum_sync:: photon_emission_lookup_table< amrex::ParticleReal, PicsarQedVector< amrex::ParticleReal > > QS_phot_em_table
Definition QuantumSyncEngineWrapper.H:51
PicsarQuantumSyncCtrl get_default_ctrl() const
Definition QuantumSyncEngineWrapper.cpp:129
QS_phot_em_table m_phot_em_table
Definition QuantumSyncEngineWrapper.H:351
void compute_lookup_tables(PicsarQuantumSyncCtrl ctrl, amrex::ParticleReal qs_minimum_chi_part)
Definition QuantumSyncEngineWrapper.cpp:144
bool m_lookup_tables_initialized
Definition QuantumSyncEngineWrapper.H:344
void init_builtin_phot_em_table()
Definition QuantumSyncEngineWrapper.cpp:198
QuantumSynchrotronEngine()=default
bool init_lookup_tables_from_raw_data(const std::vector< char > &raw_data, amrex::ParticleReal qs_minimum_chi_part)
Definition QuantumSyncEngineWrapper.cpp:65
QS_dndt_table m_dndt_table
Definition QuantumSyncEngineWrapper.H:350
QuantumSynchrotronEvolveOpticalDepth build_evolve_functor()
Definition QuantumSyncEngineWrapper.cpp:44
void init_builtin_tables(amrex::ParticleReal qs_minimum_chi_part)
Definition QuantumSyncEngineWrapper.cpp:95
amrex::ParticleReal m_qs_minimum_chi_part
Definition QuantumSyncEngineWrapper.H:348
QuantumSynchrotronPhotonEmission build_phot_em_functor()
Definition QuantumSyncEngineWrapper.cpp:51
amrex::ParticleReal get_minimum_chi_part() const
Definition QuantumSyncEngineWrapper.cpp:139
bool are_lookup_tables_initialized() const
Definition QuantumSyncEngineWrapper.cpp:59
std::vector< char > export_lookup_tables_data() const
Definition QuantumSyncEngineWrapper.cpp:105
QuantumSynchrotronGetOpticalDepth build_optical_depth_functor()
Definition QuantumSyncEngineWrapper.cpp:39
void init_builtin_dndt_table()
Definition QuantumSyncEngineWrapper.cpp:164
Definition QuantumSyncEngineWrapper.H:105
amrex::ParticleReal m_qs_minimum_chi_part
Definition QuantumSyncEngineWrapper.H:171
QS_dndt_table_view m_table_view
Definition QuantumSyncEngineWrapper.H:170
QuantumSynchrotronEvolveOpticalDepth(const QS_dndt_table_view table_view, const amrex::ParticleReal qs_minimum_chi_part)
Definition QuantumSyncEngineWrapper.H:119
QuantumSynchrotronEvolveOpticalDepth()=default
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 QuantumSyncEngineWrapper.H:138
Definition QuantumSyncEngineWrapper.H:76
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal operator()(amrex::RandomEngine const &engine) const noexcept
Definition QuantumSyncEngineWrapper.H:90
QuantumSynchrotronGetOpticalDepth()=default
Definition QuantumSyncEngineWrapper.H:179
AMREX_GPU_DEVICE AMREX_FORCE_INLINE bool operator()(amrex::ParticleReal &ux, amrex::ParticleReal &uy, 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 &g_ux, amrex::ParticleReal &g_uy, amrex::ParticleReal &g_uz, amrex::RandomEngine const &engine) const noexcept
Definition QuantumSyncEngineWrapper.H:212
QS_phot_em_table_view m_table_view
Definition QuantumSyncEngineWrapper.H:263
QuantumSynchrotronPhotonEmission()=default
QuantumSynchrotronPhotonEmission(const QS_phot_em_table_view table_view)
Definition QuantumSyncEngineWrapper.H:195
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real chi_ele_pos(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:53
constexpr auto c
vacuum speed of light [m/s]
Definition constant.H:149
constexpr auto m_e
electron mass [kg]
Definition constant.H:161
Definition QuantumSyncEngineWrapper.H:60
QS_phot_em_table_params phot_em_params
Definition QuantumSyncEngineWrapper.H:62
QS_dndt_table_params dndt_params
Definition QuantumSyncEngineWrapper.H:61