10#ifndef WARPX_PhysicalParticleContainer_H_
11#define WARPX_PhysicalParticleContainer_H_
54 const std::string& name);
105 const std::string& current_fp_string,
109 bool skip_deposition=
false,
134 int lev,
int gather_lev,
143 long & num_unconverged_particles,
150 long num_unconverged_particles,
165 int lev,
int gather_lev,
167 long & num_unconverged_particles,
185 int lev,
int gather_lev,
187 bool skip_deposition,
188 long num_unconverged_particles,
207 int n_field_gather_buffer,
208 int n_current_deposition_buffer,
291 int n_external_attr_real,
292 int n_external_attr_int)
final;
335 amrex::Elixir& exeli, amrex::Elixir& eyeli, amrex::Elixir& ezeli,
336 amrex::Elixir& bxeli, amrex::Elixir& byeli, amrex::Elixir& bzeli,
382 (
const std::shared_ptr<BreitWheelerEngine>& ptr)
override;
389 (
const std::shared_ptr<QuantumSynchrotronEngine>& ptr)
override;
453 long offset,
long np_to_deposit,
454 int thread_num,
int lev,
int depos_lev,
Array4< int const > offset
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
Filter functor for the Breit Wheeler process.
Definition QEDPairGeneration.H:38
Filter functor for the QED photon emission process.
Definition QEDPhotonEmission.H:44
void set_breit_wheeler_engine_ptr(const std::shared_ptr< BreitWheelerEngine > &ptr) override
Definition PhysicalParticleContainer.cpp:1782
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) override
Evolve is the central function in PhysicalParticleContainer that advances plasma particles for a time...
Definition PhysicalParticleContainer.cpp:452
std::vector< std::string > m_user_int_attribs
Definition PhysicalParticleContainer.H:525
BreitWheelerEngine * get_breit_wheeler_engine_ptr() const override
Definition PhysicalParticleContainer.H:392
void ImplicitPushXPSubOrbits(WarpXParIter &pti, ablastr::fields::MultiFabRegister &fields, amrex::FArrayBox const *exfab, amrex::FArrayBox const *eyfab, amrex::FArrayBox const *ezfab, amrex::FArrayBox const *bxfab, amrex::FArrayBox const *byfab, amrex::FArrayBox const *bzfab, ImplicitOptions const *implicit_options, amrex::IntVect ngEB, amrex::MultiFab *jx, amrex::MultiFab *jy, amrex::MultiFab *jz, long offset, int lev, int gather_lev, amrex::Real dt, bool skip_deposition, long num_unconverged_particles, amrex::Gpu::DeviceVector< long > &unconverged_indices, amrex::Gpu::DeviceVector< amrex::ParticleReal > &saved_weights)
Definition ImplicitPushPX.cpp:700
amrex::Vector< amrex::Parser * > getUserIntAttribParser() const override
Definition PhysicalParticleContainer.H:433
PhysicalParticleContainer & operator=(PhysicalParticleContainer const &)=delete
std::unique_ptr< warpx::particles::deposition::VarianceAccumulationBuffer > local_temperature_arrays
Definition PhysicalParticleContainer.H:502
void PartitionParticlesInBuffers(long &nfine_current, long &nfine_gather, long np, WarpXParIter &pti, int lev, int n_field_gather_buffer, int n_current_deposition_buffer, amrex::iMultiFab const *current_masks, amrex::iMultiFab const *gather_masks)
Determine which particles deposit/gather in the buffer, and and reorder the particle arrays according...
Definition Partition.cpp:53
void SetupSuborbitParticles(WarpXParIter &pti, long offset, long np_to_push, long num_unconverged_particles, amrex::Gpu::DeviceVector< long > &unconverged_indices, amrex::Gpu::DeviceVector< amrex::ParticleReal > &saved_weights)
Definition ImplicitPushPX.cpp:320
void AccumulateVelocitiesAndComputeTemperature(ablastr::fields::MultiLevelVectorField const &T_vf, amrex::Real relative_time) override
Accumulate velocity moments for matched temperature deposition using particle shapes.
Definition PhysicalParticleContainer.cpp:1982
void DefaultInitializeRuntimeAttributes(typename ContainerLike< amrex::PolymorphicArenaAllocator >::ParticleTileType &pinned_tile, int n_external_attr_real, int n_external_attr_int) final
Default initialize runtime attributes in a tile. This routine does not initialize the first n_externa...
Definition PhysicalParticleContainer.cpp:436
bool findRefinedInjectionBox(amrex::Box &fine_injection_box, amrex::IntVect &rrfac)
Definition PhysicalParticleContainer.cpp:1731
IonizationFilterFunc getIonizationFunc(const WarpXParIter &pti, int lev, amrex::IntVect ngEB, 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:1659
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition PhysicalParticleContainer.H:515
Resampling m_resampler
Definition PhysicalParticleContainer.H:481
amrex::Vector< std::unique_ptr< amrex::Parser > > m_user_int_attrib_parser
Definition PhysicalParticleContainer.H:529
PhysicalParticleContainer(PhysicalParticleContainer &&)=default
bool m_do_qed_virtual_photons
Definition PhysicalParticleContainer.H:518
void set_quantum_sync_engine_ptr(const std::shared_ptr< QuantumSynchrotronEngine > &ptr) override
Definition PhysicalParticleContainer.cpp:1789
void SplitParticles(int lev)
Definition PhysicalParticleContainer.cpp:969
bool m_do_qed_quantum_sync
Definition PhysicalParticleContainer.H:506
void ImplicitPushXP(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, ImplicitOptions const *implicit_options, amrex::IntVect const &ngEB, long offset, long np_to_push, int lev, int gather_lev, amrex::Real dt, long &num_unconverged_particles, amrex::Gpu::DeviceVector< long > &unconverged_indices, amrex::Gpu::DeviceVector< amrex::ParticleReal > &saved_weights)
Definition ImplicitPushPX.cpp:395
void ContinuousInjection(const amrex::RealBox &injection_box) override
Definition AddParticles.cpp:267
bool has_breit_wheeler() const override
Definition PhysicalParticleContainer.cpp:1761
PhysicalParticleContainer(PhysicalParticleContainer const &)=delete
bool m_do_qed_breit_wheeler
Definition PhysicalParticleContainer.H:509
bool m_qed_virtual_photons_do_beam_size_effect
Definition PhysicalParticleContainer.H:521
PairGenerationFilterFunc getPairGenerationFilterFunc()
Definition PhysicalParticleContainer.cpp:1802
bool do_classical_radiation_reaction
Definition PhysicalParticleContainer.H:494
void MapParticletoBoostedFrame(amrex::ParticleReal &x, amrex::ParticleReal &y, amrex::ParticleReal &z, amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, amrex::Real t_lab=0.) const
Definition AddParticles.cpp:293
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition PhysicalParticleContainer.H:512
void DepositTemperature(WarpXParIter &pti, RealVector const &wp, RealVector const &uxp, RealVector const &uyp, RealVector const &uzp, amrex::MultiFab *Tx, amrex::MultiFab *Ty, amrex::MultiFab *Tz, long offset, long np_to_deposit, int thread_num, int lev, int depos_lev, amrex::Real relative_time, PushType push_type, warpx::particles::deposition::TemperatureDepositionType type, warpx::particles::deposition::TemperatureDepositionPass pass) override
Definition PhysicalParticleContainer.cpp:1828
std::vector< std::string > getUserRealAttribs() const override
Definition PhysicalParticleContainer.H:429
bool impose_t_lab_from_file
Definition PhysicalParticleContainer.H:479
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, amrex::IntVect ngEB, int, long offset, long np_to_push, int lev, int gather_lev, amrex::Real dt, ScaleFields scaleFields, SubcyclingHalf subcycling_half=SubcyclingHalf::None, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full)
Gather fields and push particles in one fused kernel.
Definition PhysicalParticleContainer.cpp:1324
int getVirtualPhotonSpeciesIndex() const override
Definition PhysicalParticleContainer.cpp:1776
void resample(const amrex::Vector< amrex::Geometry > &geom, int timestep, bool verbose=true) final
This function determines if resampling should be done for the current species, and if so,...
Definition PhysicalParticleContainer.cpp:1692
void InitData() override
Definition PhysicalParticleContainer.cpp:429
void ReadHeader(std::istream &is) override
Definition ParticleIO.cpp:115
virtual void AddParticles(int lev)
Definition AddParticles.cpp:195
void BackwardCompatibility()
Definition PhysicalParticleContainer.cpp:398
void AllocData() override
Definition PhysicalParticleContainer.cpp:358
amrex::Vector< std::unique_ptr< amrex::Parser > > m_user_real_attrib_parser
Definition PhysicalParticleContainer.H:531
bool getTemperatureDepositionFlag() const noexcept override
Definition PhysicalParticleContainer.H:442
void CheckAndAddParticle(amrex::ParticleReal x, amrex::ParticleReal y, amrex::ParticleReal z, amrex::ParticleReal ux, amrex::ParticleReal uy, amrex::ParticleReal uz, amrex::ParticleReal 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, amrex::Real t_lab=0.) const
Definition AddParticles.cpp:341
bool m_save_previous_position
Definition PhysicalParticleContainer.H:497
void InitIonizationModule() override
Definition PhysicalParticleContainer.cpp:1572
void DepositMassMatrices(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt) override
Deposit mass matrices.
Definition PhysicalParticleContainer.cpp:828
QuantumSynchrotronEngine * get_quantum_sync_engine_ptr() const override
Definition PhysicalParticleContainer.H:396
void FindSuborbitParticles(WarpXParIter &pti, long offset, long np_to_push, long &num_unconverged_particles, amrex::Gpu::DeviceVector< long > &unconverged_indices, amrex::Gpu::DeviceVector< amrex::ParticleReal > &saved_weights)
Definition ImplicitPushPX.cpp:272
void PostRestart() final
Definition PhysicalParticleContainer.H:212
bool m_random_theta
Definition PhysicalParticleContainer.H:476
std::vector< std::string > m_user_real_attribs
Definition PhysicalParticleContainer.H:527
std::vector< std::string > getUserIntAttribs() const override
Definition PhysicalParticleContainer.H:425
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) override
Definition PhysicalParticleContainer.cpp:1173
void ContinuousFluxInjection(amrex::Real t, amrex::Real dt) override
Definition AddParticles.cpp:279
~PhysicalParticleContainer() override=default
bool m_do_temperature_deposition
Definition PhysicalParticleContainer.H:500
PhysicalParticleContainer & operator=(PhysicalParticleContainer &&)=default
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 *&ex_ptr, amrex::FArrayBox const *&ey_ptr, amrex::FArrayBox const *&ez_ptr, amrex::FArrayBox const *&bx_ptr, amrex::FArrayBox const *&by_ptr, amrex::FArrayBox const *&bz_ptr)
Apply NCI Godfrey filter to all components of E and B before gather.
Definition PhysicalParticleContainer.cpp:890
void AddPlasmaFromFile(PlasmaInjector &plasma_injector, amrex::ParticleReal q_tot, amrex::ParticleReal z_shift)
Definition AddParticles.cpp:608
void WriteHeader(std::ostream &os) const override
Definition ParticleIO.cpp:122
void AddGaussianBeam(PlasmaInjector const &plasma_injector)
Definition AddParticles.cpp:367
bool has_virtual_photons_beam_size_effect() const override
Definition PhysicalParticleContainer.cpp:1771
PlasmaInjector * GetPlasmaInjector(int i) override
Definition PhysicalParticleContainer.cpp:1683
bool has_virtual_photons() const override
Definition PhysicalParticleContainer.cpp:1766
bool boost_adjust_transverse_positions
Definition PhysicalParticleContainer.H:474
std::vector< std::unique_ptr< PlasmaInjector > > plasma_injectors
Definition PhysicalParticleContainer.H:469
amrex::Vector< amrex::Parser * > getUserRealAttribParser() const override
Definition PhysicalParticleContainer.H:437
bool has_quantum_sync() const override
Definition PhysicalParticleContainer.cpp:1756
PhotonEmissionFilterFunc getPhotonEmissionFilterFunc()
Definition PhysicalParticleContainer.cpp:1795
std::string species_name
Definition PhysicalParticleContainer.H:468
bool do_backward_propagation
Definition PhysicalParticleContainer.H:475
PhysicalParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition PhysicalParticleContainer.cpp:119
void AddPlasma(PlasmaInjector &plasma_injector, int lev, amrex::RealBox part_realbox=amrex::RealBox())
Definition AddParticles.cpp:746
void AddPlasmaFlux(PlasmaInjector const &plasma_injector, amrex::Real dt)
Definition AddParticles.cpp:1229
Definition PlasmaInjector.H:39
Definition QuantumSyncEngineWrapper.H:274
This is a general class used for resampling that is instantiated as a member of MultiParticleContaine...
Definition Resampling.H:54
Definition WarpXParticleContainer.H:112
WarpXParticleContainer(amrex::AmrCore *amr_core, int ispecies)
Definition WarpXParticleContainer.cpp:94
typename SoA::RealVector RealVector
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
amrex_particle_real ParticleReal
PinnedVector< T > HostVector
PODVector< T, ArenaAllocator< T > > DeviceVector
Definition EffectivePotentialPoissonSolver.H:63
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
TemperatureDepositionType
Definition TemperatureDepositionTypes.H:20
TemperatureDepositionPass
Definition TemperatureDepositionTypes.H:25
Definition ImplicitOptions.H:7
Definition Ionization.H:31
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition ScaleFields.H:14
Definition MultiFabRegister.H:272