ARTEMIS
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"
14 
16 
17 #include <AMReX_REAL.H>
18 #include <AMReX_Vector.H>
19 
20 #include <AMReX_BaseFwd.H>
21 #include <AMReX_AmrCoreFwd.H>
22 
23 #include <iosfwd>
24 #include <string>
25 
46 {
47 public:
49  int ispecies,
50  const std::string& name);
52 
53  virtual void InitData() override;
54 
55  virtual void RemapParticles();
56 
57  virtual void Evolve (int lev,
58  const amrex::MultiFab& Ex,
59  const amrex::MultiFab& Ey,
60  const amrex::MultiFab& Ez,
61  const amrex::MultiFab& Bx,
62  const amrex::MultiFab& By,
63  const amrex::MultiFab& Bz,
64  amrex::MultiFab& jx,
65  amrex::MultiFab& jy,
66  amrex::MultiFab& jz,
67  amrex::MultiFab* cjx,
68  amrex::MultiFab* cjy,
69  amrex::MultiFab* cjz,
70  amrex::MultiFab* rho,
71  amrex::MultiFab* crho,
72  const amrex::MultiFab* cEx,
73  const amrex::MultiFab* cEy,
74  const amrex::MultiFab* cEz,
75  const amrex::MultiFab* cBx,
76  const amrex::MultiFab* cBy,
77  const amrex::MultiFab* cBz,
78  amrex::Real t,
79  amrex::Real dt,
80  DtType a_dt_type=DtType::Full,
81  bool skip_deposition=false ) override;
82 
83  virtual void PushPX (WarpXParIter& pti,
84  amrex::FArrayBox const * exfab,
85  amrex::FArrayBox const * eyfab,
86  amrex::FArrayBox const * ezfab,
87  amrex::FArrayBox const * bxfab,
88  amrex::FArrayBox const * byfab,
89  amrex::FArrayBox const * bzfab,
90  const amrex::IntVect ngEB, const int /*e_is_nodal*/,
91  const long offset,
92  const long np_to_push,
93  int lev, int gather_lev,
94  amrex::Real dt, ScaleFields scaleFields,
95  DtType a_dt_type=DtType::Full) override;
96 
97  virtual void PushP (int lev, amrex::Real dt,
98  const amrex::MultiFab& Ex,
99  const amrex::MultiFab& Ey,
100  const amrex::MultiFab& Ez,
101  const amrex::MultiFab& Bx,
102  const amrex::MultiFab& By,
103  const amrex::MultiFab& Bz) override;
104 
105  virtual void ReadHeader (std::istream& is) override;
106 
107  virtual void WriteHeader (std::ostream& os) const override;
108 
109 private:
110 
111  // User input quantities
112  amrex::ParticleReal zinject_plane = 0.;
113  bool rigid_advance = true; // When true, particles are advance with vzbar before injection
114 
115  amrex::ParticleReal vzbeam_ave_boosted;
116 
118 
119  // Temporary quantites
120  amrex::ParticleReal zinject_plane_lev;
121  amrex::ParticleReal zinject_plane_lev_previous;
123 
124 };
125 
126 #endif
DtType
Definition: WarpXDtType.H:11
Definition: PhysicalParticleContainer.H:46
Definition: RigidInjectedParticleContainer.H:46
virtual void WriteHeader(std::ostream &os) const override
Definition: ParticleIO.cpp:91
virtual void InitData() override
Definition: RigidInjectedParticleContainer.cpp:72
amrex::ParticleReal zinject_plane_lev_previous
Definition: RigidInjectedParticleContainer.H:121
virtual 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, const amrex::IntVect ngEB, const int, const long offset, const long np_to_push, int lev, int gather_lev, amrex::Real dt, ScaleFields scaleFields, DtType a_dt_type=DtType::Full) override
Definition: RigidInjectedParticleContainer.cpp:154
amrex::Vector< amrex::ParticleReal > zinject_plane_levels
Definition: RigidInjectedParticleContainer.H:117
virtual void RemapParticles()
Definition: RigidInjectedParticleContainer.cpp:85
bool done_injecting_lev
Definition: RigidInjectedParticleContainer.H:122
amrex::ParticleReal zinject_plane
Definition: RigidInjectedParticleContainer.H:112
virtual ~RigidInjectedParticleContainer()
Definition: RigidInjectedParticleContainer.H:51
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
Definition: RigidInjectedParticleContainer.cpp:327
virtual void ReadHeader(std::istream &is) override
Definition: ParticleIO.cpp:67
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, DtType a_dt_type=DtType::Full, bool skip_deposition=false) override
Evolve is the central function PhysicalParticleContainer that advances plasma particles for a time dt...
Definition: RigidInjectedParticleContainer.cpp:290
amrex::ParticleReal vzbeam_ave_boosted
Definition: RigidInjectedParticleContainer.H:115
RigidInjectedParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition: RigidInjectedParticleContainer.cpp:59
bool rigid_advance
Definition: RigidInjectedParticleContainer.H:113
amrex::ParticleReal zinject_plane_lev
Definition: RigidInjectedParticleContainer.H:120
Definition: WarpXParticleContainer.H:52
string name
Definition: stencil.py:452
int dt
Definition: stencil.py:440
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition: ScaleFields.H:14