aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp14
-rw-r--r--Source/Particles/Pusher/UpdateMomentumBorisWithRadiationReaction.H6
-rw-r--r--Source/Particles/RigidInjectedParticleContainer.cpp12
-rw-r--r--Source/Utils/WarpXAlgorithmSelection.H3
-rw-r--r--Source/Utils/WarpXAlgorithmSelection.cpp1
5 files changed, 32 insertions, 4 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp
index 4bc0ee16e..95f2243b3 100644
--- a/Source/Particles/PhysicalParticleContainer.cpp
+++ b/Source/Particles/PhysicalParticleContainer.cpp
@@ -15,6 +15,7 @@
#include <UpdatePosition.H>
#include <UpdateMomentumBoris.H>
#include <UpdateMomentumVay.H>
+#include <UpdateMomentumBorisWithRadiationReaction.H>
using namespace amrex;
@@ -1584,6 +1585,19 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti,
ux[i], uy[i], uz[i], dt );
}
);
+ } else if (WarpX::particle_pusher_algo == ParticlePusherAlgo::BorisRR) {
+ amrex::ParallelFor(
+ pti.numParticles(),
+ [=] AMREX_GPU_DEVICE (long i) {
+ Real qp = q;
+ if (ion_lev){ qp *= ion_lev[i]; }
+ UpdateMomentumBorisWithRadiationReaction( ux[i], uy[i], uz[i],
+ Ex[i], Ey[i], Ez[i], Bx[i],
+ By[i], Bz[i], qp, m, dt);
+ UpdatePosition( x[i], y[i], z[i],
+ ux[i], uy[i], uz[i], dt );
+ }
+ );
} else {
amrex::Abort("Unknown particle pusher");
};
diff --git a/Source/Particles/Pusher/UpdateMomentumBorisWithRadiationReaction.H b/Source/Particles/Pusher/UpdateMomentumBorisWithRadiationReaction.H
index dd7c41a94..dbb5c02da 100644
--- a/Source/Particles/Pusher/UpdateMomentumBorisWithRadiationReaction.H
+++ b/Source/Particles/Pusher/UpdateMomentumBorisWithRadiationReaction.H
@@ -41,9 +41,9 @@ void UpdateMomentumBorisWithRadiationReaction(
const amrex::Real inv_gamma_n = 1.0/gamma_n;
//Estimation of the velocity at intermediate (integer) time
- const amrex::Real vx_n = ux_n*inv_gamma;
- const amrex::Real vy_n = uy_n*inv_gamma;
- const amrex::Real vz_n = uz_n*inv_gamma;
+ const amrex::Real vx_n = ux_n*inv_gamma_n;
+ const amrex::Real vy_n = uy_n*inv_gamma_n;
+ const amrex::Real vz_n = uz_n*inv_gamma_n;
//Lorentz force
const amrex::Real flx = q*(Ex + vy_n*Bz - vz_n*By);
diff --git a/Source/Particles/RigidInjectedParticleContainer.cpp b/Source/Particles/RigidInjectedParticleContainer.cpp
index cd5e34770..fd002a9af 100644
--- a/Source/Particles/RigidInjectedParticleContainer.cpp
+++ b/Source/Particles/RigidInjectedParticleContainer.cpp
@@ -13,6 +13,7 @@
#include <WarpXAlgorithmSelection.H>
#include <UpdateMomentumBoris.H>
#include <UpdateMomentumVay.H>
+#include <UpdateMomentumBorisWithRadiationReaction.H>
using namespace amrex;
@@ -443,6 +444,17 @@ RigidInjectedParticleContainer::PushP (int lev, Real dt,
Expp[i], Eypp[i], Ezpp[i], Bxpp[i], Bypp[i], Bzpp[i], q, m, dt);
}
);
+ } else if (WarpX::particle_pusher_algo == ParticlePusherAlgo::BorisRR) {
+ amrex::ParallelFor(
+ pti.numParticles(),
+ [=] AMREX_GPU_DEVICE (long i) {
+ UpdateMomentumBorisWithRadiationReaction(
+ uxpp[i], uypp[i], uzpp[i],
+ Expp[i], Eypp[i], Ezpp[i],
+ Bxpp[i], Bypp[i], Bzpp[i],
+ q, m, dt);
+ }
+ );
} else {
amrex::Abort("Unknown particle pusher");
};
diff --git a/Source/Utils/WarpXAlgorithmSelection.H b/Source/Utils/WarpXAlgorithmSelection.H
index 54c721abf..35a15c6fd 100644
--- a/Source/Utils/WarpXAlgorithmSelection.H
+++ b/Source/Utils/WarpXAlgorithmSelection.H
@@ -14,7 +14,8 @@ struct MaxwellSolverAlgo {
struct ParticlePusherAlgo {
enum {
Boris = 0,
- Vay = 1
+ Vay = 1,
+ BorisRR = 2
};
};
diff --git a/Source/Utils/WarpXAlgorithmSelection.cpp b/Source/Utils/WarpXAlgorithmSelection.cpp
index 8a6ff6dbf..45f94f52f 100644
--- a/Source/Utils/WarpXAlgorithmSelection.cpp
+++ b/Source/Utils/WarpXAlgorithmSelection.cpp
@@ -18,6 +18,7 @@ const std::map<std::string, int> maxwell_solver_algo_to_int = {
const std::map<std::string, int> particle_pusher_algo_to_int = {
{"boris", ParticlePusherAlgo::Boris },
{"vay", ParticlePusherAlgo::Vay },
+ {"borisRR", ParticlePusherAlgo::BorisRR },
{"default", ParticlePusherAlgo::Boris }
};