7 #ifndef WARPX_quantum_sync_engine_wrapper_h_ 8 #define WARPX_quantum_sync_engine_wrapper_h_ 23 #include <picsar_qed/containers/picsar_array.hpp> 24 #include <picsar_qed/math/cmath_overloads.hpp> 25 #include <picsar_qed/math/vec_functions.hpp> 26 #include <picsar_qed/physics/phys_constants.h> 27 #include <picsar_qed/physics/quantum_sync/quantum_sync_engine_core.hpp> 28 #include <picsar_qed/physics/quantum_sync/quantum_sync_engine_tables.hpp> 29 #include <picsar_qed/physics/unit_conversion.hpp> 34 namespace amrex {
struct RandomEngine; }
38 picsar::multi_physics::phys::quantum_sync::
39 dndt_lookup_table_params<amrex::ParticleReal>;
42 picsar::multi_physics::phys::quantum_sync::
50 picsar::multi_physics::phys::quantum_sync::
51 photon_emission_lookup_table_params<amrex::ParticleReal>;
54 picsar::multi_physics::phys::quantum_sync::
55 photon_emission_lookup_table<
94 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
123 const amrex::ParticleReal qs_minimum_chi_part):
124 m_table_view{table_view}, m_qs_minimum_chi_part{qs_minimum_chi_part}{}
141 const amrex::ParticleReal ux,
const amrex::ParticleReal uy,
const amrex::ParticleReal uz,
142 const amrex::ParticleReal
ex,
const amrex::ParticleReal
ey,
const amrex::ParticleReal
ez,
143 const amrex::ParticleReal bx,
const amrex::ParticleReal by,
const amrex::ParticleReal bz,
144 const amrex::Real
dt, amrex::ParticleReal& opt_depth)
const noexcept
147 namespace pxr_p = picsar::multi_physics::phys;
148 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
152 const amrex::ParticleReal
gamma = std::sqrt(1._rt + (ux*ux + uy*uy + uz*uz)*inv_c2);
156 m_e*ux, m_e*uy, m_e*uz,
ex,
ey,
ez, bx, by, bz);
158 if (chi_part < m_qs_minimum_chi_part)
161 const auto is_out = pxr_qs::evolve_optical_depth<
164 pxr_p::unit_system::SI>(
165 energy, chi_part,
dt, opt_depth, m_table_view);
198 m_table_view{table_view}{}
214 amrex::ParticleReal& ux, amrex::ParticleReal& uy,
215 amrex::ParticleReal& uz,
216 const amrex::ParticleReal
ex,
const amrex::ParticleReal
ey,
217 const amrex::ParticleReal
ez,
const amrex::ParticleReal bx,
218 const amrex::ParticleReal by,
const amrex::ParticleReal bz,
219 amrex::ParticleReal& g_ux, amrex::ParticleReal& g_uy,
222 using namespace amrex;
223 namespace pxr_m = picsar::multi_physics::math;
224 namespace pxr_p = picsar::multi_physics::phys;
225 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
230 constexpr ParticleReal one_over_me = 1._prt/
me;
239 px, py, pz,
ex,
ey,
ez, bx, by, bz);
241 auto momentum_particle = pxr_m::vec3<amrex::ParticleReal>{px, py, pz};
242 auto momentum_photon = pxr_m::vec3<amrex::ParticleReal>();
244 const auto is_out = pxr_qs::generate_photon_update_momentum<
247 pxr_p::unit_system::SI>(
248 chi_particle, momentum_particle,
249 rand_zero_one_minus_epsi,
253 ux = momentum_particle[0]*one_over_me;
254 uy = momentum_particle[1]*one_over_me;
255 uz = momentum_particle[2]*one_over_me;
256 g_ux = momentum_photon[0]*one_over_me;
257 g_uy = momentum_photon[1]*one_over_me;
258 g_uz = momentum_photon[2]*one_over_me;
299 bool are_lookup_tables_initialized ()
const;
307 std::vector<char> export_lookup_tables_data ()
const;
316 bool init_lookup_tables_from_raw_data (
const std::vector<char>& raw_data,
317 const amrex::ParticleReal qs_minimum_chi_part);
324 void init_builtin_tables(
const amrex::ParticleReal qs_minimum_chi_part);
333 const amrex::ParticleReal qs_minimum_chi_part);
342 amrex::ParticleReal get_minimum_chi_part()
const;
345 bool m_lookup_tables_initialized =
false;
354 void init_builtin_dndt_table();
355 void init_builtin_phot_em_table();
360 #endif //WARPX_quantum_sync_engine_wrapper_h_ QS_phot_em_table_view m_table_view
Definition: QuantumSyncEngineWrapper.H:264
amrex::ParticleReal m_qs_minimum_chi_part
Definition: QuantumSyncEngineWrapper.H:172
QS_dndt_table_view m_table_view
Definition: QuantumSyncEngineWrapper.H:171
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:140
amrex::ParticleReal m_qs_minimum_chi_part
Definition: QuantumSyncEngineWrapper.H:349
int gamma
Definition: Stencil.py:474
QS_phot_em_table::view_type QS_phot_em_table_view
Definition: QuantumSyncEngineWrapper.H:59
QuantumSynchrotronPhotonEmission(const QS_phot_em_table_view table_view)
Definition: QuantumSyncEngineWrapper.H:196
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
Definition: QuantumSyncEngineWrapper.H:77
QS_dndt_table::view_type QS_dndt_table_view
Definition: QuantumSyncEngineWrapper.H:47
me
Definition: yt3d_mpi.py:142
int dt
Definition: Stencil.py:468
picsar::multi_physics::phys::quantum_sync::dndt_lookup_table_params< amrex::ParticleReal > QS_dndt_table_params
Definition: QuantumSyncEngineWrapper.H:39
QS_dndt_table m_dndt_table
Definition: QuantumSyncEngineWrapper.H:351
QS_phot_em_table_params phot_em_params
Definition: QuantumSyncEngineWrapper.H:64
picsar::multi_physics::phys::quantum_sync::photon_emission_lookup_table_params< amrex::ParticleReal > QS_phot_em_table_params
Definition: QuantumSyncEngineWrapper.H:51
QS_phot_em_table m_phot_em_table
Definition: QuantumSyncEngineWrapper.H:352
#define AMREX_FORCE_INLINE
int ey
Definition: Stencil.py:480
#define AMREX_GPU_HOST_DEVICE
int ez
Definition: Stencil.py:481
Definition: QuantumSyncEngineWrapper.H:61
QS_dndt_table_params dndt_params
Definition: QuantumSyncEngineWrapper.H:63
picsar::multi_physics::phys::quantum_sync::dndt_lookup_table< amrex::ParticleReal, amrex::Gpu::DeviceVector< amrex::ParticleReal > > QS_dndt_table
Definition: QuantumSyncEngineWrapper.H:45
Definition: QuantumSyncEngineWrapper.H:179
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
Definition: QuantumSyncEngineWrapper.H:106
QuantumSynchrotronEvolveOpticalDepth(const QS_dndt_table_view table_view, const amrex::ParticleReal qs_minimum_chi_part)
Definition: QuantumSyncEngineWrapper.H:121
int ex
Definition: Stencil.py:479
picsar::multi_physics::phys::quantum_sync::photon_emission_lookup_table< amrex::ParticleReal, amrex::Gpu::DeviceVector< amrex::ParticleReal > > QS_phot_em_table
Definition: QuantumSyncEngineWrapper.H:57
static constexpr auto m_e
electron mass [kg]
Definition: constant.H:52
Definition: QuantumSyncEngineWrapper.H:273
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:213