aboutsummaryrefslogtreecommitdiff
path: root/Source/QED/QuantumSyncEngineWrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/QED/QuantumSyncEngineWrapper.cpp')
-rw-r--r--Source/QED/QuantumSyncEngineWrapper.cpp86
1 files changed, 82 insertions, 4 deletions
diff --git a/Source/QED/QuantumSyncEngineWrapper.cpp b/Source/QED/QuantumSyncEngineWrapper.cpp
index 6e57f8709..90bd9cefc 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,14 +14,95 @@ 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();
}
-//============================================ \ No newline at end of file
+//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);
+ //____
+}
+
+//============================================