10 #ifndef WARPX_PhysicalParticleContainer_H_ 11 #define WARPX_PhysicalParticleContainer_H_ 26 #include <AMReX_GpuContainers.H> 27 #include <AMReX_Particles.H> 28 #include <AMReX_REAL.H> 29 #include <AMReX_RealBox.H> 31 #include <AMReX_BaseFwd.H> 32 #include <AMReX_AmrCoreFwd.H> 58 const std::string&
name);
70 virtual void ReadHeader (std::istream& is)
override;
72 virtual void WriteHeader (std::ostream& os)
const override;
109 virtual void Evolve (
int lev,
110 const amrex::MultiFab& Ex,
111 const amrex::MultiFab& Ey,
112 const amrex::MultiFab& Ez,
113 const amrex::MultiFab& Bx,
114 const amrex::MultiFab& By,
115 const amrex::MultiFab& Bz,
119 amrex::MultiFab* cjx,
120 amrex::MultiFab* cjy,
121 amrex::MultiFab* cjz,
122 amrex::MultiFab* rho,
123 amrex::MultiFab* crho,
124 const amrex::MultiFab* cEx,
125 const amrex::MultiFab* cEy,
126 const amrex::MultiFab* cEz,
127 const amrex::MultiFab* cBx,
128 const amrex::MultiFab* cBy,
129 const amrex::MultiFab* cBz,
133 bool skip_deposition=
false )
override;
136 amrex::FArrayBox
const * exfab,
137 amrex::FArrayBox
const * eyfab,
138 amrex::FArrayBox
const * ezfab,
139 amrex::FArrayBox
const * bxfab,
140 amrex::FArrayBox
const * byfab,
141 amrex::FArrayBox
const * bzfab,
142 const amrex::IntVect ngE,
const int ,
144 const long np_to_push,
145 int lev,
int gather_lev,
149 virtual void PushP (
int lev, amrex::Real dt,
150 const amrex::MultiFab& Ex,
151 const amrex::MultiFab& Ey,
152 const amrex::MultiFab& Ez,
153 const amrex::MultiFab& Bx,
154 const amrex::MultiFab& By,
155 const amrex::MultiFab& Bz)
override;
163 amrex::iMultiFab
const* current_masks,
164 amrex::iMultiFab
const* gather_masks,
177 const amrex::FArrayBox& Ex,
178 const amrex::FArrayBox& Ey,
179 const amrex::FArrayBox& Ez,
180 const amrex::FArrayBox& Bx,
181 const amrex::FArrayBox& By,
182 const amrex::FArrayBox& Bz);
197 void AddPlasma (
int lev, amrex::RealBox part_realbox = amrex::RealBox());
208 amrex::Real&
ux, amrex::Real& uy, amrex::Real&
uz);
211 const amrex::Real x_m,
const amrex::Real y_m,
const amrex::Real z_m,
212 const amrex::Real x_rms,
const amrex::Real y_rms,
const amrex::Real z_rms,
213 const amrex::Real x_cut,
const amrex::Real y_cut,
const amrex::Real z_cut,
214 const amrex::Real q_tot,
long npart,
const int do_symmetrize);
224 amrex::Real x, amrex::Real y, amrex::Real z,
225 amrex::Real ux, amrex::Real uy, amrex::Real uz,
227 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_x,
228 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_y,
229 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_z,
230 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_ux,
231 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uy,
232 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uz,
233 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_w);
236 const int direction,
const amrex::Real z_old,
237 const amrex::Real z_new,
const amrex::Real t_boost,
238 const amrex::Real t_lab,
const amrex::Real dt,
289 int lev,
const amrex::Box& box,
290 amrex::Elixir& exeli, amrex::Elixir& eyeli, amrex::Elixir& ezeli,
291 amrex::Elixir& bxeli, amrex::Elixir& byeli, amrex::Elixir& bzeli,
292 amrex::FArrayBox& filtered_Ex, amrex::FArrayBox& filtered_Ey,
293 amrex::FArrayBox& filtered_Ez, amrex::FArrayBox& filtered_Bx,
294 amrex::FArrayBox& filtered_By, amrex::FArrayBox& filtered_Bz,
295 const amrex::FArrayBox& Ex,
const amrex::FArrayBox& Ey,
296 const amrex::FArrayBox& Ez,
const amrex::FArrayBox& Bx,
297 const amrex::FArrayBox& By,
const amrex::FArrayBox& Bz,
298 amrex::FArrayBox
const * & exfab, amrex::FArrayBox
const * & eyfab,
299 amrex::FArrayBox
const * & ezfab, amrex::FArrayBox
const * & bxfab,
300 amrex::FArrayBox
const * & byfab, amrex::FArrayBox
const * & bzfab);
309 void resample (
const int timestep)
override final;
335 (std::shared_ptr<BreitWheelerEngine> ptr)
override;
342 (std::shared_ptr<QuantumSynchrotronEngine> ptr)
override;
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: PhysicalParticleContainer.H:387
Definition: Ionization.H:30
void SplitParticles(int lev)
Definition: PhysicalParticleContainer.cpp:1828
DtType
Definition: WarpXDtType.H:10
This is a general class used for resampling that is instantiated as a member of MultiParticleContaine...
Definition: Resampling.H:41
Definition: PhysicalParticleContainer.H:50
virtual void WriteHeader(std::ostream &os) const override
Definition: ParticleIO.cpp:112
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 ngE, 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)
Definition: PhysicalParticleContainer.cpp:2335
void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine > ptr) override
Definition: PhysicalParticleContainer.cpp:2655
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition: ScaleFields.H:13
void ContinuousFluxInjection(const amrex::Real dt) override
Definition: PhysicalParticleContainer.cpp:2322
bool has_quantum_sync() const override
Definition: PhysicalParticleContainer.cpp:2636
std::unique_ptr< PlasmaInjector > plasma_injector
Definition: PhysicalParticleContainer.H:352
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: PhysicalParticleContainer.cpp:1510
def x
Definition: read_lab_particles.py:25
void MapParticletoBoostedFrame(amrex::Real &x, amrex::Real &y, amrex::Real &z, amrex::Real &ux, amrex::Real &uy, amrex::Real &uz)
Definition: PhysicalParticleContainer.cpp:354
std::string species_name
Definition: PhysicalParticleContainer.H:351
Definition: PhysicalParticleContainer.H:53
Definition: PhysicalParticleContainer.H:44
bool do_backward_propagation
Definition: PhysicalParticleContainer.H:358
def uz
Definition: read_lab_particles.py:29
PhysicalParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition: PhysicalParticleContainer.cpp:208
virtual void GetParticleSlice(const int direction, const amrex::Real z_old, const amrex::Real z_new, const amrex::Real t_boost, const amrex::Real t_lab, const amrex::Real dt, DiagnosticParticles &diagnostic_particles) final
Definition: PhysicalParticleContainer.cpp:2126
void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine > ptr) override
Definition: PhysicalParticleContainer.cpp:2648
Definition: PhysicalParticleContainer.H:51
void CheckAndAddParticle(amrex::Real x, amrex::Real y, amrex::Real z, amrex::Real ux, amrex::Real uy, amrex::Real uz, amrex::Real weight, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_x, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_y, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_z, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_ux, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_uy, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_uz, amrex::Gpu::HostVector< amrex::ParticleReal > &particle_w)
Definition: PhysicalParticleContainer.cpp:589
void AddGaussianBeam(const amrex::Real x_m, const amrex::Real y_m, const amrex::Real z_m, const amrex::Real x_rms, const amrex::Real y_rms, const amrex::Real z_rms, const amrex::Real x_cut, const amrex::Real y_cut, const amrex::Real z_cut, const amrex::Real q_tot, long npart, const int do_symmetrize)
Definition: PhysicalParticleContainer.cpp:402
bool m_rz_random_theta
Definition: PhysicalParticleContainer.H:359
def z
Definition: read_lab_particles.py:26
virtual void InitData() override
Definition: PhysicalParticleContainer.cpp:345
bool has_breit_wheeler() const override
Definition: PhysicalParticleContainer.cpp:2641
direction
Definition: AnyFFT.H:74
ConvertDirection
Definition: WarpXParticleContainer_fwd.H:22
void ContinuousInjection(const amrex::RealBox &injection_box) override
Definition: PhysicalParticleContainer.cpp:2312
virtual ~PhysicalParticleContainer()
Definition: PhysicalParticleContainer.H:66
int z_shift
Definition: yt3d_mpi.py:42
bool m_do_qed_breit_wheeler
Definition: PhysicalParticleContainer.H:384
virtual void ReadHeader(std::istream &is) override
Definition: ParticleIO.cpp:105
amrex::Vector< std::map< std::pair< int, int >, DiagnosticParticleData > > DiagnosticParticles
Definition: WarpXParticleContainer.H:123
PhotonEmissionFilterFunc getPhotonEmissionFilterFunc()
Definition: PhysicalParticleContainer.cpp:2661
void PartitionParticlesInBuffers(long &nfine_current, long &nfine_gather, long const np, WarpXParIter &pti, int const lev, amrex::iMultiFab const *current_masks, amrex::iMultiFab const *gather_masks, RealVector &uxp, RealVector &uyp, RealVector &uzp, RealVector &wp)
Definition: Partition.cpp:55
virtual void ConvertUnits(ConvertDirection convert_dir) override
Definition: ParticleIO.cpp:156
Definition: PhysicalParticleContainer.H:52
virtual void AddParticles(int lev)
Definition: PhysicalParticleContainer.cpp:614
IonizationFilterFunc getIonizationFunc(const WarpXParIter &pti, int lev, amrex::IntVect ngE, const amrex::FArrayBox &Ex, const amrex::FArrayBox &Ey, const amrex::FArrayBox &Ez, const amrex::FArrayBox &Bx, const amrex::FArrayBox &By, const amrex::FArrayBox &Bz)
Definition: PhysicalParticleContainer.cpp:2579
bool boost_adjust_transverse_positions
Definition: PhysicalParticleContainer.H:357
name
Definition: run_automated.py:204
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: PhysicalParticleContainer.H:390
Filter functor for the Breit Wheeler process.
Definition: QEDPairGeneration.H:37
PairGenerationFilterFunc getPairGenerationFilterFunc()
Definition: PhysicalParticleContainer.cpp:2668
void BackwardCompatibility()
Definition: PhysicalParticleContainer.cpp:329
void AddPlasma(int lev, amrex::RealBox part_realbox=amrex::RealBox())
Definition: PhysicalParticleContainer.cpp:690
bool do_classical_radiation_reaction
Definition: PhysicalParticleContainer.H:374
Resampling m_resampler
Definition: PhysicalParticleContainer.H:361
void resample(const int timestep) override final
This function determines if resampling should be done for the current species, and if so...
Definition: PhysicalParticleContainer.cpp:2601
bool m_save_previous_position
Definition: PhysicalParticleContainer.H:377
PhysicalParticleType
Definition: PhysicalParticleContainer.H:49
void applyNCIFilter(int lev, const amrex::Box &box, amrex::Elixir &exeli, amrex::Elixir &eyeli, amrex::Elixir &ezeli, amrex::Elixir &bxeli, amrex::Elixir &byeli, amrex::Elixir &bzeli, amrex::FArrayBox &filtered_Ex, amrex::FArrayBox &filtered_Ey, amrex::FArrayBox &filtered_Ez, amrex::FArrayBox &filtered_Bx, amrex::FArrayBox &filtered_By, amrex::FArrayBox &filtered_Bz, const amrex::FArrayBox &Ex, const amrex::FArrayBox &Ey, const amrex::FArrayBox &Ez, const amrex::FArrayBox &Bx, const amrex::FArrayBox &By, const amrex::FArrayBox &Bz, amrex::FArrayBox const *&exfab, amrex::FArrayBox const *&eyfab, amrex::FArrayBox const *&ezfab, amrex::FArrayBox const *&bxfab, amrex::FArrayBox const *&byfab, amrex::FArrayBox const *&bzfab)
Apply NCI Godfrey filter to all components of E and B before gather.
Definition: PhysicalParticleContainer.cpp:1753
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: PhysicalParticleContainer.cpp:1994
void AddPlasmaFromFile(amrex::ParticleReal q_tot, amrex::ParticleReal z_shift)
Definition: PhysicalParticleContainer.cpp:486
bool m_do_qed_quantum_sync
Definition: PhysicalParticleContainer.H:381
Filter functor for the QED photon emission process.
Definition: QEDPhotonEmission.H:42
def ux
Definition: read_lab_particles.py:28
Definition: WarpXParticleContainer.H:58
void InitIonizationModule()
Definition: PhysicalParticleContainer.cpp:2515
void AddPlasmaFlux(int lev, amrex::Real dt)
Definition: PhysicalParticleContainer.cpp:1129
virtual void PostRestart() final
Definition: PhysicalParticleContainer.H:170
Definition: WarpXParticleContainer.H:110