11 #ifndef WARPX_ParticleContainer_H_ 12 #define WARPX_ParticleContainer_H_ 28 #include <AMReX_BLassert.H> 29 #include <AMReX_Box.H> 30 #include <AMReX_Config.H> 31 #include <AMReX_GpuControl.H> 32 #include <AMReX_INT.H> 33 #include <AMReX_MFIter.H> 34 #include <AMReX_REAL.H> 35 #include <AMReX_RealBox.H> 36 #include <AMReX_Vector.H> 38 #include <AMReX_BaseFwd.H> 39 #include <AMReX_AmrCoreFwd.H> 87 #ifdef WARPX_USE_OPENPMD 106 const amrex::MultiFab& Ex,
const amrex::MultiFab& Ey,
const amrex::MultiFab& Ez,
107 const amrex::MultiFab& Bx,
const amrex::MultiFab& By,
const amrex::MultiFab& Bz,
108 amrex::MultiFab& jx, amrex::MultiFab& jy, amrex::MultiFab& jz,
109 amrex::MultiFab* cjx, amrex::MultiFab* cjy, amrex::MultiFab* cjz,
110 amrex::MultiFab* rho, amrex::MultiFab* crho,
111 const amrex::MultiFab* cEx,
const amrex::MultiFab* cEy,
const amrex::MultiFab* cEz,
112 const amrex::MultiFab* cBx,
const amrex::MultiFab* cBy,
const amrex::MultiFab* cBz,
113 amrex::Real t, amrex::Real dt,
DtType a_dt_type=
DtType::Full,
bool skip_deposition=
false);
120 void PushX (amrex::Real dt);
128 void PushP (
int lev, amrex::Real dt,
129 const amrex::MultiFab& Ex,
const amrex::MultiFab& Ey,
const amrex::MultiFab& Ez,
130 const amrex::MultiFab& Bx,
const amrex::MultiFab& By,
const amrex::MultiFab& Bz);
151 DepositCharge (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
152 const amrex::Real relative_t);
169 DepositCurrent (amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
170 const amrex::Real dt,
const amrex::Real relative_t);
176 std::unique_ptr<amrex::MultiFab>
GetChargeDensity(
int lev,
bool local =
false);
179 const amrex::MultiFab& Ex,
const amrex::MultiFab& Ey,
const amrex::MultiFab& Ez,
180 const amrex::MultiFab& Bx,
const amrex::MultiFab& By,
const amrex::MultiFab& Bz);
208 void Restart (
const std::string& dir);
239 void Increment (amrex::MultiFab& mf,
int lev);
251 bool const onMainGrid =
true;
253 return std::count( v.begin(), v.end(), onMainGrid );
257 bool const fromMainGrid =
true;
259 return std::count( v.begin(), v.end(), fromMainGrid );
264 const amrex::Real z_old,
const amrex::Real z_new,
265 const amrex::Real t_boost,
const amrex::Real t_lab,
const amrex::Real dt,
266 amrex::Vector<WarpXParticleContainer::DiagnosticParticleData>& parts)
const;
291 void ScrapeParticles (
const amrex::Vector<const amrex::MultiFab*>& distance_to_eb);
322 const amrex::MultiFab& Ex,
323 const amrex::MultiFab& Ey,
324 const amrex::MultiFab& Ez,
325 const amrex::MultiFab& Bx,
326 const amrex::MultiFab& By,
327 const amrex::MultiFab& Bz);
339 const amrex::MultiFab& Ex,
340 const amrex::MultiFab& Ey,
341 const amrex::MultiFab& Ez,
342 const amrex::MultiFab& Bx,
343 const amrex::MultiFab& By,
344 const amrex::MultiFab& Bz);
350 const amrex::MultiFab& Ex,
351 const amrex::MultiFab& Ey,
352 const amrex::MultiFab& Ez,
353 const amrex::MultiFab& Bx,
354 const amrex::MultiFab& By,
355 const amrex::MultiFab& Bz);
375 template<
typename ...Args>
377 Args
const&... pc_dsts)
const noexcept
379 amrex::MFItInfo info;
383 if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
384 info.EnableTiling(pc_src.tile_size);
388 info.SetDynamic(
true);
413 static_cast<amrex::ParticleReal
>(
414 2.0 * PhysConst::m_e * PhysConst::c * PhysConst::c );
486 std::unique_ptr<PhysicalParticleContainer>
pc_tmp;
504 template<
typename First,
typename ...Args>
506 First
const& pc_dst, Args
const&... others)
const noexcept
508 if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
509 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(pc_dst.do_tiling,
510 "For particle creation processes, either all or none of the " 511 "particle species must use tiling.");
int getSpeciesID(std::string product_str) const
Definition: MultiParticleContainer.cpp:835
void doQedQuantumSync(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)
Performs QED photon emission for the species for which it is enabled.
Definition: MultiParticleContainer.cpp:1527
DtType
Definition: WarpXDtType.H:10
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition: MultiParticleContainer.cpp:542
void defineAllParticleTiles()
Definition: MultiParticleContainer.cpp:581
void Increment(amrex::MultiFab &mf, int lev)
Definition: MultiParticleContainer.cpp:637
void DepositCurrent(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &J, const amrex::Real dt, const amrex::Real relative_t)
Deposit current density.
Definition: MultiParticleContainer.cpp:479
std::vector< std::string > GetLasersNames() const
Definition: MultiParticleContainer.H:281
amrex::Vector< amrex::Real > h_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:308
std::vector< int > map_species_back_transformed_diagnostics
Definition: MultiParticleContainer.H:496
void InitQED()
Definition: MultiParticleContainer.cpp:966
void doQEDSchwinger()
Definition: MultiParticleContainer.cpp:1268
amrex::Real m_qed_schwinger_zmin
Definition: MultiParticleContainer.H:476
amrex::Vector< amrex::Real > h_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:309
amrex::Real m_qed_schwinger_zmax
Definition: MultiParticleContainer.H:477
std::string m_B_ext_particle_s
Definition: MultiParticleContainer.H:293
void ApplyBoundaryConditions()
Definition: MultiParticleContainer.cpp:597
int NSpeciesQuantumSync() const
Definition: MultiParticleContainer.H:423
void DepositCharge(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, const amrex::Real relative_t)
Deposit charge density.
Definition: MultiParticleContainer.cpp:506
std::unique_ptr< amrex::Parser > m_Ez_particle_parser
Definition: MultiParticleContainer.H:305
std::vector< std::string > lasers_names
Definition: MultiParticleContainer.H:363
WarpXParticleContainer & GetParticleContainerFromName(std::string name) const
Definition: MultiParticleContainer.H:80
std::vector< bool > m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid ...
Definition: MultiParticleContainer.H:368
std::vector< std::string > species_names
Definition: MultiParticleContainer.H:361
void doQedEvents(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)
Performs QED events (Breit-Wheeler process and photon emission)
Definition: MultiParticleContainer.cpp:1431
void ContinuousFluxInjection(amrex::Real dt) const
Definition: MultiParticleContainer.cpp:778
Definition: PhysicalParticleContainer.H:44
Definition: MultiParticleContainer.H:64
amrex::Real m_repeated_plasma_lens_period
Definition: MultiParticleContainer.H:307
int nSpecies() const
Definition: MultiParticleContainer.H:244
int m_qed_schwinger_pos_product
Definition: MultiParticleContainer.H:461
PCTypes
Definition: MultiParticleContainer.H:359
void GetLabFrameData(const std::string &snapshot_name, const int i_lab, 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, amrex::Vector< WarpXParticleContainer::DiagnosticParticleData > &parts) const
Definition: MultiParticleContainer.cpp:671
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: MultiParticleContainer.H:398
std::unique_ptr< WarpXParticleContainer > & GetUniqueContainer(int ispecies)
Definition: MultiParticleContainer.H:88
void QuantumSyncGenerateTable()
Definition: MultiParticleContainer.cpp:1110
amrex::Vector< amrex::Long > NumberOfParticlesInGrid(int lev) const
Definition: MultiParticleContainer.cpp:614
void mapSpeciesProduct()
Definition: MultiParticleContainer.cpp:790
int count
Definition: run_alltests.py:318
void doResampling(const int timestep)
This function loops over all species and performs resampling if appropriate.
Definition: MultiParticleContainer.cpp:932
amrex::Vector< amrex::Real > h_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:310
void ContinuousInjection(const amrex::RealBox &injection_box) const
Definition: MultiParticleContainer.cpp:737
bool m_do_qed_schwinger
Definition: MultiParticleContainer.H:453
~MultiParticleContainer()
Definition: MultiParticleContainer.H:71
void SetParticleBoxArray(int lev, amrex::BoxArray &new_ba)
Definition: MultiParticleContainer.cpp:645
void ReadParameters()
Definition: MultiParticleContainer.cpp:135
std::unique_ptr< amrex::Parser > m_Bx_particle_parser
Definition: MultiParticleContainer.H:299
direction
Definition: AnyFFT.H:74
void InitData()
Definition: MultiParticleContainer.cpp:399
int m_nspecies_quantum_sync
Definition: MultiParticleContainer.H:408
int mapSpeciesBackTransformedDiagnostics(int i) const
Definition: MultiParticleContainer.H:247
amrex::Box ComputeSchwingerGlobalBox() const
Definition: MultiParticleContainer.cpp:1369
std::vector< PCTypes > species_types
Definition: MultiParticleContainer.H:373
std::string m_qed_schwinger_ele_product_name
Definition: MultiParticleContainer.H:455
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)
Definition: MultiParticleContainer.cpp:419
void doCollisions(amrex::Real cur_time)
Definition: MultiParticleContainer.cpp:926
int doContinuousInjection() const
Definition: MultiParticleContainer.cpp:762
int m_qed_schwinger_ele_product
Definition: MultiParticleContainer.H:459
std::string m_qed_schwinger_pos_product_name
Definition: MultiParticleContainer.H:457
amrex::Real m_qed_schwinger_ymax
Definition: MultiParticleContainer.H:475
void Restart(const std::string &dir)
Definition: ParticleIO.cpp:119
PhysicalParticleContainer & GetPCtmp()
Definition: MultiParticleContainer.H:289
void CheckQEDProductSpecies()
Definition: MultiParticleContainer.cpp:1607
std::unique_ptr< CollisionHandler > collisionhandler
Definition: MultiParticleContainer.H:365
void MFItInfoCheckTiling(const WarpXParticleContainer &pc_src, First const &pc_dst, Args const &... others) const noexcept
Definition: MultiParticleContainer.H:505
std::string m_E_ext_particle_s
Definition: MultiParticleContainer.H:294
WarpXParticleContainer * GetParticleContainerPtr(int ispecies) const
Definition: MultiParticleContainer.H:77
std::vector< std::string > GetSpeciesAndLasersNames() const
Definition: MultiParticleContainer.H:283
i
Definition: check_interp_points_and_weights.py:171
void PushX(amrex::Real dt)
Definition: MultiParticleContainer.cpp:446
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:313
void AllocData()
Definition: MultiParticleContainer.cpp:390
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:312
int nSpeciesGatherFromMainGrid() const
Definition: MultiParticleContainer.H:256
void InitBreitWheeler()
Definition: MultiParticleContainer.cpp:1058
void BreitWheelerGenerateTable()
Definition: MultiParticleContainer.cpp:1191
std::vector< std::string > GetSpeciesNames() const
Definition: MultiParticleContainer.H:279
amrex::Real m_qed_schwinger_xmin
Definition: MultiParticleContainer.H:472
MultiParticleContainer(amrex::AmrCore *amr_core)
Definition: MultiParticleContainer.cpp:86
int m_qed_schwinger_threshold_poisson_gaussian
Definition: MultiParticleContainer.H:468
WarpXParticleContainer & GetParticleContainer(int ispecies) const
Definition: MultiParticleContainer.H:74
name
Definition: run_automated.py:204
int nSpeciesDepositOnMainGrid() const
Definition: MultiParticleContainer.H:250
std::array< amrex::Real, 3 > meanParticleVelocity(int ispecies)
Definition: MultiParticleContainer.H:92
std::unique_ptr< PhysicalParticleContainer > pc_tmp
Definition: MultiParticleContainer.H:486
void CheckIonizationProductSpecies()
Definition: MultiParticleContainer.cpp:943
int doBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:248
int it
Definition: read_lab_particles.py:11
std::vector< bool > m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest ...
Definition: MultiParticleContainer.H:371
std::unique_ptr< amrex::MultiFab > GetZeroChargeDensity(const int lev)
This returns a MultiFAB filled with zeros. It is used to return the charge density when there is no p...
Definition: MultiParticleContainer.cpp:464
void UpdateContinuousInjectionPosition(amrex::Real dt) const
Definition: MultiParticleContainer.cpp:752
amrex::Vector< amrex::Real > m_B_external_particle
Definition: MultiParticleContainer.H:296
void MFItInfoCheckTiling(const WarpXParticleContainer &) const noexcept
Definition: MultiParticleContainer.H:499
amrex::Real m_qed_schwinger_y_size
Definition: MultiParticleContainer.H:463
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)
Definition: MultiParticleContainer.cpp:454
int nspecies_back_transformed_diagnostics
Definition: MultiParticleContainer.H:493
std::unique_ptr< amrex::Parser > m_Bz_particle_parser
Definition: MultiParticleContainer.H:301
int m_nspecies_breit_wheeler
Definition: MultiParticleContainer.H:409
std::unique_ptr< amrex::Parser > m_Ex_particle_parser
Definition: MultiParticleContainer.H:303
amrex::Real m_qed_schwinger_xmax
Definition: MultiParticleContainer.H:473
amrex::MFItInfo getMFItInfo(const WarpXParticleContainer &pc_src, Args const &... pc_dsts) const noexcept
Definition: MultiParticleContainer.H:376
amrex::Vector< amrex::Long > GetZeroParticlesInGrid(const int lev) const
This returns a vector filled with zeros whose size is the number of boxes in the simulation boxarray...
Definition: MultiParticleContainer.cpp:605
int nSpeciesBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:246
static constexpr auto m_default_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:412
void ReadHeader(std::istream &is)
Definition: ParticleIO.cpp:134
void doQedBreitWheeler(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)
Performs Breit-Wheeler process for the species for which it is enabled.
Definition: MultiParticleContainer.cpp:1445
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:314
void InitQuantumSync()
Definition: MultiParticleContainer.cpp:995
void SortParticlesByBin(amrex::IntVect bin_size)
Definition: MultiParticleContainer.cpp:565
std::unique_ptr< amrex::Parser > m_By_particle_parser
Definition: MultiParticleContainer.H:300
int NSpeciesBreitWheeler() const
Definition: MultiParticleContainer.H:428
amrex::Vector< amrex::Real > h_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:311
void ScrapeParticles(const amrex::Vector< const amrex::MultiFab *> &distance_to_eb)
Definition: MultiParticleContainer.cpp:954
void WriteHeader(std::ostream &os) const
Definition: ParticleIO.cpp:145
void doFieldIonization(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)
Definition: MultiParticleContainer.cpp:860
void RedistributeLocal(const int num_ghost)
Definition: MultiParticleContainer.cpp:589
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: MultiParticleContainer.H:397
void Redistribute()
Definition: MultiParticleContainer.cpp:573
amrex::Vector< amrex::Real > m_E_external_particle
Definition: MultiParticleContainer.H:297
void SetParticleDistributionMap(int lev, amrex::DistributionMapping &new_dm)
Definition: MultiParticleContainer.cpp:653
int do_back_transformed_diagnostics
Definition: MultiParticleContainer.H:497
amrex::ParticleReal m_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:417
Definition: WarpXParticleContainer.H:110
amrex::Vector< std::unique_ptr< WarpXParticleContainer > > allcontainers
Definition: MultiParticleContainer.H:484
std::unique_ptr< amrex::Parser > m_Ey_particle_parser
Definition: MultiParticleContainer.H:304
void PostRestart()
Definition: MultiParticleContainer.cpp:661
amrex::Real m_qed_schwinger_ymin
Definition: MultiParticleContainer.H:474
void AlwaysAssert(bool is_expression_true, const std::string &msg="ERROR!")
If is_expression_true is false, this function prints msg and calls amrex::abort() ...
Definition: WarpXUtil.cpp:677
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:315