diff options
-rw-r--r-- | Source/Particles/MultiParticleContainer.H | 7 | ||||
-rw-r--r-- | Source/Particles/MultiParticleContainer.cpp | 25 | ||||
-rw-r--r-- | Source/QED/BreitWheelerEngineWrapper.cpp | 34 | ||||
-rw-r--r-- | Source/QED/BreitWheelerEngineWrapper.h | 12 |
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; |