WarpX
PhotonParticleContainer.H
Go to the documentation of this file.
1 /* Copyright 2019 Andrew Myers, David Grote, Luca Fedeli
2  * Maxence Thevenet, Weiqun Zhang
3  *
4  * This file is part of WarpX.
5  *
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef WARPX_PhotonParticleContainer_H_
9 #define WARPX_PhotonParticleContainer_H_
10 
11 #include "Evolve/WarpXDtType.H"
12 #include "Evolve/WarpXPushType.H"
15 
17 
18 #include <AMReX_Particles.H>
19 #include <AMReX_REAL.H>
20 
21 #include <AMReX_BaseFwd.H>
22 #include <AMReX_AmrCoreFwd.H>
23 
24 #include <string>
25 
35 {
36 public:
38  int ispecies,
39  const std::string& name);
40  ~PhotonParticleContainer () override = default;
41 
46 
47  void InitData() override;
48 
49  void Evolve (int lev,
50  const amrex::MultiFab& Ex,
51  const amrex::MultiFab& Ey,
52  const amrex::MultiFab& Ez,
53  const amrex::MultiFab& Bx,
54  const amrex::MultiFab& By,
55  const amrex::MultiFab& Bz,
56  amrex::MultiFab& jx,
57  amrex::MultiFab& jy,
58  amrex::MultiFab& jz,
59  amrex::MultiFab* cjx,
60  amrex::MultiFab* cjy,
61  amrex::MultiFab* cjz,
62  amrex::MultiFab* rho,
63  amrex::MultiFab* crho,
64  const amrex::MultiFab* cEx,
65  const amrex::MultiFab* cEy,
66  const amrex::MultiFab* cEz,
67  const amrex::MultiFab* cBx,
68  const amrex::MultiFab* cBy,
69  const amrex::MultiFab* cBz,
70  amrex::Real t,
71  amrex::Real dt,
72  DtType a_dt_type=DtType::Full,
73  bool skip_deposition=false,
74  PushType push_type=PushType::Explicit) override;
75 
76  void PushPX(WarpXParIter& pti,
77  amrex::FArrayBox const * exfab,
78  amrex::FArrayBox const * eyfab,
79  amrex::FArrayBox const * ezfab,
80  amrex::FArrayBox const * bxfab,
81  amrex::FArrayBox const * byfab,
82  amrex::FArrayBox const * bzfab,
83  amrex::IntVect ngEB, int /*e_is_nodal*/,
84  long offset,
85  long np_to_push,
86  int lev, int gather_lev,
87  amrex::Real dt, ScaleFields scaleFields,
88  DtType a_dt_type) override;
89 
90  // Do nothing
91  void PushP (int /*lev*/,
92  amrex::Real /*dt*/,
93  const amrex::MultiFab& /*Ex*/,
94  const amrex::MultiFab& /*Ey*/,
95  const amrex::MultiFab& /*Ez*/,
96  const amrex::MultiFab& /*Bx*/,
97  const amrex::MultiFab& /*By*/,
98  const amrex::MultiFab& /*Bz*/) override {}
99 
100 
101  // DepositCharge should do nothing for photons
102  void DepositCharge (WarpXParIter& /*pti*/,
103  RealVector const & /*wp*/,
104  const int * const /*ion_lev*/,
105  amrex::MultiFab* /*rho*/,
106  int /*icomp*/,
107  const long /*offset*/,
108  const long /*np_to_deposit*/,
109  int /*thread_num*/,
110  int /*lev*/,
111  int /*depos_lev*/) override {}
112 
113  // DepositCurrent should do nothing for photons
114  void DepositCurrent (WarpXParIter& /*pti*/,
115  RealVector const & /*wp*/,
116  RealVector const & /*uxp*/,
117  RealVector const & /*uyp*/,
118  RealVector const & /*uzp*/,
119  int const * const /*ion_lev*/,
120  amrex::MultiFab * const /*jx*/,
121  amrex::MultiFab * const /*jy*/,
122  amrex::MultiFab * const /*jz*/,
123  long const /*offset*/,
124  long const /*np_to_deposit*/,
125  int const /*thread_num*/,
126  int const /*lev*/,
127  int const /*depos_lev*/,
128  amrex::Real const /*dt*/,
129  amrex::Real const /*relative_time*/,
130  PushType /*push_type*/) override {}
131 };
132 
133 #endif // #ifndef WARPX_PhotonParticleContainer_H_
DtType
Definition: WarpXDtType.H:11
PushType
Definition: WarpXPushType.H:12
Definition: PhotonParticleContainer.H:35
PhotonParticleContainer & operator=(PhotonParticleContainer const &)=delete
PhotonParticleContainer(PhotonParticleContainer const &)=delete
PhotonParticleContainer(PhotonParticleContainer &&)=default
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) override
Definition: PhotonParticleContainer.cpp:83
void DepositCharge(WarpXParIter &, RealVector const &, const int *const, amrex::MultiFab *, int, const long, const long, int, int, int) override
Definition: PhotonParticleContainer.H:102
void DepositCurrent(WarpXParIter &, RealVector const &, RealVector const &, RealVector const &, RealVector const &, int const *const, amrex::MultiFab *const, amrex::MultiFab *const, amrex::MultiFab *const, long const, long const, int const, int const, int const, amrex::Real const, amrex::Real const, PushType) override
Definition: PhotonParticleContainer.H:114
PhotonParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition: PhotonParticleContainer.cpp:46
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
Definition: PhotonParticleContainer.cpp:235
~PhotonParticleContainer() override=default
void InitData() override
Definition: PhotonParticleContainer.cpp:74
void PushP(int, amrex::Real, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &) override
Definition: PhotonParticleContainer.H:91
Definition: PhysicalParticleContainer.H:47
Definition: WarpXParticleContainer.H:53
typename SoA::RealVector RealVector
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