aboutsummaryrefslogtreecommitdiff
path: root/Source/QED/BreitWheelerEngineWrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/QED/BreitWheelerEngineWrapper.cpp')
-rw-r--r--Source/QED/BreitWheelerEngineWrapper.cpp185
1 files changed, 112 insertions, 73 deletions
diff --git a/Source/QED/BreitWheelerEngineWrapper.cpp b/Source/QED/BreitWheelerEngineWrapper.cpp
index c58c652e5..327b76411 100644
--- a/Source/QED/BreitWheelerEngineWrapper.cpp
+++ b/Source/QED/BreitWheelerEngineWrapper.cpp
@@ -1,4 +1,13 @@
#include "BreitWheelerEngineWrapper.H"
+
+#include "QedTableParserHelperFunctions.H"
+
+#include <utility>
+
+using namespace std;
+using namespace QedUtils;
+using namespace amrex;
+
//This file provides a wrapper aroud the breit_wheeler engine
//provided by the PICSAR library
@@ -7,13 +16,15 @@
BreitWheelerEngine::BreitWheelerEngine (){}
//Builds the functor to initialize the optical depth
-BreitWheelerGetOpticalDepth BreitWheelerEngine::build_optical_depth_functor ()
+BreitWheelerGetOpticalDepth
+BreitWheelerEngine::build_optical_depth_functor ()
{
return BreitWheelerGetOpticalDepth();
}
//Builds the functor to evolve the optical depth
-BreitWheelerEvolveOpticalDepth BreitWheelerEngine::build_evolve_functor ()
+BreitWheelerEvolveOpticalDepth
+BreitWheelerEngine::build_evolve_functor ()
{
AMREX_ALWAYS_ASSERT(lookup_tables_initialized);
@@ -21,7 +32,8 @@ BreitWheelerEvolveOpticalDepth BreitWheelerEngine::build_evolve_functor ()
}
//Builds the functor to generate the pairs
-BreitWheelerGeneratePairs BreitWheelerEngine::build_pair_functor ()
+BreitWheelerGeneratePairs
+BreitWheelerEngine::build_pair_functor ()
{
AMREX_ALWAYS_ASSERT(lookup_tables_initialized);
@@ -34,44 +46,102 @@ bool BreitWheelerEngine::are_lookup_tables_initialized () const
}
/* \brief Reads lookup tables from 'file' on disk */
-void BreitWheelerEngine::read_lookup_tables (std::string file)
+bool
+BreitWheelerEngine::init_lookup_tables_from_raw_data (
+ const vector<char>& raw_data)
{
- std::ifstream ifile(file, std::ios::in | std::ios::binary);
+ const char* p_data = raw_data.data();
+ const char* const p_last = &raw_data.back();
+ bool is_ok;
//Header (control parameters)
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_min),
- sizeof(innards.ctrl.chi_phot_min));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tdndt_min),
- sizeof(innards.ctrl.chi_phot_tdndt_min));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tdndt_max),
- sizeof(innards.ctrl.chi_phot_tdndt_max));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tdndt_how_many),
- sizeof(innards.ctrl.chi_phot_tdndt_how_many));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tpair_min),
- sizeof(innards.ctrl.chi_phot_tpair_min));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tpair_max),
- sizeof(innards.ctrl.chi_phot_tpair_max));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_phot_tpair_how_many),
- sizeof(innards.ctrl.chi_phot_tpair_how_many));
- ifile.read(reinterpret_cast<char*>(&innards.ctrl.chi_frac_tpair_how_many),
- sizeof(innards.ctrl.chi_frac_tpair_how_many));
- //_______
+ tie(is_ok, innards.ctrl.chi_phot_min, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_min)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tdndt_min, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tdndt_min)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tdndt_max, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tdndt_max)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tdndt_how_many, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tdndt_how_many)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tpair_min, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tpair_min)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tpair_max, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tpair_max)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_phot_tpair_how_many, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_phot_tpair_how_many)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ tie(is_ok, innards.ctrl.chi_frac_tpair_how_many, p_data) =
+ parse_raw_data<decltype(innards.ctrl.chi_frac_tpair_how_many)>(
+ p_data, p_last);
+ if(!is_ok) return false;
+
+ //___________________________
//Data
- size_t size_buf = sizeof(amrex::Real)*innards.ctrl.chi_phot_tdndt_how_many;
- char* data_buf = new char(size_buf);
- ifile.read(data_buf, size_buf);
- innards.TTfunc_coords.assign((amrex::Real*)data_buf,
- (amrex::Real*)data_buf + size_buf);
- ifile.read(data_buf, size_buf);
- innards.TTfunc_data.assign((amrex::Real*)data_buf,
- (amrex::Real*)data_buf + size_buf);
- delete[] data_buf;
- //_______
-
- ifile.close();
-
+ vector<Real> tndt_coords(innards.ctrl.chi_phot_tdndt_how_many);
+ vector<Real> tndt_data(innards.ctrl.chi_phot_tdndt_how_many);
+ vector<Real> cum_tab_coords1(innards.ctrl.chi_phot_tpair_how_many);
+ vector<Real> cum_tab_coords2(innards.ctrl.chi_frac_tpair_how_many);
+ vector<Real> cum_tab_data(innards.ctrl.chi_phot_tpair_how_many*
+ innards.ctrl.chi_frac_tpair_how_many);
+
+ tie(is_ok, tndt_coords, p_data) =
+ parse_raw_data_vec<Real>(
+ p_data, tndt_coords.size(), p_last);
+ if(!is_ok) return false;
+ innards.TTfunc_coords.assign(tndt_coords.begin(), tndt_coords.end());
+
+ tie(is_ok, tndt_data, p_data) =
+ parse_raw_data_vec<Real>(
+ p_data, tndt_data.size(), p_last);
+ if(!is_ok) return false;
+ innards.TTfunc_data.assign(tndt_data.begin(), tndt_data.end());
+
+ tie(is_ok, cum_tab_coords1, p_data) =
+ parse_raw_data_vec<Real>(
+ p_data, cum_tab_coords1.size(), p_last);
+ if(!is_ok) return false;
+ innards.cum_distrib_coords_1.assign(
+ cum_tab_coords1.begin(), cum_tab_coords1.end());
+
+ tie(is_ok, cum_tab_coords2, p_data) =
+ parse_raw_data_vec<Real>(
+ p_data, cum_tab_coords2.size(), p_last);
+ if(!is_ok) return false;
+ innards.cum_distrib_coords_2.assign(
+ cum_tab_coords2.begin(), cum_tab_coords2.end());
+
+ tie(is_ok, cum_tab_data, p_data) =
+ parse_raw_data_vec<Real>(
+ p_data, cum_tab_data.size(), p_last);
+ if(!is_ok) return false;
+ innards.cum_distrib_data.assign(
+ cum_tab_data.begin(), cum_tab_data.end());
+
+ //___________________________
lookup_tables_initialized = true;
+
+ return true;
}
@@ -101,56 +171,25 @@ void BreitWheelerEngine::compute_custom_lookup_tables (
/* \brief Writes lookup tables on disk in 'file'
* return false if it fails. */
-bool BreitWheelerEngine::write_lookup_tables (
- std::string file) const
+std::vector<char> export_lookup_tables_data () const
{
if(!lookup_tables_initialized)
- return false;
-
- std::ofstream of(file, std::ios::out | std::ios::binary);
+ return std::vector<char>;
- //Header (control parameters)
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_min),
- sizeof(innards.ctrl.chi_phot_min));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tdndt_min),
- sizeof(innards.ctrl.chi_phot_tdndt_min));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tdndt_max),
- sizeof(innards.ctrl.chi_phot_tdndt_max));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tdndt_how_many),
- sizeof(innards.ctrl.chi_phot_tdndt_how_many));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tpair_min),
- sizeof(innards.ctrl.chi_phot_tpair_min));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tpair_max),
- sizeof(innards.ctrl.chi_phot_tpair_max));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_phot_tpair_how_many),
- sizeof(innards.ctrl.chi_phot_tpair_how_many));
- of.write(reinterpret_cast<const char*>(&innards.ctrl.chi_frac_tpair_how_many),
- sizeof(innards.ctrl.chi_frac_tpair_how_many));
- //_______
-
- //Data
- of.write(reinterpret_cast<const char*>(innards.TTfunc_coords.dataPtr()),
- sizeof(amrex::Real)*innards.TTfunc_coords.size());
- of.write(reinterpret_cast<const char*>(innards.TTfunc_data.dataPtr()),
- sizeof(amrex::Real)*innards.TTfunc_data.size());
- // TODO: add other table
- //_______
-
- of.close();
-
- return true;
+ //TODO
+ return std::vector<char>;
}
//Private function which actually computes the lookup tables
void BreitWheelerEngine::computes_lookup_tables (
- WarpXBreitWheelerWrapperCtrl ctrl)
+ PicsarBreitWheelerCtrl ctrl)
{
//Lambda is not actually used if S.I. units are enabled
- WarpXBreitWheelerWrapper bw_engine(
+ PicsarBreitWheelerEngine bw_engine(
std::move(QedUtils::DummyStruct()), 1.0, ctrl);
bw_engine.compute_dN_dt_lookup_table();
- //bw_engine.compute_cumulative_pair_table();
+ bw_engine.compute_cumulative_pair_table();
auto bw_innards_picsar = bw_engine.export_innards();