7 #ifndef WARPX_quantum_sync_engine_wrapper_h_ 8 #define WARPX_quantum_sync_engine_wrapper_h_ 14 #include <AMReX_Array.H> 15 #include <AMReX_Vector.H> 16 #include <AMReX_Gpu.H> 18 #include <physics/quantum_sync/quantum_sync_engine_tables.hpp> 19 #include <physics/quantum_sync/quantum_sync_engine_core.hpp> 26 picsar::multi_physics::phys::quantum_sync::
27 dndt_lookup_table_params<amrex::Real>;
30 picsar::multi_physics::phys::quantum_sync::
33 amrex::Gpu::DeviceVector<amrex::Real>>;
38 picsar::multi_physics::phys::quantum_sync::
39 photon_emission_lookup_table_params<amrex::Real>;
42 picsar::multi_physics::phys::quantum_sync::
43 photon_emission_lookup_table<
45 amrex::Gpu::DeviceVector<amrex::Real>>;
81 amrex::Real operator() () const noexcept
83 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
86 return pxr_qs::get_optical_depth(amrex::Random());
112 const amrex::ParticleReal qs_minimum_chi_part):
113 m_table_view{table_view}, m_qs_minimum_chi_part{qs_minimum_chi_part}{};
130 const amrex::Real
ux,
const amrex::Real uy,
const amrex::Real
uz,
131 const amrex::Real ex,
const amrex::Real ey,
const amrex::Real ez,
132 const amrex::Real bx,
const amrex::Real by,
const amrex::Real bz,
133 const amrex::Real dt, amrex::Real& opt_depth)
const noexcept
136 namespace pxr_p = picsar::multi_physics::phys;
137 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
139 constexpr amrex::Real m_e = PhysConst::m_e;
140 constexpr amrex::Real inv_c2 = 1._rt/(PhysConst::c*PhysConst::c);
141 const amrex::Real gamma = std::sqrt(1._rt + (
ux*
ux + uy*uy +
uz*
uz)*inv_c2);
142 const auto energy = gamma*m_e*PhysConst::c*PhysConst::c;
145 m_e*
ux, m_e*uy, m_e*uz, ex, ey, ez, bx, by, bz);
147 if (chi_part < m_qs_minimum_chi_part)
150 const auto is_out = pxr_qs::evolve_optical_depth<
153 pxr_p::unit_system::SI>(
154 energy, chi_part, dt, opt_depth, m_table_view);
187 m_table_view{table_view}{};
202 amrex::Real&
ux, amrex::Real& uy, amrex::Real&
uz,
203 const amrex::Real ex,
const amrex::Real ey,
const amrex::Real ez,
204 const amrex::Real bx,
const amrex::Real by,
const amrex::Real bz,
205 amrex::Real& g_ux, amrex::Real& g_uy, amrex::Real& g_uz)
const noexcept
207 using namespace amrex;
208 namespace pxr_m = picsar::multi_physics::math;
209 namespace pxr_p = picsar::multi_physics::phys;
210 namespace pxr_qs = picsar::multi_physics::phys::quantum_sync;
212 const auto rand_zero_one_minus_epsi = amrex::Random();
214 constexpr ParticleReal
me = PhysConst::m_e;
215 constexpr ParticleReal one_over_me = 1._prt/
me;
224 px, py, pz, ex, ey, ez, bx, by, bz);
226 auto momentum_particle = pxr_m::vec3<amrex::Real>{px, py, pz};
227 auto momentum_photon = pxr_m::vec3<amrex::Real>();
229 const auto is_out = pxr_qs::generate_photon_update_momentum<
232 pxr_p::unit_system::SI>(
233 chi_particle, momentum_particle,
234 rand_zero_one_minus_epsi,
238 ux = momentum_particle[0]*one_over_me;
239 uy = momentum_particle[1]*one_over_me;
240 uz = momentum_particle[2]*one_over_me;
241 g_ux = momentum_photon[0]*one_over_me;
242 g_uy = momentum_photon[1]*one_over_me;
243 g_uz = momentum_photon[2]*one_over_me;
284 bool are_lookup_tables_initialized ()
const;
292 std::vector<char> export_lookup_tables_data ()
const;
301 bool init_lookup_tables_from_raw_data (
const std::vector<char>& raw_data,
302 const amrex::Real qs_minimum_chi_part);
309 void init_builtin_tables(
const amrex::Real qs_minimum_chi_part);
318 const amrex::Real qs_minimum_chi_part);
327 amrex::Real get_minimum_chi_part()
const;
330 bool m_lookup_tables_initialized =
false;
339 void init_builtin_dndt_table();
340 void init_builtin_phot_em_table();
345 #endif //WARPX_quantum_sync_engine_wrapper_h_ QS_phot_em_table_view m_table_view
Definition: QuantumSyncEngineWrapper.H:249
picsar::multi_physics::phys::quantum_sync::photon_emission_lookup_table< amrex::Real, amrex::Gpu::DeviceVector< amrex::Real > > QS_phot_em_table
Definition: QuantumSyncEngineWrapper.H:45
amrex::ParticleReal m_qs_minimum_chi_part
Definition: QuantumSyncEngineWrapper.H:161
QS_dndt_table_view m_table_view
Definition: QuantumSyncEngineWrapper.H:160
QuantumSynchrotronEvolveOpticalDepth()
Definition: QuantumSyncEngineWrapper.H:102
picsar::multi_physics::phys::quantum_sync::dndt_lookup_table_params< amrex::Real > QS_dndt_table_params
Definition: QuantumSyncEngineWrapper.H:27
QS_phot_em_table::view_type QS_phot_em_table_view
Definition: QuantumSyncEngineWrapper.H:47
QuantumSynchrotronPhotonEmission(const QS_phot_em_table_view table_view)
Definition: QuantumSyncEngineWrapper.H:185
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real chi_ele_pos(const amrex::Real px, const amrex::Real py, const amrex::Real pz, const amrex::Real ex, const amrex::Real ey, const amrex::Real ez, const amrex::Real bx, const amrex::Real by, const amrex::Real bz)
Definition: QedChiFunctions.H:51
Definition: QuantumSyncEngineWrapper.H:65
QS_dndt_table::view_type QS_dndt_table_view
Definition: QuantumSyncEngineWrapper.H:35
AMREX_GPU_DEVICE AMREX_FORCE_INLINE bool operator()(amrex::Real &ux, amrex::Real &uy, amrex::Real &uz, const amrex::Real ex, const amrex::Real ey, const amrex::Real ez, const amrex::Real bx, const amrex::Real by, const amrex::Real bz, amrex::Real &g_ux, amrex::Real &g_uy, amrex::Real &g_uz) const noexcept
Definition: QuantumSyncEngineWrapper.H:201
me
Definition: yt3d_mpi.py:139
QuantumSynchrotronGetOpticalDepth()
Definition: QuantumSyncEngineWrapper.H:72
def uz
Definition: read_lab_particles.py:29
QS_dndt_table m_dndt_table
Definition: QuantumSyncEngineWrapper.H:336
QS_phot_em_table_params phot_em_params
Definition: QuantumSyncEngineWrapper.H:52
QS_phot_em_table m_phot_em_table
Definition: QuantumSyncEngineWrapper.H:337
amrex::Real m_qs_minimum_chi_part
Definition: QuantumSyncEngineWrapper.H:334
AMREX_GPU_DEVICE AMREX_FORCE_INLINE int operator()(const amrex::Real ux, const amrex::Real uy, const amrex::Real uz, const amrex::Real ex, const amrex::Real ey, const amrex::Real ez, const amrex::Real bx, const amrex::Real by, const amrex::Real bz, const amrex::Real dt, amrex::Real &opt_depth) const noexcept
Definition: QuantumSyncEngineWrapper.H:129
Definition: QuantumSyncEngineWrapper.H:49
QS_dndt_table_params dndt_params
Definition: QuantumSyncEngineWrapper.H:51
Definition: QuantumSyncEngineWrapper.H:168
Definition: QuantumSyncEngineWrapper.H:95
QuantumSynchrotronEvolveOpticalDepth(const QS_dndt_table_view table_view, const amrex::ParticleReal qs_minimum_chi_part)
Definition: QuantumSyncEngineWrapper.H:110
def ux
Definition: read_lab_particles.py:28
picsar::multi_physics::phys::quantum_sync::photon_emission_lookup_table_params< amrex::Real > QS_phot_em_table_params
Definition: QuantumSyncEngineWrapper.H:39
picsar::multi_physics::phys::quantum_sync::dndt_lookup_table< amrex::Real, amrex::Gpu::DeviceVector< amrex::Real > > QS_dndt_table
Definition: QuantumSyncEngineWrapper.H:33
Definition: QuantumSyncEngineWrapper.H:258
QuantumSynchrotronPhotonEmission()
Definition: QuantumSyncEngineWrapper.H:175