aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Luca Fedeli <luca.fedeli@cea.fr> 2019-10-29 19:46:26 +0100
committerGravatar Luca Fedeli <luca.fedeli@cea.fr> 2019-10-29 19:46:26 +0100
commitdbf66f45b23f2e93dfcba09792ee0339e4a9cc55 (patch)
treef4d88cdefad91a08dc400e0e532fc91a29130796
parent5ff549de3d8f9aad8c11ca49b6827d5e1cef184d (diff)
parent984ace2b6b93b6ba009ce8776bf547ea05563357 (diff)
downloadWarpX-dbf66f45b23f2e93dfcba09792ee0339e4a9cc55.tar.gz
WarpX-dbf66f45b23f2e93dfcba09792ee0339e4a9cc55.tar.zst
WarpX-dbf66f45b23f2e93dfcba09792ee0339e4a9cc55.zip
merged with bugfixing PR
-rw-r--r--Source/QED/BreitWheelerEngineInnards.H2
-rw-r--r--Source/QED/BreitWheelerEngineWrapper.H68
-rw-r--r--Source/QED/BreitWheelerEngineWrapper.cpp6
-rw-r--r--Source/QED/QuantumSyncEngineWrapper.H64
4 files changed, 76 insertions, 64 deletions
diff --git a/Source/QED/BreitWheelerEngineInnards.H b/Source/QED/BreitWheelerEngineInnards.H
index 6c5edcff6..2a7026989 100644
--- a/Source/QED/BreitWheelerEngineInnards.H
+++ b/Source/QED/BreitWheelerEngineInnards.H
@@ -19,7 +19,7 @@ struct BreitWheelerEngineInnards
// Control parameters (a POD struct)
picsar::multi_physics::breit_wheeler_engine_ctrl<amrex::Real> ctrl;
- //Lookup table data (should stay on GPU)
+ //Lookup table data
amrex::Gpu::ManagedVector<amrex::Real> TTfunc_coords;
amrex::Gpu::ManagedVector<amrex::Real> TTfunc_data;
diff --git a/Source/QED/BreitWheelerEngineWrapper.H b/Source/QED/BreitWheelerEngineWrapper.H
index d2a04090e..e5dd63aed 100644
--- a/Source/QED/BreitWheelerEngineWrapper.H
+++ b/Source/QED/BreitWheelerEngineWrapper.H
@@ -72,22 +72,17 @@ class BreitWheelerEvolveOpticalDepth
{
public:
/**
- * Constructor acquires pointers to control parameters and
+ * Constructor acquires a reference to control parameters and
* lookup tables data.
* lookup_table uses non-owning vectors under the hood. So no new data
* allocations should be triggered on GPU
*/
- BreitWheelerEvolveOpticalDepth(
- const PicsarBreitWheelerCtrl t_ctrl,
- size_t TTfunc_size,
- amrex::Real* TTfunc_coords,
- amrex::Real* TTfunc_data):
- ctrl{t_ctrl},
- lookup_table{
- TTfunc_size,
- TTfunc_coords,
- TTfunc_data
- }{};
+ BreitWheelerEvolveOpticalDepth(BreitWheelerEngineInnards& r_innards):
+ ctrl{r_innards.ctrl},
+ m_TTfunc_size{r_innards.TTfunc_coords.size()},
+ m_p_TTfunc_coords{r_innards.TTfunc_coords.dataPtr()},
+ m_p_TTfunc_data{r_innards.TTfunc_data.dataPtr()}
+ {};
/**
* Evolves the optical depth. It can be used on GPU.
@@ -120,7 +115,10 @@ public:
dt, opt_depth,
has_event_happend, unused_event_time,
dummy_lambda,
- lookup_table,
+ picsar::multi_physics::lookup_1d<amrex::Real>{
+ m_TTfunc_size,
+ m_p_TTfunc_coords,
+ m_p_TTfunc_data},
ctrl);
return has_event_happend;
@@ -131,7 +129,11 @@ private:
const amrex::Real dummy_lambda{1.0};
const PicsarBreitWheelerCtrl ctrl;
- const picsar::multi_physics::lookup_1d<amrex::Real> lookup_table;
+
+ //lookup table data
+ size_t m_TTfunc_size;
+ amrex::Real* m_p_TTfunc_coords;
+ amrex::Real* m_p_TTfunc_data;
};
/**
@@ -148,20 +150,14 @@ public:
* allocations should be triggered on GPU
*/
BreitWheelerGeneratePairs(
- const PicsarBreitWheelerCtrl t_ctrl,
- size_t cum_distrib_coords_1_size,
- size_t cum_distrib_coords_2_size,
- amrex::Real* p_cum_distrib_coords_1,
- amrex::Real* p_cum_distrib_coords_2,
- amrex::Real* p_cum_distrib_data):
- ctrl{t_ctrl},
- lookup_table{
- cum_distrib_coords_1_size,
- p_cum_distrib_coords_1,
- cum_distrib_coords_2_size,
- p_cum_distrib_coords_2,
- p_cum_distrib_data}
- {};
+ BreitWheelerEngineInnards& r_innards):
+ ctrl{r_innards.ctrl},
+ m_cum_distrib_coords_1_size{r_innards.cum_distrib_coords_1.size()},
+ m_cum_distrib_coords_2_size{r_innards.cum_distrib_coords_2.size()},
+ m_p_distrib_coords_1{r_innards.cum_distrib_coords_1.data()},
+ m_p_distrib_coords_2{r_innards.cum_distrib_coords_2.data()},
+ m_p_cum_distrib_data{r_innards.cum_distrib_data.data()
+ }{};
/**
* Generates sampling (template parameter) pairs according to Breit Wheeler process.
@@ -201,7 +197,13 @@ public:
p_px, p_py, p_pz,
e_weight, p_weight,
dummy_lambda,
- lookup_table,
+ picsar::multi_physics::lookup_2d<amrex::Real>{
+ m_cum_distrib_coords_1_size,
+ m_p_distrib_coords_1,
+ m_cum_distrib_coords_2_size,
+ m_p_distrib_coords_2,
+ m_p_cum_distrib_data
+ },
ctrl,
rand_zero_one_minus_epsi.data());
}
@@ -211,7 +213,13 @@ private:
const amrex::Real dummy_lambda{1.0};
const PicsarBreitWheelerCtrl ctrl;
- const picsar::multi_physics::lookup_2d<amrex::Real> lookup_table;
+
+ //lookup table data
+ size_t m_cum_distrib_coords_1_size;
+ size_t m_cum_distrib_coords_2_size;
+ amrex::Real* m_p_distrib_coords_1;
+ amrex::Real* m_p_distrib_coords_2;
+ amrex::Real* m_p_cum_distrib_data;
};
// Factory class =============================
diff --git a/Source/QED/BreitWheelerEngineWrapper.cpp b/Source/QED/BreitWheelerEngineWrapper.cpp
index 78ad0f9de..7d4f5e854 100644
--- a/Source/QED/BreitWheelerEngineWrapper.cpp
+++ b/Source/QED/BreitWheelerEngineWrapper.cpp
@@ -26,11 +26,7 @@ BreitWheelerEngine::build_evolve_functor ()
{
AMREX_ALWAYS_ASSERT(lookup_tables_initialized);
- return BreitWheelerEvolveOpticalDepth(
- innards.ctrl,
- innards.TTfunc_coords.size(),
- innards.TTfunc_coords.data(),
- innards.TTfunc_data.data());
+ return BreitWheelerEvolveOpticalDepth(innards);
}
BreitWheelerGeneratePairs
diff --git a/Source/QED/QuantumSyncEngineWrapper.H b/Source/QED/QuantumSyncEngineWrapper.H
index 7d6657988..6afcd9313 100644
--- a/Source/QED/QuantumSyncEngineWrapper.H
+++ b/Source/QED/QuantumSyncEngineWrapper.H
@@ -78,16 +78,12 @@ public:
* allocations should be triggered on GPU
*/
QuantumSynchrotronEvolveOpticalDepth(
- const PicsarQuantumSynchrotronCtrl t_ctrl,
- size_t KKfunc_size,
- amrex::Real* p_KKfunc_coords,
- amrex::Real* p_KKfunc_data):
- ctrl{t_ctrl},
- lookup_table{
- KKfunc_size,
- p_KKfunc_coords,
- p_KKfunc_data
- }{};
+ QuantumSynchrotronEngineInnards& r_innards):
+ ctrl{r_innards.ctrl},
+ m_KKfunc_size{r_innards.KKfunc_coords.size()},
+ m_p_KKfunc_coords{r_innards.KKfunc_coords.dataPtr()},
+ m_p_KKfunc_data{r_innards.KKfunc_data.dataPtr()}
+ {};
/**
* Evolves the optical depth. It can be used on GPU.
@@ -120,7 +116,10 @@ public:
dt, opt_depth,
has_event_happend, unused_event_time,
dummy_lambda,
- lookup_table,
+ picsar::multi_physics::lookup_1d<amrex::Real>{
+ m_KKfunc_size,
+ m_p_KKfunc_coords,
+ m_p_KKfunc_data},
ctrl);
return has_event_happend;
@@ -131,7 +130,11 @@ private:
const amrex::Real dummy_lambda{1.0};
const PicsarQuantumSynchrotronCtrl ctrl;
- const picsar::multi_physics::lookup_1d<amrex::Real> lookup_table;
+
+ //lookup table data
+ size_t m_KKfunc_size;
+ amrex::Real* m_p_KKfunc_coords;
+ amrex::Real* m_p_KKfunc_data;
};
/**
@@ -148,20 +151,14 @@ public:
* allocations should be triggered on GPU
*/
QuantumSynchrotronGeneratePhotonAndUpdateMomentum(
- const PicsarQuantumSynchrotronCtrl t_ctrl,
- size_t cum_distrib_coords_1_size,
- size_t cum_distrib_coords_2_size,
- amrex::Real* p_cum_distrib_coords_1,
- amrex::Real* p_cum_distrib_coords_2,
- amrex::Real* p_cum_distrib_data):
- ctrl{t_ctrl},
- lookup_table{
- cum_distrib_coords_1_size,
- p_cum_distrib_coords_1,
- cum_distrib_coords_2_size,
- p_cum_distrib_coords_2,
- p_cum_distrib_data
- }{};
+ QuantumSynchrotronEngineInnards& r_innards):
+ ctrl{r_innards.ctrl},
+ m_cum_distrib_coords_1_size{r_innards.cum_distrib_coords_1.size()},
+ m_cum_distrib_coords_2_size{r_innards.cum_distrib_coords_2.size()},
+ m_p_distrib_coords_1{r_innards.cum_distrib_coords_1.data()},
+ m_p_distrib_coords_2{r_innards.cum_distrib_coords_2.data()},
+ m_p_cum_distrib_data{r_innards.cum_distrib_data.data()}
+ {};
/**
* Generates sampling (template parameter) photons according to Quantum Synchrotron process.
@@ -198,7 +195,12 @@ public:
g_px, g_py, g_pz,
g_weight,
dummy_lambda,
- lookup_table,
+ picsar::multi_physics::lookup_2d<amrex::Real>{
+ m_cum_distrib_coords_1_size,
+ m_p_distrib_coords_1,
+ m_cum_distrib_coords_2_size,
+ m_p_distrib_coords_2,
+ m_p_cum_distrib_data},
ctrl,
rand_zero_one_minus_epsi.data());
}
@@ -208,7 +210,13 @@ private:
const amrex::Real dummy_lambda{1.0};
const PicsarQuantumSynchrotronCtrl ctrl;
- const picsar::multi_physics::lookup_2d<amrex::Real> lookup_table;
+
+ //lookup table data
+ size_t m_cum_distrib_coords_1_size;
+ size_t m_cum_distrib_coords_2_size;
+ amrex::Real* m_p_distrib_coords_1;
+ amrex::Real* m_p_distrib_coords_2;
+ amrex::Real* m_p_cum_distrib_data;
};
// Factory class =============================