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

#include <RigidInjectedParticleContainer.H>

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

Public Member Functions

 RigidInjectedParticleContainer (amrex::AmrCore *amr_core, int ispecies, const std::string &name)
 ~RigidInjectedParticleContainer () override=default
 RigidInjectedParticleContainer (RigidInjectedParticleContainer const &)=delete
RigidInjectedParticleContaineroperator= (RigidInjectedParticleContainer const &)=delete
 RigidInjectedParticleContainer (RigidInjectedParticleContainer &&)=default
RigidInjectedParticleContaineroperator= (RigidInjectedParticleContainer &&)=default
void InitData () override
virtual void RemapParticles ()
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 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) override
 Gather fields and push particles in one fused kernel.
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) override
void ReadHeader (std::istream &is) override
void WriteHeader (std::ostream &os) const override
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 InitIonizationModule () override
PlasmaInjectorGetPlasmaInjector (int i) override
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 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 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.
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)

Private Attributes

amrex::ParticleReal zinject_plane = 0.
RigidAdvanceMode rigid_advance_mode = RigidAdvanceMode::vzbar
amrex::ParticleReal vzbeam_ave_boosted
amrex::Vector< amrex::ParticleRealzinject_plane_levels
amrex::ParticleReal zinject_plane_lev
amrex::ParticleReal zinject_plane_lev_previous
bool done_injecting_lev

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

When injecting a particle beam (typically for a plasma wakefield acceleration simulation), say propagating in the z direction, it can be necessary to make particles propagate in a straight line up to a given location z=z0. This is of particular importance when running in a boosted frame, where the beam may evolve due to its space charge fields before entering the plasma, causing the actual injected beam, and hence the whole simulation result, to depend on the Lorentz factor of the boost.

This feature is implemented in RigidInjectedParticleContainer: At each iteration, for each particle, if z<z0 the particle moves in a straight line, and if z>z0 the particle evolves as a regular PhysicalParticleContainer.

Note: This option is also useful to build self-consistent space charge fields for the particle beam.

RigidInjectedParticleContainer derives from PhysicalParticleContainer.

Constructor & Destructor Documentation

◆ RigidInjectedParticleContainer() [1/3]

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

◆ ~RigidInjectedParticleContainer()

RigidInjectedParticleContainer::~RigidInjectedParticleContainer ( )
overridedefault

◆ RigidInjectedParticleContainer() [2/3]

RigidInjectedParticleContainer::RigidInjectedParticleContainer ( RigidInjectedParticleContainer const & )
delete

◆ RigidInjectedParticleContainer() [3/3]

RigidInjectedParticleContainer::RigidInjectedParticleContainer ( RigidInjectedParticleContainer && )
default

Member Function Documentation

◆ Evolve()

void RigidInjectedParticleContainer::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

Evolve is the central function in PhysicalParticleContainer that advances plasma particles for a time dt (typically one timestep).

Parameters
fieldsThe WarpX field register
levLevel on which particles are living
current_fp_stringCurrent (coarse or fine patch) identifier in fields
tCurrent physical time
dtTime Step by which particles are advanced
subcycling_halfType of time step (used for sub-cycling)
skip_depositionSkip the charge and current deposition
position_push_typeType of time advance for particle position (full, first half, second half, none)
momentum_push_typeType of time advance for particle momentum (full, first half, second half, none)
implicit_optionsStructure with specific options for implicit methods

Evolve iterates over particle iterator (each box) and performs filtering, field gather, particle push and current deposition for all particles in the box.

Reimplemented from PhysicalParticleContainer.

◆ InitData()

void RigidInjectedParticleContainer::InitData ( )
overridevirtual

Reimplemented from PhysicalParticleContainer.

◆ operator=() [1/2]

RigidInjectedParticleContainer & RigidInjectedParticleContainer::operator= ( RigidInjectedParticleContainer && )
default

◆ operator=() [2/2]

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

◆ PushP()

void RigidInjectedParticleContainer::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 )
overridevirtual

This pushes the particle momenta by dt.

Reimplemented from PhysicalParticleContainer.

◆ PushPX()

void RigidInjectedParticleContainer::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 e_is_nodal,
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 )
overridevirtual

Gather fields and push particles in one fused kernel.

Reimplemented from PhysicalParticleContainer.

◆ ReadHeader()

void RigidInjectedParticleContainer::ReadHeader ( std::istream & is)
overridevirtual

Reimplemented from PhysicalParticleContainer.

◆ RemapParticles()

void RigidInjectedParticleContainer::RemapParticles ( )
virtual

◆ WriteHeader()

void RigidInjectedParticleContainer::WriteHeader ( std::ostream & os) const
overridevirtual

Reimplemented from PhysicalParticleContainer.

Member Data Documentation

◆ done_injecting_lev

bool RigidInjectedParticleContainer::done_injecting_lev
private

◆ rigid_advance_mode

RigidAdvanceMode RigidInjectedParticleContainer::rigid_advance_mode = RigidAdvanceMode::vzbar
private

◆ vzbeam_ave_boosted

amrex::ParticleReal RigidInjectedParticleContainer::vzbeam_ave_boosted
private

◆ zinject_plane

amrex::ParticleReal RigidInjectedParticleContainer::zinject_plane = 0.
private

◆ zinject_plane_lev

amrex::ParticleReal RigidInjectedParticleContainer::zinject_plane_lev
private

◆ zinject_plane_lev_previous

amrex::ParticleReal RigidInjectedParticleContainer::zinject_plane_lev_previous
private

◆ zinject_plane_levels

amrex::Vector<amrex::ParticleReal> RigidInjectedParticleContainer::zinject_plane_levels
private

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