diff options
Diffstat (limited to 'Source/Particles/PhotonParticleContainer.cpp')
-rw-r--r-- | Source/Particles/PhotonParticleContainer.cpp | 45 |
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 |