aboutsummaryrefslogtreecommitdiff
path: root/Source/QED/QuantumSyncEngineWrapper.cpp
diff options
context:
space:
mode:
authorGravatar Luca Fedeli <luca.fedeli@cea.fr> 2019-10-09 15:15:19 +0200
committerGravatar Luca Fedeli <luca.fedeli@cea.fr> 2019-10-09 15:15:19 +0200
commit431818ad7bb72bc5396c7a870024f310de6f055c (patch)
treea89da87860080f52e401d168a71b1e96ac40545f /Source/QED/QuantumSyncEngineWrapper.cpp
parent540773fa9cc32e546a8afd09627e75ddaa3a0cfd (diff)
downloadWarpX-431818ad7bb72bc5396c7a870024f310de6f055c.tar.gz
WarpX-431818ad7bb72bc5396c7a870024f310de6f055c.tar.zst
WarpX-431818ad7bb72bc5396c7a870024f310de6f055c.zip
Added functions to generate tables and evolve optical depth
Diffstat (limited to 'Source/QED/QuantumSyncEngineWrapper.cpp')
-rw-r--r--Source/QED/QuantumSyncEngineWrapper.cpp84
1 files changed, 81 insertions, 3 deletions
diff --git a/Source/QED/QuantumSyncEngineWrapper.cpp b/Source/QED/QuantumSyncEngineWrapper.cpp
index ce130bb62..544be075e 100644
--- a/Source/QED/QuantumSyncEngineWrapper.cpp
+++ b/Source/QED/QuantumSyncEngineWrapper.cpp
@@ -2,12 +2,9 @@
//This file provides a wrapper aroud the quantum_sync engine
//provided by the PICSAR library
-using namespace picsar::multi_physics;
-
// Functors ==================================
// Initialization of the optical depth
-
AMREX_GPU_DEVICE
amrex::Real
QuantumSynchrotronGetOpticalDepth::operator() () const
@@ -17,13 +14,94 @@ QuantumSynchrotronGetOpticalDepth::operator() () const
}
//____________________________________________
+// Evolution of the optical depth (returns true if
+// an event occurs)
+AMREX_GPU_DEVICE
+bool QuantumSynchrotronEvolveOpticalDepth::operator()(
+ amrex::Real px, amrex::Real py, amrex::Real pz,
+ amrex::Real ex, amrex::Real ey, amrex::Real ez,
+ amrex::Real bx, amrex::Real by, amrex::Real bz,
+ amrex::Real dt, amrex::Real& opt_depth) const
+{
+ bool has_event_happend = false;
+ amrex::Real dummy_lambda = 1.0;
+ amrex::Real unused_event_time = 0.0;
+
+ const auto table = picsar::multi_physics::lookup_1d<amrex::Real>
+ (innards->KKfunc_data.size(),
+ innards->KKfunc_coords.data(),
+ innards->KKfunc_data.data());
+
+ WarpXQuantumSynchrotronWrapper::internal_evolve_opt_depth_and_determine_event(
+ px, py, pz,
+ ex, ey, ez,
+ bx, by, bz,
+ dt, opt_depth,
+ has_event_happend, unused_event_time,
+ dummy_lambda,
+ table,
+ innards->ctrl);
+
+ return has_event_happend;
+}
+
// Factory class =============================
QuantumSynchrotronEngine::QuantumSynchrotronEngine(){}
+//Builds the functor to evolve the optical depth
QuantumSynchrotronGetOpticalDepth QuantumSynchrotronEngine::build_optical_depth_functor()
{
return QuantumSynchrotronGetOpticalDepth();
}
+//Builds the functor to evolve the optical depth
+QuantumSynchrotronEvolveOpticalDepth QuantumSynchrotronEngine::build_evolve_functor()
+{
+ AMREX_ALWAYS_ASSERT(lookup_tables_initialized);
+
+ return QuantumSynchrotronEvolveOpticalDepth(&innards);
+}
+
+//Initializes the Lookup tables using the default settings
+//provided by the library
+void QuantumSynchrotronEngine::computes_lookup_tables_default()
+{
+ //A control parameters structure
+ //with the default values provided by the library
+ WarpXQuantumSynchrotronWrapperCtrl ctrl_default;
+
+ computes_lookup_tables(ctrl_default);
+
+ lookup_tables_initialized = true;
+}
+
+bool QuantumSynchrotronEngine::are_lookup_tables_initialized() const
+{
+ return lookup_tables_initialized;
+}
+
+//Private function which actually computes the lookup tables
+void QuantumSynchrotronEngine::computes_lookup_tables(
+ WarpXQuantumSynchrotronWrapperCtrl ctrl)
+{
+ //Lambda is not actually used if S.I. units are enabled
+ WarpXQuantumSynchrotronWrapper qs_engine(std::move(DummyStruct()), 1.0, ctrl);
+
+ qs_engine.compute_dN_dt_lookup_table();
+ //qs_engine.compute_cumulative_pair_table();
+
+ auto qs_innards_picsar = qs_engine.export_innards();
+
+ //Copy data in a GPU-friendly data-structure
+ innards.ctrl = qs_innards_picsar.qs_ctrl;
+ innards.KKfunc_coords.assign(qs_innards_picsar.KKfunc_table_coords_ptr,
+ qs_innards_picsar.KKfunc_table_coords_ptr +
+ qs_innards_picsar.KKfunc_table_coords_how_many);
+ innards.KKfunc_data.assign(qs_innards_picsar.KKfunc_table_data_ptr,
+ qs_innards_picsar.KKfunc_table_data_ptr +
+ qs_innards_picsar.KKfunc_table_data_how_many);
+ //____
+}
+
//============================================