10#ifndef WARPX_WarpXParticleContainer_H_
11#define WARPX_WarpXParticleContainer_H_
66#if defined(WARPX_DIM_1D_Z)
68 static constexpr auto names = {
"z",
"w",
"ux",
"uy",
"uz"};
69#elif defined(WARPX_DIM_XZ)
71 static constexpr auto names = {
"x",
"z",
"w",
"ux",
"uy",
"uz"};
72#elif defined(WARPX_DIM_RZ)
74 static constexpr auto names = {
"r",
"z",
"w",
"ux",
"uy",
"uz",
"theta"};
75#elif defined(WARPX_DIM_RCYLINDER)
77 static constexpr auto names = {
"r",
"w",
"ux",
"uy",
"uz",
"theta"};
78#elif defined(WARPX_DIM_RSPHERE)
80 static constexpr auto names = {
"r",
"w",
"ux",
"uy",
"uz",
"theta",
"phi"};
81#elif defined(WARPX_DIM_3D)
83 static constexpr auto names = {
"x",
"y",
"z",
"w",
"ux",
"uy",
"uz"};
85 #error WarpX dimension is not correctly set!
98 static constexpr std::initializer_list<char const *>
names = {};
120 [[nodiscard]]
const std::array<RealVector, PIdx::nattribs>&
GetAttribs ()
const
125 [[nodiscard]] std::array<RealVector, PIdx::nattribs>&
GetAttribs ()
234 const std::string& current_fp_string,
278 int n_external_attr_real,
279 int n_external_attr_int) = 0;
341 bool local =
false,
bool reset =
false,
342 bool apply_boundary_and_scale_volume =
false,
343 bool interpolate_across_levels =
true,
346 bool local =
false,
bool reset =
false,
347 bool apply_boundary_and_scale_volume =
false,
350 std::unique_ptr<amrex::MultiFab>
GetChargeDensity(
int lev,
bool local =
false);
404 [[maybe_unused]]
long const offset,
405 [[maybe_unused]]
long const np_to_deposit,
406 [[maybe_unused]]
int const thread_num,
407 [[maybe_unused]]
const int lev,
408 [[maybe_unused]]
int const depos_lev,
596 int DoQED()
const {
return false; }
604 template<PhysicalSpecies PhysSpec>
628 virtual std::vector<std::
string>
getUserIntAttribs ()
const {
return std::vector<std::string>{}; }
648 auto const pos = std::find(int_names.begin(), int_names.end(), name);
649 return (pos != int_names.end());
Array4< int const > offset
PhysicalSpecies
Definition SpeciesPhysicalProperties.H:16
@ unspecified
Definition SpeciesPhysicalProperties.H:17
PushType
Particle push scheme.
Definition WarpXAlgorithmSelection.H:170
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:180
@ Full
Definition WarpXAlgorithmSelection.H:180
MomentumPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:189
@ Full
Definition WarpXAlgorithmSelection.H:189
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
Definition BreitWheelerEngineWrapper.H:294
Definition PlasmaInjector.H:39
Definition QuantumSyncEngineWrapper.H:274
Definition WarpXParticleContainer.H:112
WarpXParIter(ContainerType &pc, int level)
Definition WarpXParticleContainer.cpp:82
RealVector & GetAttribs(const std::string &name)
Definition WarpXParticleContainer.H:155
const RealVector & GetAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:150
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition WarpXParticleContainer.H:125
const IntVector & GetiAttribs(int comp) const
Definition WarpXParticleContainer.H:140
const IntVector & GetiAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:160
const RealVector & GetAttribs(int comp) const
Definition WarpXParticleContainer.H:130
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition WarpXParticleContainer.H:120
IntVector & GetiAttribs(const std::string &name)
Definition WarpXParticleContainer.H:165
RealVector & GetAttribs(int comp)
Definition WarpXParticleContainer.H:135
IntVector & GetiAttribs(int comp)
Definition WarpXParticleContainer.H:145
Definition WarpXParticleContainer.H:195
amrex::Real self_fields_required_precision
Definition WarpXParticleContainer.H:554
amrex::ParticleReal sumParticleCharge(bool local=false) const
Definition WarpXParticleContainer.cpp:2519
virtual void Evolve(ablastr::fields::MultiFabRegister &fields, int lev, const std::string ¤t_fp_string, amrex::Real t, amrex::Real dt, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full, ImplicitOptions const *implicit_options=nullptr)=0
Pure virtual function to advance particles (typically by one time step).
int do_continuous_injection
Definition WarpXParticleContainer.H:682
amrex::Vector< amrex::FArrayBox > local_Szy
Definition WarpXParticleContainer.H:734
virtual amrex::Vector< amrex::Parser * > getUserIntAttribParser() const
Definition WarpXParticleContainer.H:632
amrex::Vector< amrex::FArrayBox > local_Sxy
Definition WarpXParticleContainer.H:728
void DepositTotalNGPTemperature(int lev)
Definition WarpXParticleContainer.cpp:1932
~WarpXParticleContainer() override=default
WarpXParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition WarpXParticleContainer.cpp:94
bool AmIA() const noexcept
Definition WarpXParticleContainer.H:605
amrex::Vector< amrex::FArrayBox > local_Syx
Definition WarpXParticleContainer.H:730
amrex::Vector< amrex::FArrayBox > local_Szz
Definition WarpXParticleContainer.H:735
amrex::Vector< amrex::ParticleReal > m_B_external_particle
Definition WarpXParticleContainer.H:560
amrex::ParticleContainerPureSoA< PIdx::nattribs, 0, amrex::PolymorphicArenaAllocator > Base
Definition WarpXParticleContainer.H:199
void CalculateNuei(amrex::MultiFab &species_nuei, WarpXParticleContainer const &electron_species, int lev)
Definition WarpXParticleContainer.cpp:2202
amrex::Vector< amrex::FArrayBox > local_Sxx
Definition WarpXParticleContainer.H:727
bool m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition WarpXParticleContainer.H:673
virtual void AllocData()
Definition WarpXParticleContainer.cpp:174
void defineAllParticleTiles() noexcept
Definition WarpXParticleContainer.cpp:2802
std::pair< amrex::ParticleReal, amrex::ParticleReal > sumParticleWeightAndEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2453
virtual void PostRestart()=0
void particlePostLocate(ParticleType &p, const amrex::ParticleLocData &pld, int lev) override
Definition WarpXParticleContainer.cpp:2817
virtual void ReadHeader(std::istream &is)=0
int self_fields_max_iters
Definition WarpXParticleContainer.H:556
amrex::Real m_current_injection_position
Current injection position.
Definition WarpXParticleContainer.H:564
int species_id
Definition WarpXParticleContainer.H:655
virtual bool getTemperatureDepositionFlag() const noexcept
Definition WarpXParticleContainer.H:742
std::string m_qed_breit_wheeler_ele_product_name
Definition WarpXParticleContainer.H:712
virtual void WriteHeader(std::ostream &os) const =0
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition WarpXParticleContainer.H:693
int do_adk_correction
Definition WarpXParticleContainer.H:685
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition WarpXParticleContainer.H:691
PhysicalSpecies physical_species
Definition WarpXParticleContainer.H:660
amrex::ParticleReal m_charge
Definition WarpXParticleContainer.H:658
bool do_not_push
Definition WarpXParticleContainer.H:675
std::unique_ptr< amrex::MultiFab > GetPlasmaFrequency(int lev)
Definition WarpXParticleContainer.cpp:2409
std::unique_ptr< amrex::MultiFab > GetDebyeLength(int lev)
Definition WarpXParticleContainer.cpp:2103
bool HasiAttrib(const std::string &name)
Definition WarpXParticleContainer.H:645
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition WarpXParticleContainer.H:467
virtual std::vector< std::string > getUserIntAttribs() const
Definition WarpXParticleContainer.H:628
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition WarpXParticleContainer.H:610
int m_qed_quantum_sync_phot_product
Definition WarpXParticleContainer.H:715
amrex::ParticleReal maxParticleVelocity(bool local=false)
Definition WarpXParticleContainer.cpp:2610
virtual void InitIonizationModule()
Definition WarpXParticleContainer.H:221
virtual void InitData()=0
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition WarpXParticleContainer.H:692
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition WarpXParticleContainer.H:573
virtual void DefaultInitializeRuntimeAttributes(typename ContainerLike< amrex::PolymorphicArenaAllocator >::ParticleTileType &pinned_tile, int n_external_attr_real, int n_external_attr_int)=0
Virtual method to initialize runtime attributes. Must be overriden by each derived class.
amrex::Vector< amrex::FArrayBox > local_Syy
Definition WarpXParticleContainer.H:731
int ionization_initial_level
Definition WarpXParticleContainer.H:689
virtual QuantumSynchrotronEngine * get_quantum_sync_engine_ptr() const
Definition WarpXParticleContainer.H:638
amrex::Real self_fields_absolute_tolerance
Definition WarpXParticleContainer.H:555
amrex::Vector< amrex::FArrayBox > local_jx
Definition WarpXParticleContainer.H:722
std::string m_qed_virtual_photon_species_name
Definition WarpXParticleContainer.H:718
void setDoNotDeposit(int flag)
Definition WarpXParticleContainer.H:643
virtual void set_breit_wheeler_engine_ptr(const std::shared_ptr< BreitWheelerEngine > &)
Definition WarpXParticleContainer.H:707
amrex::Vector< amrex::FArrayBox > local_Syz
Definition WarpXParticleContainer.H:732
void DepositCurrent(ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time)
Deposit current density.
Definition WarpXParticleContainer.cpp:1417
virtual bool has_virtual_photons() const
Definition WarpXParticleContainer.H:591
virtual void UpdateAntennaPosition(const amrex::Real)
Update antenna position for continuous injection of lasers in a boosted frame. Empty function for con...
Definition WarpXParticleContainer.H:462
virtual std::vector< std::string > getUserRealAttribs() const
Definition WarpXParticleContainer.H:630
bool doContinuousInjection() const
Definition WarpXParticleContainer.H:464
bool GetDoBackTransformedParticles() const
Definition WarpXParticleContainer.H:577
amrex::StructOfArrays< DiagIdx::nattribs, 0 > DiagnosticParticleData
Definition WarpXParticleContainer.H:203
amrex::Vector< amrex::FArrayBox > local_jy
Definition WarpXParticleContainer.H:723
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition WarpXParticleContainer.cpp:1902
static void ReadParameters()
Definition WarpXParticleContainer.cpp:161
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, MomentumPushType momentum_push_type=MomentumPushType::Full)=0
int getIonizationInitialLevel() const noexcept
Definition WarpXParticleContainer.H:739
virtual BreitWheelerEngine * get_breit_wheeler_engine_ptr() const
Definition WarpXParticleContainer.H:637
amrex::Gpu::DeviceVector< amrex::Real > adk_correction_factors
Definition WarpXParticleContainer.H:695
int ion_atomic_number
Definition WarpXParticleContainer.H:688
bool m_do_back_transformed_particles
Definition WarpXParticleContainer.H:701
amrex::Vector< amrex::FArrayBox > local_jz
Definition WarpXParticleContainer.H:724
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition WarpXParticleContainer.H:690
amrex::ParticleReal getCharge() const
Definition WarpXParticleContainer.H:581
std::unique_ptr< amrex::MultiFab > GetNumberDensity(int lev)
Definition WarpXParticleContainer.cpp:2393
amrex::Vector< amrex::FArrayBox > local_Szx
Definition WarpXParticleContainer.H:733
bool m_crop_on_PEC_boundary
Definition WarpXParticleContainer.H:667
virtual void DepositTemperature(WarpXParIter &pti, RealVector const &wp, RealVector const &uxp, RealVector const &uyp, RealVector const &uzp, amrex::MultiFab *const Tx, amrex::MultiFab *const Ty, amrex::MultiFab *const Tz, long const offset, long const np_to_deposit, int const thread_num, const int lev, int const depos_lev, amrex::Real const relative_time, PushType push_type, const warpx::particles::deposition::TemperatureDepositionType type, const warpx::particles::deposition::TemperatureDepositionPass pass)
Definition WarpXParticleContainer.H:395
void TransformMomentumToCurvilinear(bool forward)
Map the momentum of the particles to and from the curvilinear frame. This is equivalent to mapping to...
Definition WarpXParticleContainer.cpp:2651
virtual void DepositMassMatrices(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt)
virtual function to deposit mass matrices for charged particles
Definition WarpXParticleContainer.H:261
WarpXParticleContainer & operator=(WarpXParticleContainer &&)=default
void ApplyBoundaryConditions()
Apply particle BC.
Definition WarpXParticleContainer.cpp:2839
virtual bool has_breit_wheeler() const
Definition WarpXParticleContainer.H:590
std::string m_qed_breit_wheeler_pos_product_name
Definition WarpXParticleContainer.H:714
virtual void FinishImplicitParticleUpdate(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real t, amrex::Real dt)
Finish the implicit particle update at the end of a time step.
Definition WarpXParticleContainer.cpp:2909
std::string m_qed_quantum_sync_phot_product_name
Definition WarpXParticleContainer.H:716
virtual void ContinuousInjection(const amrex::RealBox &)
Definition WarpXParticleContainer.H:456
WarpXParticleContainer & operator=(const WarpXParticleContainer &)=delete
ParticleBoundaries m_boundary_conditions
Definition WarpXParticleContainer.H:663
virtual void resample(const amrex::Vector< amrex::Geometry > &, const int, bool)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition WarpXParticleContainer.H:618
int m_qed_breit_wheeler_pos_product
Definition WarpXParticleContainer.H:713
std::string species_name
Definition WarpXParticleContainer.H:656
int ionization_product
Definition WarpXParticleContainer.H:686
int m_qed_virtual_photon_species
Definition WarpXParticleContainer.H:717
amrex::Real m_qed_virtual_photon_min_energy
Definition WarpXParticleContainer.H:719
void AddNParticles(int lev, long n, amrex::Vector< amrex::ParticleReal > const &x, amrex::Vector< amrex::ParticleReal > const &y, amrex::Vector< amrex::ParticleReal > const &z, amrex::Vector< amrex::ParticleReal > const &ux, amrex::Vector< amrex::ParticleReal > const &uy, amrex::Vector< amrex::ParticleReal > const &uz, int nattr_real, amrex::Vector< amrex::Vector< amrex::ParticleReal > > const &attr_real, int nattr_int, amrex::Vector< amrex::Vector< int > > const &attr_int, int uniqueparticles, amrex::Long id=-1)
Adds n particles to the simulation.
Definition WarpXParticleContainer.cpp:183
int m_qed_breit_wheeler_ele_product
Definition WarpXParticleContainer.H:711
bool do_splitting
Definition WarpXParticleContainer.H:551
virtual void set_quantum_sync_engine_ptr(const std::shared_ptr< QuantumSynchrotronEngine > &)
Definition WarpXParticleContainer.H:709
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(bool local=false)
Definition WarpXParticleContainer.cpp:2524
std::string const & getName()
Definition WarpXParticleContainer.H:652
virtual void AccumulateVelocitiesAndComputeTemperature(ablastr::fields::MultiLevelVectorField const &T_vf, amrex::Real relative_time)
Accumulate velocity moments for matched temperature deposition using particle shapes.
Definition WarpXParticleContainer.H:390
bool initialize_self_fields
Definition WarpXParticleContainer.H:553
int self_fields_verbosity
Definition WarpXParticleContainer.H:557
virtual bool has_quantum_sync() const
Definition WarpXParticleContainer.H:589
std::string physical_element
Definition WarpXParticleContainer.H:696
void deleteInvalidParticles()
Definition WarpXParticleContainer.cpp:357
int split_type
Definition WarpXParticleContainer.H:567
virtual amrex::Vector< amrex::Parser * > getUserRealAttribParser() const
Definition WarpXParticleContainer.H:634
amrex::Vector< amrex::FArrayBox > local_Sxz
Definition WarpXParticleContainer.H:729
amrex::ParticleReal sumParticleEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2507
void PushX(amrex::Real dt)
Definition WarpXParticleContainer.cpp:2732
WarpXParticleContainer(WarpXParticleContainer &&)=default
virtual PlasmaInjector * GetPlasmaInjector(const int)
Definition WarpXParticleContainer.H:227
friend MultiParticleContainer
Definition WarpXParticleContainer.H:197
amrex::Vector< amrex::ParticleReal > m_E_external_particle
Definition WarpXParticleContainer.H:561
std::string ionization_product_name
Definition WarpXParticleContainer.H:687
amrex::ParticleReal m_mass
Definition WarpXParticleContainer.H:659
int getSpeciesId() const
Definition WarpXParticleContainer.H:469
int DoFieldIonization() const
Definition WarpXParticleContainer.H:585
virtual bool has_virtual_photons_beam_size_effect() const
Definition WarpXParticleContainer.H:592
int do_not_deposit
Definition WarpXParticleContainer.H:552
void setDoNotPush(bool flag)
Definition WarpXParticleContainer.H:641
WarpXParticleContainer(const WarpXParticleContainer &)=delete
amrex::ParticleReal getMass() const
Definition WarpXParticleContainer.H:583
void DepositCharge(const ablastr::fields::MultiLevelScalarField &rho, bool local=false, bool reset=false, bool apply_boundary_and_scale_volume=false, bool interpolate_across_levels=true, int icomp=0)
Deposit charge density.
Definition WarpXParticleContainer.cpp:1793
void setDoNotGather(int flag)
Definition WarpXParticleContainer.H:642
amrex::ParticleReal sumParticleWeight(bool local=false) const
Definition WarpXParticleContainer.cpp:2513
virtual int getVirtualPhotonSpeciesIndex() const
Definition WarpXParticleContainer.H:593
amrex::Vector< std::map< std::pair< int, int >, DiagnosticParticleData > > DiagnosticParticles
Definition WarpXParticleContainer.H:208
int DoQED() const
Definition WarpXParticleContainer.H:594
int do_resampling
Definition WarpXParticleContainer.H:698
int do_not_gather
Definition WarpXParticleContainer.H:676
static void BackwardCompatibility()
bool m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid
Definition WarpXParticleContainer.H:670
amrex::Vector< amrex::FArrayBox > local_rho
Definition WarpXParticleContainer.H:721
int do_field_ionization
Definition WarpXParticleContainer.H:684
void DepositNumberDensity(amrex::MultiFab *number_density, int lev)
Definition WarpXParticleContainer.cpp:2335
SoARef GetStructOfArrays() const
typename SoA::RealVector RealVector
ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor > ContainerType
typename SoA::IntVector IntVector
typename SoA::RealVector RealVector
std::vector< std::string > GetIntSoANames() const
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
T_ParticleType ParticleType
amrex_particle_real ParticleReal
PODVector< T, ArenaAllocator< T > > DeviceVector
Definition EffectivePotentialPoissonSolver.H:63
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
__host__ __device__ void ignore_unused(const Ts &...)
ParIter_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParIterSoA
ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParticleContainerPureSoA
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition SpeciesPhysicalProperties.cpp:291
TemperatureDepositionType
Definition TemperatureDepositionTypes.H:20
TemperatureDepositionPass
Definition TemperatureDepositionTypes.H:25
Definition WarpXParticleContainer.H:102
@ ux
Definition WarpXParticleContainer.H:105
@ x
Definition WarpXParticleContainer.H:105
@ nattribs
Definition WarpXParticleContainer.H:106
@ z
Definition WarpXParticleContainer.H:105
@ w
Definition WarpXParticleContainer.H:104
@ y
Definition WarpXParticleContainer.H:105
@ uy
Definition WarpXParticleContainer.H:105
@ uz
Definition WarpXParticleContainer.H:105
Definition ImplicitOptions.H:7
Definition WarpXParticleContainer.H:92
@ nattribs
the number of attributes above (always last)
Definition WarpXParticleContainer.H:95
static constexpr std::initializer_list< char const * > names
Definition WarpXParticleContainer.H:98
Definition WarpXParticleContainer.H:65
static constexpr auto names
Definition WarpXParticleContainer.H:71
@ nattribs
Definition WarpXParticleContainer.H:70
@ x
Definition WarpXParticleContainer.H:70
@ uz
Definition WarpXParticleContainer.H:70
@ w
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ z
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70
Definition ParticleBoundaries.H:42
Definition MultiFabRegister.H:272