aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhotonParticleContainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/PhotonParticleContainer.cpp')
-rw-r--r--Source/Particles/PhotonParticleContainer.cpp45
1 files changed, 44 insertions, 1 deletions
diff --git a/Source/Particles/PhotonParticleContainer.cpp b/Source/Particles/PhotonParticleContainer.cpp
index 4a75ec9f3..a8a51723e 100644
--- a/Source/Particles/PhotonParticleContainer.cpp
+++ b/Source/Particles/PhotonParticleContainer.cpp
@@ -21,12 +21,35 @@ using namespace amrex;
PhotonParticleContainer::PhotonParticleContainer (AmrCore* amr_core, int ispecies,
const std::string& name)
: PhysicalParticleContainer(amr_core, ispecies, name)
-{}
+{
+
+ ParmParse pp(species_name);
+
+#ifdef WARPX_QED
+ //IF do_qed is enabled, find out if Breit Wheeler process is enabled
+ if(do_qed)
+ pp.query("do_qed_breit_wheeler", do_qed_breit_wheeler);
+
+ //Check for processes which do not make sense for photons
+ bool test_quantum_sync;
+ pp.query("do_qed_quantum_sync", test_quantum_sync);
+ AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
+ test_quantum_sync == 0,
+ "ERROR: do_qed_quantum_sync can be 1 for species NOT listed in particles.photon_species only!");
+ //_________________________________________________________
+#endif
+
+}
void PhotonParticleContainer::InitData()
{
AddParticles(0); // Note - add on level 0
+#ifdef WARPX_QED
+ if(do_qed_breit_wheeler)
+ InitTauBreitWheeler();
+#endif
+
if (maxLevel() > 0) {
Redistribute(); // We then redistribute
}
@@ -99,3 +122,23 @@ PhotonParticleContainer::Evolve (int lev,
t, dt);
}
+
+#ifdef WARPX_QED
+// A function to initialize the Tau component according to the BW engine
+void PhotonParticleContainer::InitTauBreitWheeler()
+{
+ BL_PROFILE("PhotonParticleContainer::InitOpticalDepth");
+ //Looping over all the particles
+ int num_levels = finestLevel() + 1;
+ for (int lev=0; lev < num_levels; ++lev)
+ for (WarpXParIter pti(*this, lev); pti.isValid(); ++pti){
+ auto taus = pti.GetAttribs(particle_comps["tau"]).dataPtr();
+ amrex::ParallelFor(
+ pti.numParticles(),
+ [=] AMREX_GPU_DEVICE (long i) {
+ taus[i] = warpx_breit_wheeler_engine::get_optical_depth();
+ }
+ );
+ }
+}
+#endif