WarpX
RigidInjectedParticleContainer.H
Go to the documentation of this file.
1 /* Copyright 2019 Andrew Myers, David Grote, Maxence Thevenet
2  * Weiqun Zhang
3  *
4  * This file is part of WarpX.
5  *
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef WARPX_RigidInjectedParticleContainer_H_
9 #define WARPX_RigidInjectedParticleContainer_H_
10 
11 #include "Evolve/WarpXDtType.H"
12 #include "Evolve/WarpXPushType.H"
15 
17 
18 #include <AMReX_REAL.H>
19 #include <AMReX_Vector.H>
20 
21 #include <AMReX_BaseFwd.H>
22 #include <AMReX_AmrCoreFwd.H>
23 
24 #include <iosfwd>
25 #include <string>
26 
47 {
48 public:
50  int ispecies,
51  const std::string& name);
52  ~RigidInjectedParticleContainer () override = default;
53 
58 
59 
60  void InitData() override;
61 
62  virtual void RemapParticles();
63 
64  void Evolve (int lev,
65  const amrex::MultiFab& Ex,
66  const amrex::MultiFab& Ey,
67  const amrex::MultiFab& Ez,
68  const amrex::MultiFab& Bx,
69  const amrex::MultiFab& By,
70  const amrex::MultiFab& Bz,
71  amrex::MultiFab& jx,
72  amrex::MultiFab& jy,
73  amrex::MultiFab& jz,
74  amrex::MultiFab* cjx,
75  amrex::MultiFab* cjy,
76  amrex::MultiFab* cjz,
77  amrex::MultiFab* rho,
78  amrex::MultiFab* crho,
79  const amrex::MultiFab* cEx,
80  const amrex::MultiFab* cEy,
81  const amrex::MultiFab* cEz,
82  const amrex::MultiFab* cBx,
83  const amrex::MultiFab* cBy,
84  const amrex::MultiFab* cBz,
85  amrex::Real t,
86  amrex::Real dt,
87  DtType a_dt_type=DtType::Full,
88  bool skip_deposition=false,
89  PushType push_type=PushType::Explicit) override;
90 
91  void PushPX (WarpXParIter& pti,
92  amrex::FArrayBox const * exfab,
93  amrex::FArrayBox const * eyfab,
94  amrex::FArrayBox const * ezfab,
95  amrex::FArrayBox const * bxfab,
96  amrex::FArrayBox const * byfab,
97  amrex::FArrayBox const * bzfab,
98  amrex::IntVect ngEB, int /*e_is_nodal*/,
99  long offset,
100  long np_to_push,
101  int lev, int gather_lev,
102  amrex::Real dt, ScaleFields scaleFields,
103  DtType a_dt_type=DtType::Full) override;
104 
105  void PushP (int lev, amrex::Real dt,
106  const amrex::MultiFab& Ex,
107  const amrex::MultiFab& Ey,
108  const amrex::MultiFab& Ez,
109  const amrex::MultiFab& Bx,
110  const amrex::MultiFab& By,
111  const amrex::MultiFab& Bz) override;
112 
113  void ReadHeader (std::istream& is) override;
114 
115  void WriteHeader (std::ostream& os) const override;
116 
117 private:
118 
119  // User input quantities
120  amrex::ParticleReal zinject_plane = 0.;
121  bool rigid_advance = true; // When true, particles are advance with vzbar before injection
122 
123  amrex::ParticleReal vzbeam_ave_boosted;
124 
126 
127  // Temporary quantities
128  amrex::ParticleReal zinject_plane_lev;
129  amrex::ParticleReal zinject_plane_lev_previous;
131 
132 };
133 
134 #endif
DtType
Definition: WarpXDtType.H:11
PushType
Definition: WarpXPushType.H:12
Definition: PhysicalParticleContainer.H:47
Definition: RigidInjectedParticleContainer.H:47
void WriteHeader(std::ostream &os) const override
Definition: ParticleIO.cpp:94
void InitData() override
Definition: RigidInjectedParticleContainer.cpp:72
amrex::ParticleReal zinject_plane_lev_previous
Definition: RigidInjectedParticleContainer.H:129
amrex::Vector< amrex::ParticleReal > zinject_plane_levels
Definition: RigidInjectedParticleContainer.H:125
virtual void RemapParticles()
Definition: RigidInjectedParticleContainer.cpp:89
bool done_injecting_lev
Definition: RigidInjectedParticleContainer.H:130
amrex::ParticleReal zinject_plane
Definition: RigidInjectedParticleContainer.H:120
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, DtType a_dt_type=DtType::Full, bool skip_deposition=false, PushType push_type=PushType::Explicit) override
Evolve is the central function PhysicalParticleContainer that advances plasma particles for a time dt...
Definition: RigidInjectedParticleContainer.cpp:294
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
Definition: RigidInjectedParticleContainer.cpp:332
~RigidInjectedParticleContainer() override=default
RigidInjectedParticleContainer & operator=(RigidInjectedParticleContainer const &)=delete
void ReadHeader(std::istream &is) override
Definition: ParticleIO.cpp:70
amrex::ParticleReal vzbeam_ave_boosted
Definition: RigidInjectedParticleContainer.H:123
void PushPX(WarpXParIter &pti, amrex::FArrayBox const *exfab, amrex::FArrayBox const *eyfab, amrex::FArrayBox const *ezfab, amrex::FArrayBox const *bxfab, amrex::FArrayBox const *byfab, amrex::FArrayBox const *bzfab, amrex::IntVect ngEB, int, long offset, long np_to_push, int lev, int gather_lev, amrex::Real dt, ScaleFields scaleFields, DtType a_dt_type=DtType::Full) override
Definition: RigidInjectedParticleContainer.cpp:158
RigidInjectedParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition: RigidInjectedParticleContainer.cpp:59
RigidInjectedParticleContainer(RigidInjectedParticleContainer &&)=default
bool rigid_advance
Definition: RigidInjectedParticleContainer.H:121
amrex::ParticleReal zinject_plane_lev
Definition: RigidInjectedParticleContainer.H:128
RigidInjectedParticleContainer(RigidInjectedParticleContainer const &)=delete
Definition: WarpXParticleContainer.H:53
name
Definition: run_automated.py:229
float dt
Definition: stencil.py:442
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition: ScaleFields.H:14