aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Particles/MultiParticleContainer.H7
-rw-r--r--Source/Particles/MultiParticleContainer.cpp25
-rw-r--r--Source/QED/BreitWheelerEngineWrapper.cpp34
-rw-r--r--Source/QED/BreitWheelerEngineWrapper.h12
4 files changed, 75 insertions, 3 deletions
diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H
index 6bf53d6ec..da2b90cef 100644
--- a/Source/Particles/MultiParticleContainer.H
+++ b/Source/Particles/MultiParticleContainer.H
@@ -3,6 +3,7 @@
#define WARPX_ParticleContainer_H_
#include <AMReX_Particles.H>
+#include <AMReX_ParallelDescriptor.H>
#include <WarpXParticleContainer.H>
#include <PhysicalParticleContainer.H>
#include <RigidInjectedParticleContainer.H>
@@ -222,6 +223,12 @@ protected:
//Initialize QED engines and provides smart pointers
//to species who need QED processes
void InitQED ();
+
+ bool someone_has_quantum_sync = false;
+ bool someone_has_breit_wheeler = false;
+
+ void InitQuantumSync ();
+ void InitBreitWheeler ();
#endif
private:
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp
index a5632dede..93176e5e7 100644
--- a/Source/Particles/MultiParticleContainer.cpp
+++ b/Source/Particles/MultiParticleContainer.cpp
@@ -1,7 +1,6 @@
#include <limits>
#include <algorithm>
#include <string>
-#include <memory>
#include <MultiParticleContainer.H>
#include <WarpX_f.H>
@@ -740,11 +739,35 @@ void MultiParticleContainer::InitQED ()
if(pc->has_quantum_sync()){
pc->set_quantum_sync_engine_ptr
(std::make_shared<QuantumSynchrotronEngine>(qs_engine));
+ someone_has_quantum_sync = true;
}
if(pc->has_breit_wheeler()){
pc->set_breit_wheeler_engine_ptr
(std::make_shared<BreitWheelerEngine>(bw_engine));
+ someone_has_breit_wheeler = true;
}
}
+
+ if(someone_has_quantum_sync)
+ InitQuantumSync();
+
+ if(someone_has_breit_wheeler)
+ InitBreitWheeler();
+
+}
+
+void MultiParticleContainer::InitQuantumSync ()
+{
+ if(ParallelDescriptor::IOProcessor()){
+ qs_engine.computes_lookup_tables_default();
+ }
+}
+
+void MultiParticleContainer::InitBreitWheeler ()
+{
+ if(ParallelDescriptor::IOProcessor()){
+ bw_engine.computes_lookup_tables_default();
+ bw_engine.write_lookup_tables("qed_bw_lookup.bin");
+ }
}
#endif
diff --git a/Source/QED/BreitWheelerEngineWrapper.cpp b/Source/QED/BreitWheelerEngineWrapper.cpp
index 97934589a..36d19838c 100644
--- a/Source/QED/BreitWheelerEngineWrapper.cpp
+++ b/Source/QED/BreitWheelerEngineWrapper.cpp
@@ -82,6 +82,40 @@ bool BreitWheelerEngine::are_lookup_tables_initialized () const
return lookup_tables_initialized;
}
+
+// Writes lookup tables on disk in 'folder'
+// return false if it fails. */
+bool BreitWheelerEngine::write_lookup_tables (
+ std::string folder) const
+{
+ if(!lookup_tables_initialized)
+ return false;
+
+ auto all_data = make_tuple(
+ std::ref(innards.ctrl.chi_phot_min),
+ std::ref(innards.ctrl.chi_phot_tdndt_min),
+ std::ref(innards.ctrl.chi_phot_tdndt_max),
+ std::ref(innards.ctrl.chi_phot_tdndt_how_many),
+ std::ref(innards.ctrl.chi_phot_tpair_min),
+ std::ref(innards.ctrl.chi_phot_tpair_max),
+ std::ref(innards.ctrl.chi_phot_tpair_how_many),
+ std::ref(innards.ctrl.chi_frac_tpair_how_many),
+ std::ref(innards.TTfunc_coords),
+ std::ref(innards.TTfunc_data));
+
+
+
+
+ char* data_dump = new char(buf_size);
+
+ size_t count = 0;
+ auto copy_and_advance = [&count] (char* source, char*dest, size_t size) {
+ count += size;
+ };
+
+ return true;
+}
+
//Private function which actually computes the lookup tables
void BreitWheelerEngine::computes_lookup_tables (
WarpXBreitWheelerWrapperCtrl ctrl)
diff --git a/Source/QED/BreitWheelerEngineWrapper.h b/Source/QED/BreitWheelerEngineWrapper.h
index aaa94c0ec..a841f48a5 100644
--- a/Source/QED/BreitWheelerEngineWrapper.h
+++ b/Source/QED/BreitWheelerEngineWrapper.h
@@ -3,6 +3,10 @@
#include "QedWrapperCommons.h"
+#include<string>
+#include<vector>
+#include<tuple>
+
//BW ENGINE from PICSAR
#include "breit_wheeler_engine.hpp"
@@ -20,8 +24,8 @@ struct BreitWheelerEngineInnards
WarpXBreitWheelerWrapperCtrl ctrl;
//Lookup table data
- amrex::Gpu::ManagedDeviceVector<amrex::Real> TTfunc_coords;
- amrex::Gpu::ManagedDeviceVector<amrex::Real> TTfunc_data;
+ amrex::Gpu::ManagedVector<amrex::Real> TTfunc_coords;
+ amrex::Gpu::ManagedVector<amrex::Real> TTfunc_data;
//______
};
@@ -84,6 +88,10 @@ public:
/* \brief Checks if lookup tables are properly initialized */
bool are_lookup_tables_initialized () const;
+ /* \brief Writes lookup tables on disk in 'file'
+ * return false if it fails. */
+ bool write_lookup_tables (std::string file) const;
+
private:
bool lookup_tables_initialized = false;