aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/RigidInjectedParticleContainer.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/RigidInjectedParticleContainer.H')
-rw-r--r--Source/Particles/RigidInjectedParticleContainer.H81
1 files changed, 81 insertions, 0 deletions
diff --git a/Source/Particles/RigidInjectedParticleContainer.H b/Source/Particles/RigidInjectedParticleContainer.H
new file mode 100644
index 000000000..8a9ac9e6e
--- /dev/null
+++ b/Source/Particles/RigidInjectedParticleContainer.H
@@ -0,0 +1,81 @@
+#ifndef WARPX_RigidInjectedParticleContainer_H_
+#define WARPX_RigidInjectedParticleContainer_H_
+
+#include <PhysicalParticleContainer.H>
+#include <AMReX_Vector.H>
+
+class RigidInjectedParticleContainer
+ : public PhysicalParticleContainer
+{
+public:
+ RigidInjectedParticleContainer (amrex::AmrCore* amr_core,
+ int ispecies,
+ const std::string& name);
+ virtual ~RigidInjectedParticleContainer () {}
+
+ virtual void InitData() override;
+
+ virtual void RemapParticles();
+ virtual void BoostandRemapParticles();
+
+ virtual void Evolve (int lev,
+ const amrex::MultiFab& Ex,
+ const amrex::MultiFab& Ey,
+ const amrex::MultiFab& Ez,
+ const amrex::MultiFab& Bx,
+ const amrex::MultiFab& By,
+ const amrex::MultiFab& Bz,
+ amrex::MultiFab& jx,
+ amrex::MultiFab& jy,
+ amrex::MultiFab& jz,
+ amrex::MultiFab* cjx,
+ amrex::MultiFab* cjy,
+ amrex::MultiFab* cjz,
+ amrex::MultiFab* rho,
+ amrex::MultiFab* crho,
+ const amrex::MultiFab* cEx,
+ const amrex::MultiFab* cEy,
+ const amrex::MultiFab* cEz,
+ const amrex::MultiFab* cBx,
+ const amrex::MultiFab* cBy,
+ const amrex::MultiFab* cBz,
+ amrex::Real t,
+ amrex::Real dt) override;
+
+ virtual void PushPX(WarpXParIter& pti,
+ amrex::Cuda::DeviceVector<amrex::Real>& xp,
+ amrex::Cuda::DeviceVector<amrex::Real>& yp,
+ amrex::Cuda::DeviceVector<amrex::Real>& zp,
+ amrex::Cuda::DeviceVector<amrex::Real>& giv,
+ amrex::Real dt) override;
+
+ virtual void PushP (int lev, amrex::Real dt,
+ const amrex::MultiFab& Ex,
+ const amrex::MultiFab& Ey,
+ const amrex::MultiFab& Ez,
+ const amrex::MultiFab& Bx,
+ const amrex::MultiFab& By,
+ const amrex::MultiFab& Bz) override;
+
+private:
+
+ // User input quantities
+ amrex::Real zinject_plane = 0.;
+ bool projected = true; // When true, particle transverse positions are directly projected (without adjusment)
+ bool focused = false; // When true, particle transverse positions are adjusted to account for distance between zinject and z=0
+ bool rigid_advance = true; // When true, particles are advance with vzbar before injection
+
+ amrex::Real vzbeam_ave_boosted;
+
+ amrex::Vector<int> done_injecting;
+ amrex::Vector<amrex::Real> zinject_plane_levels;
+
+ // Temporary quantites
+ amrex::Real zinject_plane_lev;
+ amrex::Real zinject_plane_lev_previous;
+ amrex::Vector<int> done_injecting_temp;
+ bool done_injecting_lev;
+
+};
+
+#endif