11 #ifndef WARPX_ParticleContainer_H_
12 #define WARPX_ParticleContainer_H_
31 #include <AMReX_Config.H>
127 void PushP (
int lev, amrex::Real
dt,
150 amrex::Real relative_time);
165 amrex::Real
dt, amrex::Real relative_time);
171 std::unique_ptr<amrex::MultiFab>
GetChargeDensity(
int lev,
bool local =
false);
203 void Restart (
const std::string& dir);
257 bool const onMainGrid =
true;
259 return static_cast<int>(
std::count( v.begin(), v.end(), onMainGrid ));
264 bool const fromMainGrid =
true;
266 return static_cast<int>(
std::count( v.begin(), v.end(), fromMainGrid ));
334 [[nodiscard]]
int getSpeciesID (std::string product_str)
const;
383 template<
typename ...Args>
386 Args
const&... pc_dsts)
const noexcept
422 static_cast<amrex::ParticleReal
>(
495 std::unique_ptr<PhysicalParticleContainer>
pc_tmp;
506 template<
typename First,
typename ...Args>
508 First
const& pc_dst, Args
const&... others)
const noexcept
512 "For particle creation processes, either all or none of the "
513 "particle species must use tiling.");
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition: TextMsg.H:13
DtType
Definition: WarpXDtType.H:11
PushType
Definition: WarpXPushType.H:12
Definition: MultiParticleContainer.H:66
void RedistributeLocal(int num_ghost)
Definition: MultiParticleContainer.cpp:636
std::unique_ptr< amrex::Parser > m_Bz_particle_parser
Definition: MultiParticleContainer.H:305
void InitQED()
Definition: MultiParticleContainer.cpp:960
std::unique_ptr< amrex::Parser > m_Ey_particle_parser
Definition: MultiParticleContainer.H:308
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition: MultiParticleContainer.cpp:586
int nLasers() const
Definition: MultiParticleContainer.H:240
amrex::Real m_qed_schwinger_zmax
Definition: MultiParticleContainer.H:486
amrex::Real m_qed_schwinger_zmin
Definition: MultiParticleContainer.H:485
void InitMultiPhysicsModules()
Definition: MultiParticleContainer.cpp:432
std::string m_B_ext_particle_s
Definition: MultiParticleContainer.H:300
amrex::Vector< std::unique_ptr< WarpXParticleContainer > >::iterator begin()
Definition: MultiParticleContainer.H:336
void QuantumSyncGenerateTable()
Definition: MultiParticleContainer.cpp:1123
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:314
void AllocData()
Definition: MultiParticleContainer.cpp:400
void SetParticleDistributionMap(int lev, amrex::DistributionMapping &new_dm)
Definition: MultiParticleContainer.cpp:700
void InitData()
Definition: MultiParticleContainer.cpp:409
amrex::Real m_qed_schwinger_ymin
Definition: MultiParticleContainer.H:483
std::vector< bool > m_laser_deposit_on_main_grid
Definition: MultiParticleContainer.H:376
void Increment(amrex::MultiFab &mf, int lev)
Definition: MultiParticleContainer.cpp:684
void mapSpeciesProduct()
Definition: MultiParticleContainer.cpp:761
void ContinuousInjection(const amrex::RealBox &injection_box) const
Definition: MultiParticleContainer.cpp:713
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:317
MultiParticleContainer(MultiParticleContainer const &)=delete
int NSpeciesBreitWheeler() const
Definition: MultiParticleContainer.H:437
void ReadHeader(std::istream &is)
Definition: ParticleIO.cpp:218
static constexpr auto m_default_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:421
void ApplyBoundaryConditions()
Definition: MultiParticleContainer.cpp:644
std::vector< std::string > lasers_names
Definition: MultiParticleContainer.H:370
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:316
bool m_do_qed_schwinger
Definition: MultiParticleContainer.H:462
std::vector< std::string > GetLasersNames() const
Definition: MultiParticleContainer.H:287
std::unique_ptr< amrex::Parser > m_By_particle_parser
Definition: MultiParticleContainer.H:304
void PushX(amrex::Real dt)
Definition: MultiParticleContainer.cpp:478
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:313
std::string m_qed_schwinger_ele_product_name
Definition: MultiParticleContainer.H:464
int m_nspecies_quantum_sync
Definition: MultiParticleContainer.H:417
int m_qed_schwinger_ele_product
Definition: MultiParticleContainer.H:468
int nSpecies() const
Definition: MultiParticleContainer.H:239
int m_nspecies_breit_wheeler
Definition: MultiParticleContainer.H:418
void MFItInfoCheckTiling(const WarpXParticleContainer &) const noexcept
Definition: MultiParticleContainer.H:503
void InitQuantumSync()
Definition: MultiParticleContainer.cpp:991
void DepositCurrent(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &J, amrex::Real dt, amrex::Real relative_time)
Deposit current density.
Definition: MultiParticleContainer.cpp:521
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: MultiParticleContainer.H:406
void Redistribute()
Definition: MultiParticleContainer.cpp:620
std::vector< PCTypes > species_types
Definition: MultiParticleContainer.H:381
void PostRestart()
Definition: MultiParticleContainer.cpp:421
int NSpeciesQuantumSync() const
Definition: MultiParticleContainer.H:432
amrex::ParticleReal m_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:426
WarpXParticleContainer & GetParticleContainerFromName(const std::string &name) const
Definition: MultiParticleContainer.cpp:389
MultiParticleContainer & operator=(MultiParticleContainer &&)=default
std::vector< std::string > species_names
Definition: MultiParticleContainer.H:368
amrex::Box ComputeSchwingerGlobalBox() const
Definition: MultiParticleContainer.cpp:1403
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:319
amrex::Real m_qed_schwinger_ymax
Definition: MultiParticleContainer.H:484
void doQEDSchwinger()
Definition: MultiParticleContainer.cpp:1298
std::string m_E_ext_particle_s
Definition: MultiParticleContainer.H:301
amrex::Real m_qed_schwinger_xmin
Definition: MultiParticleContainer.H:481
int nSpeciesGatherFromMainGrid() const
Definition: MultiParticleContainer.H:262
void defineAllParticleTiles()
Definition: MultiParticleContainer.cpp:628
void BreitWheelerGenerateTable()
Definition: MultiParticleContainer.cpp:1213
std::unique_ptr< PhysicalParticleContainer > pc_tmp
Definition: MultiParticleContainer.H:495
std::unique_ptr< amrex::MultiFab > GetZeroChargeDensity(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:496
void ReadParameters()
Definition: MultiParticleContainer.cpp:129
int doContinuousInjection() const
Definition: MultiParticleContainer.cpp:733
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:315
int nSpeciesDepositOnMainGrid() const
Definition: MultiParticleContainer.H:255
void DepositCharge(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, amrex::Real relative_time)
Deposit charge density.
Definition: MultiParticleContainer.cpp:549
std::unique_ptr< CollisionHandler > collisionhandler
Definition: MultiParticleContainer.H:372
amrex::ParticleReal m_repeated_plasma_lens_period
Definition: MultiParticleContainer.H:311
amrex::Real m_qed_schwinger_xmax
Definition: MultiParticleContainer.H:482
WarpXParticleContainer * GetParticleContainerPtr(int index) const
Definition: MultiParticleContainer.H:83
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:486
void MFItInfoCheckTiling(const WarpXParticleContainer &pc_src, First const &pc_dst, Args const &... others) const noexcept
Definition: MultiParticleContainer.H:507
int getSpeciesID(std::string product_str) const
Definition: MultiParticleContainer.cpp:806
std::vector< std::string > GetSpeciesAndLasersNames() const
Definition: MultiParticleContainer.H:289
amrex::Vector< amrex::Long > NumberOfParticlesInGrid(int lev) const
Definition: MultiParticleContainer.cpp:661
std::vector< std::string > GetSpeciesNames() const
Definition: MultiParticleContainer.H:285
void InitBreitWheeler()
Definition: MultiParticleContainer.cpp:1063
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:854
amrex::Vector< amrex::Long > GetZeroParticlesInGrid(int lev) const
This returns a vector filled with zeros whose size is the number of boxes in the simulation boxarray....
Definition: MultiParticleContainer.cpp:652
bool m_do_back_transformed_particles
Definition: MultiParticleContainer.H:501
void SortParticlesByBin(amrex::IntVect bin_size)
Definition: MultiParticleContainer.cpp:608
amrex::Vector< std::unique_ptr< WarpXParticleContainer > > allcontainers
Definition: MultiParticleContainer.H:493
void SetParticleBoxArray(int lev, amrex::BoxArray &new_ba)
Definition: MultiParticleContainer.cpp:692
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:1562
void UpdateAntennaPosition(amrex::Real dt) const
Update antenna position for continuous injection of lasers in a boosted frame. Empty function for con...
Definition: MultiParticleContainer.cpp:723
MultiParticleContainer(MultiParticleContainer &&)=default
void doResampling(int timestep, bool verbose)
This function loops over all species and performs resampling if appropriate.
Definition: MultiParticleContainer.cpp:926
void CheckIonizationProductSpecies()
Definition: MultiParticleContainer.cpp:937
std::unique_ptr< amrex::Parser > m_Ex_particle_parser
Definition: MultiParticleContainer.H:307
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(int index)
Definition: MultiParticleContainer.H:88
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:312
int m_qed_schwinger_threshold_poisson_gaussian
Definition: MultiParticleContainer.H:477
std::vector< bool > m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition: MultiParticleContainer.H:379
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:1465
void CheckQEDProductSpecies()
Definition: MultiParticleContainer.cpp:1643
MultiParticleContainer & operator=(MultiParticleContainer const &)=delete
amrex::Real m_qed_schwinger_y_size
Definition: MultiParticleContainer.H:472
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:318
void ScrapeParticles(const amrex::Vector< const amrex::MultiFab * > &distance_to_eb)
Definition: MultiParticleContainer.cpp:948
PhysicalParticleContainer & GetPCtmp()
Definition: MultiParticleContainer.H:296
int nContainers() const
Definition: MultiParticleContainer.H:241
void WriteHeader(std::ostream &os) const
Definition: ParticleIO.cpp:229
std::string m_qed_schwinger_pos_product_name
Definition: MultiParticleContainer.H:466
void Restart(const std::string &dir)
Definition: ParticleIO.cpp:122
void ContinuousFluxInjection(amrex::Real t, amrex::Real dt) const
Definition: MultiParticleContainer.cpp:749
int m_qed_schwinger_pos_product
Definition: MultiParticleContainer.H:470
amrex::MFItInfo getMFItInfo(const WarpXParticleContainer &pc_src, Args const &... pc_dsts) const noexcept
Definition: MultiParticleContainer.H:385
MultiParticleContainer(amrex::AmrCore *amr_core)
Definition: MultiParticleContainer.cpp:93
WarpXParticleContainer & GetParticleContainer(int index) const
Definition: MultiParticleContainer.H:80
void doCollisions(amrex::Real cur_time, amrex::Real dt)
Definition: MultiParticleContainer.cpp:920
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)
Definition: MultiParticleContainer.cpp:450
std::unique_ptr< amrex::Parser > m_Ez_particle_parser
Definition: MultiParticleContainer.H:309
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: MultiParticleContainer.H:407
~MultiParticleContainer()=default
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:375
void SetDoBackTransformedParticles(bool do_back_transformed_particles)
Definition: MultiParticleContainer.cpp:830
PCTypes
Definition: MultiParticleContainer.H:366
amrex::Vector< std::unique_ptr< WarpXParticleContainer > >::iterator end()
Definition: MultiParticleContainer.H:337
std::unique_ptr< amrex::Parser > m_Bx_particle_parser
Definition: MultiParticleContainer.H:303
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:1479
Definition: PhysicalParticleContainer.H:47
Definition: WarpXParticleContainer.H:110
static AMREX_EXPORT bool do_tiling
static AMREX_EXPORT IntVect tile_size
Long size() const noexcept
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
static constexpr auto m_e
electron mass [kg]
Definition: constant.H:52
bool notInLaunchRegion() noexcept
int count
Definition: run_alltests.py:322
name
Definition: run_automated.py:229
index
Definition: run_automated.py:328
float dt
Definition: stencil.py:442
MFItInfo & EnableTiling(const IntVect &ts=FabArrayBase::mfiter_tile_size) noexcept
MFItInfo & SetDynamic(bool f) noexcept