10 #ifndef WARPX_PhysicalParticleContainer_H_ 11 #define WARPX_PhysicalParticleContainer_H_ 28 #include <AMReX_IArrayBox.H> 53 const std::string&
name);
100 virtual void Evolve (
int lev,
101 const amrex::MultiFab& Ex,
102 const amrex::MultiFab& Ey,
103 const amrex::MultiFab& Ez,
104 const amrex::MultiFab& Bx,
105 const amrex::MultiFab& By,
106 const amrex::MultiFab& Bz,
107 const amrex::MultiFab& Ex_avg,
108 const amrex::MultiFab& Ey_avg,
109 const amrex::MultiFab& Ez_avg,
110 const amrex::MultiFab& Bx_avg,
111 const amrex::MultiFab& By_avg,
112 const amrex::MultiFab& Bz_avg,
116 amrex::MultiFab* cjx,
117 amrex::MultiFab* cjy,
118 amrex::MultiFab* cjz,
119 amrex::MultiFab* rho,
120 amrex::MultiFab* crho,
121 const amrex::MultiFab* cEx,
122 const amrex::MultiFab* cEy,
123 const amrex::MultiFab* cEz,
124 const amrex::MultiFab* cBx,
125 const amrex::MultiFab* cBy,
126 const amrex::MultiFab* cBz,
132 amrex::FArrayBox
const * exfab,
133 amrex::FArrayBox
const * eyfab,
134 amrex::FArrayBox
const * ezfab,
135 amrex::FArrayBox
const * bxfab,
136 amrex::FArrayBox
const * byfab,
137 amrex::FArrayBox
const * bzfab,
138 const int ngE,
const int ,
140 const long np_to_push,
141 int lev,
int gather_lev,
145 virtual void PushP (
int lev, amrex::Real dt,
146 const amrex::MultiFab& Ex,
147 const amrex::MultiFab& Ey,
148 const amrex::MultiFab& Ez,
149 const amrex::MultiFab& Bx,
150 const amrex::MultiFab& By,
151 const amrex::MultiFab& Bz)
override;
159 amrex::iMultiFab
const* current_masks,
160 amrex::iMultiFab
const* gather_masks,
173 const amrex::FArrayBox& Ex,
174 const amrex::FArrayBox& Ey,
175 const amrex::FArrayBox& Ez,
176 const amrex::FArrayBox& Bx,
177 const amrex::FArrayBox& By,
178 const amrex::FArrayBox& Bz);
193 void AddPlasma (
int lev, amrex::RealBox part_realbox = amrex::RealBox());
198 const amrex::Real x_m,
const amrex::Real y_m,
const amrex::Real z_m,
199 const amrex::Real x_rms,
const amrex::Real y_rms,
const amrex::Real z_rms,
200 const amrex::Real x_cut,
const amrex::Real y_cut,
const amrex::Real z_cut,
201 const amrex::Real q_tot,
long npart,
const int do_symmetrize);
211 amrex::Real x, amrex::Real y, amrex::Real z,
212 std::array<amrex::Real, 3> u,
214 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_x,
215 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_y,
216 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_z,
217 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_ux,
218 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uy,
219 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uz,
220 amrex::Gpu::HostVector<amrex::ParticleReal>& particle_w);
223 const int direction,
const amrex::Real z_old,
224 const amrex::Real z_new,
const amrex::Real t_boost,
225 const amrex::Real t_lab,
const amrex::Real dt,
270 int lev,
const amrex::Box& box,
271 amrex::Elixir& exeli, amrex::Elixir& eyeli, amrex::Elixir& ezeli,
272 amrex::Elixir& bxeli, amrex::Elixir& byeli, amrex::Elixir& bzeli,
273 amrex::FArrayBox& filtered_Ex, amrex::FArrayBox& filtered_Ey,
274 amrex::FArrayBox& filtered_Ez, amrex::FArrayBox& filtered_Bx,
275 amrex::FArrayBox& filtered_By, amrex::FArrayBox& filtered_Bz,
276 const amrex::FArrayBox& Ex,
const amrex::FArrayBox& Ey,
277 const amrex::FArrayBox& Ez,
const amrex::FArrayBox& Bx,
278 const amrex::FArrayBox& By,
const amrex::FArrayBox& Bz,
279 amrex::FArrayBox
const * & exfab, amrex::FArrayBox
const * & eyfab,
280 amrex::FArrayBox
const * & ezfab, amrex::FArrayBox
const * & bxfab,
281 amrex::FArrayBox
const * & byfab, amrex::FArrayBox
const * & bzfab);
290 void resample (
const int timestep)
override final;
316 (std::shared_ptr<BreitWheelerEngine> ptr)
override;
323 (std::shared_ptr<QuantumSynchrotronEngine> ptr)
override;
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: PhysicalParticleContainer.H:361
Definition: Ionization.H:17
void SplitParticles(int lev)
Definition: PhysicalParticleContainer.cpp:1245
DtType
Definition: WarpXDtType.H:10
This is a general class used for resampling that is instantiated as a member of MultiParticleContaine...
Definition: Resampling.H:37
void MapParticletoBoostedFrame(amrex::Real &x, amrex::Real &y, amrex::Real &z, std::array< amrex::Real, 3 > &u)
Definition: PhysicalParticleContainer.cpp:220
Definition: PhysicalParticleContainer.H:45
void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine > ptr) override
Definition: PhysicalParticleContainer.cpp:2042
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition: ScaleFields.H:13
bool has_quantum_sync() const override
Definition: PhysicalParticleContainer.cpp:2023
std::unique_ptr< PlasmaInjector > plasma_injector
Definition: PhysicalParticleContainer.H:333
def x
Definition: read_lab_particles.py:25
std::string species_name
Definition: PhysicalParticleContainer.H:332
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 int 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:1759
Definition: PhysicalParticleContainer.H:48
Definition: PhysicalParticleContainer.H:39
bool do_backward_propagation
Definition: PhysicalParticleContainer.H:339
IonizationFilterFunc getIonizationFunc(const WarpXParIter &pti, int lev, int 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:1979
PhysicalParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition: PhysicalParticleContainer.cpp:92
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:1543
void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine > ptr) override
Definition: PhysicalParticleContainer.cpp:2035
Definition: PhysicalParticleContainer.H:46
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:268
def z
Definition: read_lab_particles.py:26
virtual void InitData() override
Definition: PhysicalParticleContainer.cpp:211
bool has_breit_wheeler() const override
Definition: PhysicalParticleContainer.cpp:2028
direction
Definition: AnyFFT.H:60
void ContinuousInjection(const amrex::RealBox &injection_box) override
Definition: PhysicalParticleContainer.cpp:1748
virtual ~PhysicalParticleContainer()
Definition: PhysicalParticleContainer.H:61
int z_shift
Definition: yt3d_mpi.py:42
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, const amrex::MultiFab &Ex_avg, const amrex::MultiFab &Ey_avg, const amrex::MultiFab &Ez_avg, const amrex::MultiFab &Bx_avg, const amrex::MultiFab &By_avg, const amrex::MultiFab &Bz_avg, 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) override
Evolve is the central function PhysicalParticleContainer that advances plasma particles for a time dt...
Definition: PhysicalParticleContainer.cpp:925
bool m_do_qed_breit_wheeler
Definition: PhysicalParticleContainer.H:358
amrex::Vector< std::map< std::pair< int, int >, DiagnosticParticleData > > DiagnosticParticles
Definition: WarpXParticleContainer.H:147
PhotonEmissionFilterFunc getPhotonEmissionFilterFunc()
Definition: PhysicalParticleContainer.cpp:2048
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:44
virtual void ConvertUnits(ConvertDirection convert_dir) override
Definition: ParticleIO.cpp:109
Definition: PhysicalParticleContainer.H:47
virtual void AddParticles(int lev)
Definition: PhysicalParticleContainer.cpp:480
bool boost_adjust_transverse_positions
Definition: PhysicalParticleContainer.H:338
name
Definition: run_automated.py:204
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: PhysicalParticleContainer.H:364
ConvertDirection
Definition: WarpXParticleContainer.H:31
Filter functor for the Breit Wheeler process.
Definition: QEDPairGeneration.H:28
PairGenerationFilterFunc getPairGenerationFilterFunc()
Definition: PhysicalParticleContainer.cpp:2055
void BackwardCompatibility()
Definition: PhysicalParticleContainer.cpp:195
void AddPlasma(int lev, amrex::RealBox part_realbox=amrex::RealBox())
Definition: PhysicalParticleContainer.cpp:526
bool do_classical_radiation_reaction
Definition: PhysicalParticleContainer.H:351
Resampling m_resampler
Definition: PhysicalParticleContainer.H:341
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:2001
PhysicalParticleType
Definition: PhysicalParticleContainer.H:44
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:1170
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:1411
void AddPlasmaFromFile(amrex::ParticleReal q_tot, amrex::ParticleReal z_shift)
Definition: PhysicalParticleContainer.cpp:352
bool m_do_qed_quantum_sync
Definition: PhysicalParticleContainer.H:355
Filter functor for the QED photon emission process.
Definition: QEDPhotonEmission.H:30
Definition: WarpXParticleContainer.H:76
void CheckAndAddParticle(amrex::Real x, amrex::Real y, amrex::Real z, std::array< amrex::Real, 3 > u, 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:455
void InitIonizationModule()
Definition: PhysicalParticleContainer.cpp:1917
virtual void PostRestart() final
Definition: PhysicalParticleContainer.H:166
Definition: WarpXParticleContainer.H:131