WarpX
Loading...
Searching...
No Matches
PhotonParticleContainer Class Reference

#include <PhotonParticleContainer.H>

Inheritance diagram for PhotonParticleContainer:
PhysicalParticleContainer WarpXParticleContainer amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > amrex::ParticleContainerBase

Public Member Functions

 PhotonParticleContainer (amrex::AmrCore *amr_core, int ispecies, const std::string &name)
 ~PhotonParticleContainer () override=default
 PhotonParticleContainer (PhotonParticleContainer const &)=delete
PhotonParticleContaineroperator= (PhotonParticleContainer const &)=delete
 PhotonParticleContainer (PhotonParticleContainer &&)=default
PhotonParticleContaineroperator= (PhotonParticleContainer &&)=default
void InitData () override
void Evolve (ablastr::fields::MultiFabRegister &fields, int lev, const std::string &current_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
 Pure virtual function to advance particles (typically by one time step).
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, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full) override
 Gather fields and push particles in one fused kernel.
void FinishImplicitParticleUpdate (ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real t, amrex::Real dt) override
 Advances photon position at the end of an implicit time step.
void PushP (int, amrex::Real, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, MomentumPushType) override
void DepositCharge (WarpXParIter &, RealVector const &, const int *const, amrex::MultiFab *, int, const long, const long, int, int, int) override
void DepositCurrent (WarpXParIter &, RealVector const &, RealVector const &, RealVector const &, RealVector const &, int const *const, amrex::MultiFab *const, amrex::MultiFab *const, amrex::MultiFab *const, long const, long const, int const, int const, int const, amrex::Real const, amrex::Real const, PushType) override
void DepositMassMatrices (ablastr::fields::MultiFabRegister &, int, amrex::Real) override
 No-op override: photons are massless and carry no charge, so they do not contribute to the implicit-solver mass matrices (S_xx, S_xy, ..., S_zz) that weighted, charged particles deposit onto the grid.
Public Member Functions inherited from PhysicalParticleContainer
 PhysicalParticleContainer (amrex::AmrCore *amr_core, int ispecies, const std::string &name)
 PhysicalParticleContainer (amrex::AmrCore *amr_core)
void BackwardCompatibility ()
 ~PhysicalParticleContainer () override=default
 PhysicalParticleContainer (PhysicalParticleContainer const &)=delete
PhysicalParticleContaineroperator= (PhysicalParticleContainer const &)=delete
 PhysicalParticleContainer (PhysicalParticleContainer &&)=default
PhysicalParticleContaineroperator= (PhysicalParticleContainer &&)=default
void AllocData () override
void InitData () override
void ReadHeader (std::istream &is) override
void WriteHeader (std::ostream &os) const override
void InitIonizationModule () override
PlasmaInjectorGetPlasmaInjector (int i) override
void Evolve (ablastr::fields::MultiFabRegister &fields, int lev, const std::string &current_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 dt (typically one timestep).
void DepositMassMatrices (ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt) override
 Deposit mass matrices.
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)
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)
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)
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)
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
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 accordingly.
void PostRestart () final
void SplitParticles (int lev)
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)
virtual void AddParticles (int lev)
void AddPlasma (PlasmaInjector &plasma_injector, int lev, amrex::RealBox part_realbox=amrex::RealBox())
void AddPlasmaFlux (PlasmaInjector const &plasma_injector, amrex::Real dt)
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
void AddGaussianBeam (PlasmaInjector const &plasma_injector)
void AddPlasmaFromFile (PlasmaInjector &plasma_injector, amrex::ParticleReal q_tot, amrex::ParticleReal z_shift)
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
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_external_attr_real real attributes and the first n_external_attr_int integer attributes, which have been in principle externally set elsewhere.
void applyNCIFilter (int lev, const amrex::Box &box, 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.
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, performs the resampling.
bool has_quantum_sync () const override
bool has_breit_wheeler () const override
void set_breit_wheeler_engine_ptr (const std::shared_ptr< BreitWheelerEngine > &ptr) override
void set_quantum_sync_engine_ptr (const std::shared_ptr< QuantumSynchrotronEngine > &ptr) override
BreitWheelerEngineget_breit_wheeler_engine_ptr () const override
QuantumSynchrotronEngineget_quantum_sync_engine_ptr () const override
PhotonEmissionFilterFunc getPhotonEmissionFilterFunc ()
PairGenerationFilterFunc getPairGenerationFilterFunc ()
bool has_virtual_photons () const override
bool has_virtual_photons_beam_size_effect () const override
int getVirtualPhotonSpeciesIndex () const override
std::vector< std::string > getUserIntAttribs () const override
std::vector< std::string > getUserRealAttribs () const override
amrex::Vector< amrex::Parser * > getUserIntAttribParser () const override
amrex::Vector< amrex::Parser * > getUserRealAttribParser () const override
bool getTemperatureDepositionFlag () const noexcept override
void AccumulateVelocitiesAndComputeTemperature (ablastr::fields::MultiLevelVectorField const &T_vf, amrex::Real relative_time) override
 Accumulate velocity moments for matched temperature deposition using particle shapes.
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
Public Member Functions inherited from WarpXParticleContainer
 WarpXParticleContainer (amrex::AmrCore *amr_core, int ispecies, const std::string &name)
 ~WarpXParticleContainer () override=default
 WarpXParticleContainer (const WarpXParticleContainer &)=delete
WarpXParticleContaineroperator= (const WarpXParticleContainer &)=delete
 WarpXParticleContainer (WarpXParticleContainer &&)=default
WarpXParticleContaineroperator= (WarpXParticleContainer &&)=default
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.
void PushX (amrex::Real dt)
void PushX (int lev, amrex::Real dt)
void DepositCurrent (ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time)
 Deposit current density.
void DepositCurrent (const std::string &mf_name, int lev, amrex::Real dt, amrex::Real relative_time)
 Deposit current density, sum guard values, and apply boundary conditions.
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.
void DepositCharge (amrex::MultiFab *rho, int lev, bool local=false, bool reset=false, bool apply_boundary_and_scale_volume=false, int icomp=0)
std::unique_ptr< amrex::MultiFabGetChargeDensity (int lev, bool local=false)
virtual void DepositCharge (WarpXParIter &pti, RealVector const &wp, const int *ion_lev, amrex::MultiFab *rho, int icomp, long offset, long np_to_deposit, int thread_num, int lev, int depos_lev)
virtual void DepositCurrent (WarpXParIter &pti, RealVector const &wp, RealVector const &uxp, RealVector const &uyp, RealVector const &uzp, int const *ion_lev, amrex::MultiFab *jx, amrex::MultiFab *jy, amrex::MultiFab *jz, long offset, long np_to_deposit, int thread_num, int lev, int depos_lev, amrex::Real dt, amrex::Real relative_time, PushType push_type)
void DepositTotalNGPTemperature (int lev)
void CalculateNuei (amrex::MultiFab &species_nuei, WarpXParticleContainer const &electron_species, int lev)
std::unique_ptr< amrex::MultiFabGetDebyeLength (int lev)
void DepositNumberDensity (amrex::MultiFab *number_density, int lev)
std::unique_ptr< amrex::MultiFabGetNumberDensity (int lev)
std::unique_ptr< amrex::MultiFabGetPlasmaFrequency (int lev)
void DepositMassMatrices (WarpXParIter &pti, const RealVector &wp, const RealVector &uxp, const RealVector &uyp, const RealVector &uzp, amrex::MultiFab *Sxx, amrex::MultiFab *Sxy, amrex::MultiFab *Sxz, amrex::MultiFab *Syx, amrex::MultiFab *Syy, amrex::MultiFab *Syz, amrex::MultiFab *Szx, amrex::MultiFab *Szy, amrex::MultiFab *Szz, const amrex::FArrayBox *bxfab, const amrex::FArrayBox *byfab, const amrex::FArrayBox *bzfab, long offset, long np_to_deposit, int thread_num, int lev, int depos_lev, amrex::Real dt)
virtual void UpdateAntennaPosition (const amrex::Real)
 Update antenna position for continuous injection of lasers in a boosted frame. Empty function for containers other than lasers.
bool doContinuousInjection () const
int getSpeciesId () const
std::pair< amrex::ParticleReal, amrex::ParticleRealsumParticleWeightAndEnergy (bool local=false) const
amrex::ParticleReal sumParticleCharge (bool local=false) const
amrex::ParticleReal sumParticleWeight (bool local=false) const
amrex::ParticleReal sumParticleEnergy (bool local=false) const
std::array< amrex::ParticleReal, 3 > meanParticleVelocity (bool local=false)
amrex::ParticleReal maxParticleVelocity (bool local=false)
void TransformMomentumToCurvilinear (bool forward)
 Map the momentum of the particles to and from the curvilinear frame. This is equivalent to mapping to the X-axis, i.e. theta = 0 cylinderical and theta = phi = 0 for spherical. This mapping is used for binary collisions to put the colliding particles in a spatially local frame.
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.
void deleteInvalidParticles ()
void ApplyBoundaryConditions ()
 Apply particle BC.
void SetDoBackTransformedParticles (const bool do_back_transformed_particles)
bool GetDoBackTransformedParticles () const
amrex::ParticleReal getCharge () const
amrex::ParticleReal getMass () const
int DoFieldIonization () const
int DoQED () const
template<PhysicalSpecies PhysSpec>
bool AmIA () const noexcept
std::string getSpeciesTypeName () const
 This function returns a string containing the name of the species type.
void defineAllParticleTiles () noexcept
void setDoNotPush (bool flag)
void setDoNotGather (int flag)
void setDoNotDeposit (int flag)
bool HasiAttrib (const std::string &name)
std::string const & getName ()
int getIonizationInitialLevel () const noexcept
Public Member Functions inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
 ParticleContainer_impl ()
 ParticleContainer_impl (ParGDBBase *gdb)
 ParticleContainer_impl (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 ParticleContainer_impl (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 ParticleContainer_impl (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 ~ParticleContainer_impl () override=default
 ParticleContainer_impl (const ParticleContainer_impl &)=delete
ParticleContainer_imploperator= (const ParticleContainer_impl &)=delete
 ParticleContainer_impl (ParticleContainer_impl &&) noexcept=default
ParticleContainer_imploperator= (ParticleContainer_impl &&) noexcept=default
void Define (ParGDBBase *gdb)
void Define (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
int numLocalTilesAtLevel (int lev) const
void reserveData () override
void resizeData () override
void InitFromAsciiFile (const std::string &file, int extradata, const IntVect *Nrep=nullptr)
void InitFromBinaryFile (const std::string &file, int extradata)
void InitFromBinaryMetaFile (const std::string &file, int extradata)
void InitRandom (Long icount, ULong iseed, const ParticleInitData &pdata, bool serialize=false, RealBox bx=RealBox())
void InitRandomPerBox (Long icount, ULong iseed, const ParticleInitData &pdata)
void InitOnePerCell (Real x_off, Real y_off, Real z_off, const ParticleInitData &pdata)
void InitNRandomPerCell (int n_per_cell, const ParticleInitData &pdata)
void Increment (MultiFab &mf, int level)
Long IncrementWithTotal (MultiFab &mf, int level, bool local=false)
void Redistribute (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
void ReorderParticles (int lev, const MFIter &mfi, const index_type *permutations)
void SortParticlesForDeposition (IntVect idx_type)
void SortParticlesByCell ()
void SortParticlesByBin (IntVect bin_size)
bool OK (int lev_min=0, int lev_max=-1, int nGrow=0) const
std::array< Long, 3 > ByteSpread () const
std::array< Long, 3 > PrintCapacity () const
void ShrinkToFit ()
Long NumberOfParticlesAtLevel (int level, bool only_valid=true, bool only_local=false) const
Vector< LongNumberOfParticlesInGrid (int level, bool only_valid=true, bool only_local=false) const
void CapacityOfParticlesInGrid (LayoutData< I > &mem, int lev) const
Long TotalNumberOfParticles (bool only_valid=true, bool only_local=false) const
void RemoveParticlesAtLevel (int level)
void RemoveParticlesNotAtFinestLevel ()
void CreateVirtualParticles (int level, AoS &virts) const
void CreateGhostParticles (int level, int ngrow, AoS &ghosts) const
void AddParticlesAtLevel (AoS &particles, int level, int nGrow=0)
void CreateVirtualParticles (int level, ParticleTileType &virts) const
void CreateGhostParticles (int level, int ngrow, ParticleTileType &ghosts) const
void AddParticlesAtLevel (ParticleTileType &particles, int level, int nGrow=0)
void clearParticles ()
void copyParticles (const PCType &other, bool local=false)
void addParticles (const PCType &other, bool local=false)
void copyParticles (const PCType &other, F &&f, bool local=false)
void addParticles (const PCType &other, F const &f, bool local=false)
void WriteParticleRealData (void *data, size_t size, std::ostream &os) const
void ReadParticleRealData (void *data, size_t size, std::istream &is)
void Checkpoint (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
void Checkpoint (const std::string &dir, const std::string &name, bool is_checkpoint, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
void Checkpoint (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names) const
void WriteBinaryParticleData (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F const &f, bool is_checkpoint=false) const
void CheckpointPre ()
void CheckpointPost ()
void Restart (const std::string &dir, const std::string &file)
void Restart (const std::string &dir, const std::string &file, bool is_checkpoint)
void WritePlotFile (const std::string &dir, const std::string &name) const
void WritePlotFile (const std::string &dir, const std::string &name, F const &f) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F const &f) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, F const &f) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, F const &f) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names) const
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F const &f) const
void WritePlotFilePre ()
void WritePlotFilePost ()
void WriteAsciiFile (const std::string &file)
const Vector< ParticleLevel > & GetParticles () const
Vector< ParticleLevel > & GetParticles ()
const ParticleLevelGetParticles (int lev) const
ParticleLevelGetParticles (int lev)
const ParticleTileTypeParticlesAt (int lev, int grid, int tile) const
ParticleTileTypeParticlesAt (int lev, int grid, int tile)
const ParticleTileTypeParticlesAt (int lev, const Iterator &iter) const
ParticleTileTypeParticlesAt (int lev, const Iterator &iter)
ParticleTileTypeDefineAndReturnParticleTile (int lev, int grid, int tile)
ParticleTileTypeDefineAndReturnParticleTile (int lev, const Iterator &iter)
void AssignDensity (int rho_index, Vector< std::unique_ptr< MultiFab > > &mf_to_be_filled, int lev_min, int ncomp, int finest_level, int ngrow=2) const
void AssignCellDensitySingleLevel (int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
IntVect Index (const P &p, int lev) const
ParticleLocData Reset (ParticleType &prt, bool update, bool verbose=true, ParticleLocData pld=ParticleLocData()) const
bool PeriodicShift (P &p) const
void SetLevelDirectoriesCreated (bool tf)
bool GetLevelDirectoriesCreated () const
void SetUsePrePost (bool tf) const
bool GetUsePrePost () const
Long GetMaxNextIDPrePost () const
Long GetNParticlesPrePost () const
void SetUseUnlink (bool tf) const
bool GetUseUnlink () const
void RedistributeCPU (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
void Redistribute_impl (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
void ReserveForRedistribute (ParticleCopyPlan const &plan)
Long superParticleSize () const
void AddRealComp (std::string const &name, int communicate=1)
void AddRealComp (int communicate=1)
void AddIntComp (std::string const &name, int communicate=1)
void AddIntComp (int communicate=1)
int NumRuntimeRealComps () const
int NumRuntimeIntComps () const
int NumRealComps () const
int NumIntComps () const
void ResizeRuntimeRealComp (int new_size, bool communicate)
void ResizeRuntimeIntComp (int new_size, bool communicate)
ContainerLike< NewAllocator > make_alike () const
void WriteParticles (int level, std::ofstream &ofs, int fnum, Vector< int > &which, Vector< int > &count, Vector< Long > &where, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::map< std::pair< int, int >, FlagsVector > > &particle_io_flags, bool is_checkpoint) const
void SetSoACompileTimeNames (std::vector< std::string > const &rdata_name, std::vector< std::string > const &idata_name)
std::vector< std::string > GetRealSoANames () const
std::vector< std::string > GetIntSoANames () const
bool HasRealComp (std::string const &name)
bool HasIntComp (std::string const &name)
int GetRealCompIndex (std::string const &name)
int GetIntCompIndex (std::string const &name)
Public Member Functions inherited from amrex::ParticleContainerBase
 ParticleContainerBase ()=default
 ParticleContainerBase (ParGDBBase *gdb)
 ParticleContainerBase (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 ParticleContainerBase (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 ParticleContainerBase (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
virtual ~ParticleContainerBase ()=default
 ParticleContainerBase (const ParticleContainerBase &)=delete
ParticleContainerBaseoperator= (const ParticleContainerBase &)=delete
 ParticleContainerBase (ParticleContainerBase &&) noexcept=default
ParticleContainerBaseoperator= (ParticleContainerBase &&) noexcept=default
void Define (ParGDBBase *gdb)
void Define (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
bool isDefined () const
void RedefineDummyMF (int lev)
MFIter MakeMFIter (int lev, const MFItInfo &info) const
MFIter MakeMFIter (int lev) const
MFIter MakeMFIter (int lev, bool tile) const
void SetParGDB (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
void SetParGDB (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
void SetParGDB (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
void SetParticleBoxArray (int lev, BoxArray new_ba)
void SetParticleDistributionMap (int lev, DistributionMapping new_dmap)
void SetParticleGeometry (int lev, Geometry new_geom)
const BoxArrayParticleBoxArray (int lev) const
const DistributionMappingParticleDistributionMap (int lev) const
const GeometryGeom (int lev) const
const GeometryParticleGeom (int lev) const
int finestLevel () const
int maxLevel () const
int numLevels () const
const ParGDBBaseGetParGDB () const
ParGDBBaseGetParGDB ()
int Verbose () const
void SetVerbose (int verbose)
int stableRedistribute () const
void setStableRedistribute (int stable)
const ParticleBufferMapBufferMap () const
void ensureParticleHandshakeWindow () const
LongparticleHandshakeBuffer () const
MPI_Win particleHandshakeWindow () const
Vector< intNeighborProcs (int ngrow) const
bool OnSameGrids (int level, const MF &mf) const
Arenaarena () const
void SetArena (Arena *a)

Additional Inherited Members

Public Types inherited from WarpXParticleContainer
using Base = amrex::ParticleContainerPureSoA<PIdx::nattribs, 0, amrex::PolymorphicArenaAllocator>
using DiagnosticParticleData = amrex::StructOfArrays<DiagIdx::nattribs, 0>
using DiagnosticParticles = amrex::Vector<std::map<std::pair<int, int>, DiagnosticParticleData> >
Public Types inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
typedef T_ParticleType ParticleType
typedef typename ParticleType::ConstType ConstParticleType
typedef T_CellAssignor CellAssignor
typedef Allocator< T > AllocatorType
typedef Particle< NStructReal+NArrayReal, NStructInt+NArrayIntSuperParticleType
typedef typename Particle< NStructReal, NStructInt >::RealType RealType
typedef ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParticleContainerType
typedef std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
typedef ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayIntParticleInitData
typedef std::map< std::pair< int, int >, ParticleTileTypeParticleLevel
typedef typename ParticleTileType::ParticleTileDataType PTDType
typedef typename ParticleTileType::ConstParticleTileDataType ConstPTDType
typedef typename ParticleTileType::AoS AoS
typedef typename ParticleTileType::SoA SoA
typedef typename SoA::RealVector RealVector
typedef typename SoA::IntVector IntVector
typedef typename AoS::ParticleVector ParticleVector
typedef Gpu::DeviceVector< char > CharVector
typedef ParIter_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParIterType
typedef ParConstIter_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParConstIterType
typedef amrex::ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, NewAllocator > ContainerLike
typedef PODVector< int, Allocator< int > > FlagsVector
Static Public Member Functions inherited from WarpXParticleContainer
static void ReadParameters ()
static void BackwardCompatibility ()
Static Public Member Functions inherited from amrex::ParticleContainerBase
static const std::string & CheckpointVersion ()
static const std::string & PlotfileVersion ()
static const std::string & DataPrefix ()
static int MaxReaders ()
static Long MaxParticlesPerRead ()
static const std::string & AggregationType ()
static int AggregationBuffer ()
Public Attributes inherited from WarpXParticleContainer
friend MultiParticleContainer
bool do_splitting = false
int do_not_deposit = 0
bool initialize_self_fields = false
amrex::Real self_fields_required_precision = amrex::Real(1.e-11)
amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0)
int self_fields_max_iters = 200
int self_fields_verbosity = 2
amrex::Vector< amrex::ParticleRealm_B_external_particle
amrex::Vector< amrex::ParticleRealm_E_external_particle
amrex::Real m_current_injection_position = 0.
 Current injection position.
int split_type = 0
Public Attributes inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
RealDescriptor ParticleRealDescriptor
Vector< inth_redistribute_real_comp
Vector< inth_redistribute_int_comp
bool levelDirectoriesCreated
bool usePrePost
bool doUnlink
Long maxnextidPrePost
int nOutFilesPrePost
Long nparticlesPrePost
Vector< LongnParticlesAtLevelPrePost
Vector< Vector< int > > whichPrePost
Vector< Vector< int > > countPrePost
Vector< Vector< Long > > wherePrePost
std::string HdrFileNamePrePost
Vector< std::string > filePrefixPrePost
Public Attributes inherited from amrex::ParticleContainerBase
AmrParticleLocator< DenseBins< Box > > m_particle_locator
Static Public Attributes inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
static constexpr int NStructReal
static constexpr int NStructInt
static constexpr int NArrayReal
static constexpr int NArrayInt
static constexpr bool is_rtsoa_pc
static constexpr bool has_polymorphic_allocator
Static Public Attributes inherited from amrex::ParticleContainerBase
static bool do_tiling
static IntVect tile_size
static bool memEfficientSort
static bool use_comms_arena
Protected Member Functions inherited from PhysicalParticleContainer
bool findRefinedInjectionBox (amrex::Box &fine_injection_box, amrex::IntVect &rrfac)
void ContinuousInjection (const amrex::RealBox &injection_box) override
void ContinuousFluxInjection (amrex::Real t, amrex::Real dt) override
Protected Member Functions inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
bool Where (const P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int nGrow=0, int local_grid=-1) const
bool EnforcePeriodicWhere (P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int local_grid=-1) const
void ReadParticles (int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
void SetParticleSize ()
Protected Member Functions inherited from amrex::ParticleContainerBase
void BuildRedistributeMask (int lev, int nghost=1) const
void defineBufferMap () const
Protected Attributes inherited from PhysicalParticleContainer
std::vector< std::unique_ptr< PlasmaInjector > > plasma_injectors
bool boost_adjust_transverse_positions = false
bool do_backward_propagation = false
bool m_random_theta = true
bool impose_t_lab_from_file = false
Resampling m_resampler
bool do_classical_radiation_reaction = false
bool m_save_previous_position = false
bool m_do_temperature_deposition = false
std::unique_ptr< warpx::particles::deposition::VarianceAccumulationBufferlocal_temperature_arrays
bool m_do_qed_quantum_sync = false
bool m_do_qed_breit_wheeler = false
std::shared_ptr< QuantumSynchrotronEnginem_shr_p_qs_engine
std::shared_ptr< BreitWheelerEnginem_shr_p_bw_engine
bool m_do_qed_virtual_photons = false
bool m_qed_virtual_photons_do_beam_size_effect = false
std::vector< std::string > m_user_int_attribs
std::vector< std::string > m_user_real_attribs
amrex::Vector< std::unique_ptr< amrex::Parser > > m_user_int_attrib_parser
amrex::Vector< std::unique_ptr< amrex::Parser > > m_user_real_attrib_parser
Protected Attributes inherited from WarpXParticleContainer
int species_id
std::string species_name
amrex::ParticleReal m_charge
amrex::ParticleReal m_mass
PhysicalSpecies physical_species = PhysicalSpecies::unspecified
ParticleBoundaries m_boundary_conditions
bool m_crop_on_PEC_boundary = false
bool m_deposit_on_main_grid = false
 instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid
bool m_gather_from_main_grid = false
 instead of gathering fields from the finest patch level, gather from the coarsest
bool do_not_push = false
int do_not_gather = 0
int do_continuous_injection = 0
int do_field_ionization = 0
int do_adk_correction = 0
int ionization_product
std::string ionization_product_name
int ion_atomic_number
int ionization_initial_level = 0
amrex::Gpu::DeviceVector< amrex::Realionization_energies
amrex::Gpu::DeviceVector< amrex::Realadk_power
amrex::Gpu::DeviceVector< amrex::Realadk_prefactor
amrex::Gpu::DeviceVector< amrex::Realadk_exp_prefactor
amrex::Gpu::DeviceVector< amrex::Realadk_correction_factors
std::string physical_element
int do_resampling = 0
bool m_do_back_transformed_particles = false
int m_qed_breit_wheeler_ele_product
std::string m_qed_breit_wheeler_ele_product_name
int m_qed_breit_wheeler_pos_product
std::string m_qed_breit_wheeler_pos_product_name
int m_qed_quantum_sync_phot_product
std::string m_qed_quantum_sync_phot_product_name
int m_qed_virtual_photon_species
std::string m_qed_virtual_photon_species_name
amrex::Real m_qed_virtual_photon_min_energy
amrex::Vector< amrex::FArrayBoxlocal_rho
amrex::Vector< amrex::FArrayBoxlocal_jx
amrex::Vector< amrex::FArrayBoxlocal_jy
amrex::Vector< amrex::FArrayBoxlocal_jz
amrex::Vector< amrex::FArrayBoxlocal_Sxx
amrex::Vector< amrex::FArrayBoxlocal_Sxy
amrex::Vector< amrex::FArrayBoxlocal_Sxz
amrex::Vector< amrex::FArrayBoxlocal_Syx
amrex::Vector< amrex::FArrayBoxlocal_Syy
amrex::Vector< amrex::FArrayBoxlocal_Syz
amrex::Vector< amrex::FArrayBoxlocal_Szx
amrex::Vector< amrex::FArrayBoxlocal_Szy
amrex::Vector< amrex::FArrayBoxlocal_Szz
Protected Attributes inherited from amrex::ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor >
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Protected Attributes inherited from amrex::ParticleContainerBase
int m_verbose
int m_stable_redistribute
std::unique_ptr< ParGDBm_gdb_object
ParGDBBasem_gdb
Vector< std::unique_ptr< MultiFab > > m_dummy_mf
Arenam_arena
std::unique_ptr< iMultiFabredistribute_mask_ptr
int redistribute_mask_nghost
amrex::Vector< intneighbor_procs
ParticleBufferMap m_buffer_map
std::unique_ptr< ParticleHandshakeWindowm_particle_handshake_window

Detailed Description

Photon particles have no mass, they deposit no charge, and see specific QED effects. For these reasons, they are stored in the separate particle container PhotonParticleContainer, that inherits from PhysicalParticleContainer. The particle pusher and current deposition, in particular, are overriden in this container.

Constructor & Destructor Documentation

◆ PhotonParticleContainer() [1/3]

PhotonParticleContainer::PhotonParticleContainer ( amrex::AmrCore * amr_core,
int ispecies,
const std::string & name )

◆ ~PhotonParticleContainer()

PhotonParticleContainer::~PhotonParticleContainer ( )
overridedefault

◆ PhotonParticleContainer() [2/3]

PhotonParticleContainer::PhotonParticleContainer ( PhotonParticleContainer const & )
delete

◆ PhotonParticleContainer() [3/3]

PhotonParticleContainer::PhotonParticleContainer ( PhotonParticleContainer && )
default

Member Function Documentation

◆ DepositCharge()

void PhotonParticleContainer::DepositCharge ( WarpXParIter & ,
RealVector const & ,
const int * const ,
amrex::MultiFab * ,
int ,
const long ,
const long ,
int ,
int ,
int  )
inlineoverride

◆ DepositCurrent()

void PhotonParticleContainer::DepositCurrent ( WarpXParIter & ,
RealVector const & ,
RealVector const & ,
RealVector const & ,
RealVector const & ,
int const * const ,
amrex::MultiFab * const ,
amrex::MultiFab * const ,
amrex::MultiFab * const ,
long const ,
long const ,
int const ,
int const ,
int const ,
amrex::Real const ,
amrex::Real const ,
PushType  )
inlineoverride

◆ DepositMassMatrices()

void PhotonParticleContainer::DepositMassMatrices ( ablastr::fields::MultiFabRegister & ,
int ,
amrex::Real  )
inlineoverridevirtual

No-op override: photons are massless and carry no charge, so they do not contribute to the implicit-solver mass matrices (S_xx, S_xy, ..., S_zz) that weighted, charged particles deposit onto the grid.

Reimplemented from WarpXParticleContainer.

◆ Evolve()

void PhotonParticleContainer::Evolve ( ablastr::fields::MultiFabRegister & fields,
int lev,
const std::string & current_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 )
overridevirtual

Pure virtual function to advance particles (typically by one time step).

Implements WarpXParticleContainer.

◆ FinishImplicitParticleUpdate()

void PhotonParticleContainer::FinishImplicitParticleUpdate ( ablastr::fields::MultiFabRegister & fields,
int lev,
amrex::Real t,
amrex::Real dt )
overridevirtual

Advances photon position at the end of an implicit time step.

Reimplemented from WarpXParticleContainer.

◆ InitData()

void PhotonParticleContainer::InitData ( )
overridevirtual

◆ operator=() [1/2]

PhotonParticleContainer & PhotonParticleContainer::operator= ( PhotonParticleContainer && )
default

◆ operator=() [2/2]

PhotonParticleContainer & PhotonParticleContainer::operator= ( PhotonParticleContainer const & )
delete

◆ PushP()

void PhotonParticleContainer::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 )
inlineoverridevirtual

This pushes the particle momenta by dt.

Implements WarpXParticleContainer.

◆ PushPX()

void PhotonParticleContainer::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,
PositionPushType position_push_type = PositionPushType::Full,
MomentumPushType momentum_push_type = MomentumPushType::Full )
overridevirtual

Gather fields and push particles in one fused kernel.

Reimplemented from PhysicalParticleContainer.


The documentation for this class was generated from the following files: