diff options
-rw-r--r-- | Docs/source/running_cpp/parameters.rst | 4 | ||||
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 26 | ||||
-rw-r--r-- | Source/Particles/RigidInjectedParticleContainer.cpp | 6 | ||||
-rw-r--r-- | Source/WarpX.H | 1 | ||||
-rw-r--r-- | Source/WarpX.cpp | 2 |
5 files changed, 24 insertions, 15 deletions
diff --git a/Docs/source/running_cpp/parameters.rst b/Docs/source/running_cpp/parameters.rst index 7c71b2a86..ea5962321 100644 --- a/Docs/source/running_cpp/parameters.rst +++ b/Docs/source/running_cpp/parameters.rst @@ -386,6 +386,10 @@ Particle initialization It only works if `<species>.do_qed = 1`. Enables non-linear Breit-Wheeler process for this species. **Implementation of this feature is in progress. It requires to compile with QED=TRUE** +* ``warpx.E_external`` & ``warpx.B_external`` (list of `float`) optional (default `0.0`) + Two separate parameters which add a uniform E-field or B-field to each particle + which is then added to the field values gathered from the grid in the + PIC cycle. Laser initialization -------------------- diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index d10803320..79a93abda 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -993,12 +993,12 @@ PhysicalParticleContainer::FieldGather (int lev, const FArrayBox& byfab = By[pti]; const FArrayBox& bzfab = Bz[pti]; - Exp.assign(np,0.0); - Eyp.assign(np,0.0); - Ezp.assign(np,0.0); - Bxp.assign(np,0.0); - Byp.assign(np,0.0); - Bzp.assign(np,0.0); + Exp.assign(np,WarpX::E_external[0]); + Eyp.assign(np,WarpX::E_external[1]); + Ezp.assign(np,WarpX::E_external[2]); + Bxp.assign(np,WarpX::B_external[0]); + Byp.assign(np,WarpX::B_external[1]); + Bzp.assign(np,WarpX::B_external[2]); // // copy data from particle container to temp arrays @@ -1129,9 +1129,10 @@ PhysicalParticleContainer::Evolve (int lev, exfab, eyfab, ezfab, bxfab, byfab, bzfab); } - Exp.assign(np,0.0); - Eyp.assign(np,0.0); - Ezp.assign(np,0.0); + Exp.assign(np,WarpX::E_external[0]); + Eyp.assign(np,WarpX::E_external[1]); + Ezp.assign(np,WarpX::E_external[2]); + Bxp.assign(np,WarpX::B_external[0]); Byp.assign(np,WarpX::B_external[1]); Bzp.assign(np,WarpX::B_external[2]); @@ -1652,9 +1653,10 @@ PhysicalParticleContainer::PushP (int lev, Real dt, const FArrayBox& byfab = By[pti]; const FArrayBox& bzfab = Bz[pti]; - Exp.assign(np,0.0); - Eyp.assign(np,0.0); - Ezp.assign(np,0.0); + Exp.assign(np,WarpX::E_external[0]); + Eyp.assign(np,WarpX::E_external[1]); + Ezp.assign(np,WarpX::E_external[2]); + Bxp.assign(np,WarpX::B_external[0]); Byp.assign(np,WarpX::B_external[1]); Bzp.assign(np,WarpX::B_external[2]); diff --git a/Source/Particles/RigidInjectedParticleContainer.cpp b/Source/Particles/RigidInjectedParticleContainer.cpp index 891ade76d..afc9c2625 100644 --- a/Source/Particles/RigidInjectedParticleContainer.cpp +++ b/Source/Particles/RigidInjectedParticleContainer.cpp @@ -390,9 +390,9 @@ RigidInjectedParticleContainer::PushP (int lev, Real dt, const FArrayBox& byfab = By[pti]; const FArrayBox& bzfab = Bz[pti]; - Exp.assign(np,0.0); - Eyp.assign(np,0.0); - Ezp.assign(np,0.0); + Exp.assign(np,WarpX::E_external[0]); + Eyp.assign(np,WarpX::E_external[1]); + Ezp.assign(np,WarpX::E_external[2]); Bxp.assign(np,WarpX::B_external[0]); Byp.assign(np,WarpX::B_external[1]); Bzp.assign(np,WarpX::B_external[2]); diff --git a/Source/WarpX.H b/Source/WarpX.H index f5723f92e..376cd0517 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -76,6 +76,7 @@ public: // External fields static amrex::Vector<amrex::Real> B_external; + static amrex::Vector<amrex::Real> E_external; // Initial field on grid static amrex::Vector<amrex::Real> E_external_grid; diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index c22c30ac1..ac1fd520c 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -25,6 +25,7 @@ using namespace amrex; Vector<Real> WarpX::B_external(3, 0.0); +Vector<Real> WarpX::E_external(3, 0.0); Vector<Real> WarpX::E_external_grid(3, 0.0); Vector<Real> WarpX::B_external_grid(3, 0.0); @@ -294,6 +295,7 @@ WarpX::ReadParameters () zmax_plasma_to_compute_max_step); pp.queryarr("B_external", B_external); + pp.queryarr("E_external", E_external); pp.queryarr("E_external_grid", E_external_grid); pp.queryarr("B_external_grid", B_external_grid); |