WarpX
Loading...
Searching...
No Matches
WarpXParticleContainer Class Referenceabstract

#include <WarpXParticleContainer.H>

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

Public Types

using DiagnosticParticleData = amrex::StructOfArrays<DiagIdx::nattribs, 0>
 
using DiagnosticParticles = amrex::Vector<std::map<std::pair<int, int>, DiagnosticParticleData> >
 
using PairIndex = std::pair<int, int>
 
- 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 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
 

Public Member Functions

 WarpXParticleContainer (amrex::AmrCore *amr_core, int ispecies)
 
 ~WarpXParticleContainer () override=default
 
 WarpXParticleContainer (const WarpXParticleContainer &)=delete
 
WarpXParticleContaineroperator= (const WarpXParticleContainer &)=delete
 
 WarpXParticleContainer (WarpXParticleContainer &&)=default
 
WarpXParticleContaineroperator= (WarpXParticleContainer &&)=default
 
virtual void InitData ()=0
 
virtual void InitIonizationModule ()
 
virtual PlasmaInjectorGetPlasmaInjector (const int)
 
virtual 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, ImplicitOptions const *implicit_options=nullptr)=0
 
virtual void PostRestart ()=0
 
virtual void AllocData ()
 
virtual void DefaultInitializeRuntimeAttributes (typename ContainerLike< amrex::PinnedArenaAllocator >::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)
 
virtual void PushP (int lev, amrex::Real dt, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)=0
 
void DepositCurrent (ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time)
 Deposit current density.
 
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)
 
virtual void AccumulateVelocitiesAndComputeTemperature (ablastr::fields::MultiLevelVectorField const &T_vf, amrex::Real relative_time)
 Accumulate velocity moments for matched temperature deposition using particle shapes.
 
virtual void DepositTemperature (WarpXParIter &pti, RealVector const &wp, RealVector const &uxp, RealVector const &uyp, RealVector const &uzp, amrex::MultiFab *const Tx, amrex::MultiFab *const Ty, amrex::MultiFab *const Tz, long const offset, long const np_to_deposit, int const thread_num, const int lev, int const depos_lev, amrex::Real const relative_time, PushType push_type, const warpx::particles::deposition::TemperatureDepositionType type, const warpx::particles::deposition::TemperatureDepositionPass pass)
 
void DepositTotalNGPTemperature (amrex::MultiFab *temperature, const int lev)
 
std::unique_ptr< amrex::MultiFabGetAverageNGPTemperature (int lev)
 
void DepositNumberDensity (amrex::MultiFab *number_density, const int lev)
 
std::unique_ptr< amrex::MultiFabGetNumberDensity (int lev)
 
std::unique_ptr< amrex::MultiFabGetDebyeLength (int lev)
 
virtual void DepositCurrentAndMassMatrices (WarpXParIter &pti, const RealVector &wp, const RealVector &uxp, const RealVector &uyp, const RealVector &uzp, amrex::MultiFab *jx, amrex::MultiFab *jy, amrex::MultiFab *jz, 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 ContinuousInjection (const amrex::RealBox &)
 
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
 
virtual void ContinuousFluxInjection (amrex::Real, amrex::Real)
 
int getSpeciesId () const
 
std::pair< amrex::ParticleReal, amrex::ParticleReal > sumParticleWeightAndEnergy (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 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 ()
 
virtual void ReadHeader (std::istream &is)=0
 
virtual void WriteHeader (std::ostream &os) const =0
 
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
 
virtual bool has_quantum_sync () const
 
virtual bool has_breit_wheeler () 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.
 
virtual void resample (const amrex::Vector< amrex::Geometry > &, const int, bool)
 Virtual method to resample the species. Overriden by PhysicalParticleContainer only. Empty body is here because making the method purely virtual would mean that we need to override the method for every derived class. Note that in practice this function is never called because resample() is only called for PhysicalParticleContainers.
 
void defineAllParticleTiles () noexcept
 
virtual std::vector< std::string > getUserIntAttribs () const
 
virtual std::vector< std::string > getUserRealAttribs () const
 
virtual amrex::Vector< amrex::Parser * > getUserIntAttribParser () const
 
virtual amrex::Vector< amrex::Parser * > getUserRealAttribParser () const
 
virtual BreitWheelerEngineget_breit_wheeler_engine_ptr () const
 
virtual QuantumSynchrotronEngineget_quantum_sync_engine_ptr () const
 
void setDoNotPush (bool flag)
 
void setDoNotGather (int flag)
 
void setDoNotDeposit (int flag)
 
bool HasiAttrib (const std::string &name)
 
int getIonizationInitialLevel () const noexcept
 
virtual bool getTemperatureDepositionFlag () 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< Long > NumberOfParticlesInGrid (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 &&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 &&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 &&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 &&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 &&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 &&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
 
int 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 RedistributeGPU (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
 
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 >, IntVector > > &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)
 
 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 (const ParticleContainer_impl &)=delete
 
 ParticleContainer_impl (ParticleContainer_impl &&) noexcept=default
 
 ~ParticleContainer_impl () override=default
 
ParticleContainer_imploperator= (const ParticleContainer_impl &)=delete
 
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< Long > NumberOfParticlesInGrid (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 CreateVirtualParticles (int level, ParticleTileType &virts) const
 
void CreateGhostParticles (int level, int ngrow, AoS &ghosts) const
 
void CreateGhostParticles (int level, int ngrow, ParticleTileType &ghosts) const
 
void AddParticlesAtLevel (AoS &particles, int level, int nGrow=0)
 
void AddParticlesAtLevel (ParticleTileType &particles, int level, int nGrow=0)
 
void clearParticles ()
 
void copyParticles (const PCType &other, bool local=false)
 
void copyParticles (const PCType &other, F &&f, bool local=false)
 
void addParticles (const PCType &other, 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 &&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 &&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 &&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 &&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 &&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 &&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
 
int 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 RedistributeGPU (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
 
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 >, IntVector > > &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 &&)=default
 
ParticleContainerBaseoperator= (ParticleContainerBase &&)=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
 
Vector< int > NeighborProcs (int ngrow) const
 
bool OnSameGrids (int level, const MF &mf) const
 
Arenaarena () const
 
void SetArena (Arena *a)
 

Static Public Member Functions

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

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::ParticleReal > m_B_external_particle
 
amrex::Vector< amrex::ParticleReal > m_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< int > h_redistribute_real_comp
 
Vector< int > h_redistribute_int_comp
 
bool levelDirectoriesCreated
 
bool usePrePost
 
bool doUnlink
 
int maxnextidPrePost
 
int nOutFilesPrePost
 
Long nparticlesPrePost
 
Vector< Long > nParticlesAtLevelPrePost
 
Vector< Vector< int > > whichPrePost
 
Vector< Vector< int > > countPrePost
 
Vector< Vector< Long > > wherePrePost
 
std::string HdrFileNamePrePost
 
Vector< std::string > filePrefixPrePost
 
RealDescriptor ParticleRealDescriptor
 
Vector< int > h_redistribute_real_comp
 
Vector< int > h_redistribute_int_comp
 
bool levelDirectoriesCreated
 
bool usePrePost
 
bool doUnlink
 
int maxnextidPrePost
 
int nOutFilesPrePost
 
Long nparticlesPrePost
 
Vector< Long > nParticlesAtLevelPrePost
 
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
 

Protected Member Functions

virtual void set_breit_wheeler_engine_ptr (const std::shared_ptr< BreitWheelerEngine > &)
 
virtual void set_quantum_sync_engine_ptr (const std::shared_ptr< QuantumSynchrotronEngine > &)
 
- 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 ()
 
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

int species_id
 
amrex::ParticleReal charge
 
amrex::ParticleReal m_mass
 
PhysicalSpecies physical_species = PhysicalSpecies::unspecified
 
ParticleBoundaries m_boundary_conditions
 
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::Real > ionization_energies
 
amrex::Gpu::DeviceVector< amrex::Real > adk_power
 
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
 
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
 
amrex::Gpu::DeviceVector< amrex::Real > adk_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
 
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::ParticleTileDataTypem_bins
 
DenseBins< typename ParticleTileType::ParticleTileDataTypem_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< int > neighbor_procs
 
ParticleBufferMap m_buffer_map
 

Private Member Functions

void particlePostLocate (ParticleType &p, const amrex::ParticleLocData &pld, int lev) override
 

Additional Inherited Members

- 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 has_polymorphic_allocator
 
static constexpr int NStructReal
 
static constexpr int NStructInt
 
static constexpr int NArrayReal
 
static constexpr int NArrayInt
 
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
 

Detailed Description

WarpXParticleContainer is the base polymorphic class from which all concrete particle container classes (that store a collection of particles) derive. Derived classes can be used for plasma particles, photon particles, or non-physical particles (e.g., for the laser antenna). It derives from amrex::ParticleContainerPureSoA<PIdx::nattribs>, where the template arguments stand for the number of int and amrex::Real SoA data in amrex::SoAParticle.

  • SoA amrex::Real: positions x, y, z, momentum ux, uy, uz, ... see PIdx for details; more can be added at runtime
  • SoA int: 0 attributes by default, but can be added at runtime
  • SoA uint64_t: idcpu, a global 64bit index, with a 40bit local id and a 24bit cpu id (both set at creation) the list.

WarpXParticleContainer contains the main functions for initialization, interaction with the grid (field gather and current deposition) and particle push.

Note: many functions are pure virtual (meaning they MUST be defined in derived classes, e.g., Evolve) or actual functions (e.g. CurrentDeposition).

Member Typedef Documentation

◆ DiagnosticParticleData

◆ DiagnosticParticles

◆ PairIndex

using WarpXParticleContainer::PairIndex = std::pair<int, int>

Constructor & Destructor Documentation

◆ WarpXParticleContainer() [1/3]

WarpXParticleContainer::WarpXParticleContainer ( amrex::AmrCore * amr_core,
int ispecies )

◆ ~WarpXParticleContainer()

WarpXParticleContainer::~WarpXParticleContainer ( )
overridedefault

◆ WarpXParticleContainer() [2/3]

WarpXParticleContainer::WarpXParticleContainer ( const WarpXParticleContainer & )
delete

◆ WarpXParticleContainer() [3/3]

WarpXParticleContainer::WarpXParticleContainer ( WarpXParticleContainer && )
default

Member Function Documentation

◆ AccumulateVelocitiesAndComputeTemperature()

virtual void WarpXParticleContainer::AccumulateVelocitiesAndComputeTemperature ( ablastr::fields::MultiLevelVectorField const & T_vf,
amrex::Real relative_time )
inlinevirtual

Accumulate velocity moments for matched temperature deposition using particle shapes.

Parameters
[in,out]T_vfvector field of Temperatures (one three-dimensional array of pointers to MultiFabs per mesh refinement level)
[in]relative_timeTime at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition.

Reimplemented in PhysicalParticleContainer.

◆ AddNParticles()

void WarpXParticleContainer::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.

Parameters
[in]levrefinement level (unused)
[in]nthe number of particles to add
[in]xx component of the position of particles to be added
[in]yy component of the position of particles to be added
[in]zz component of the position of particles to be added
[in]uxx component of the momentum of particles to be added
[in]uyy component of the momentum of particles to be added
[in]uzz component of the momentum of particles to be added
[in]nattr_realnumber of runtime real attributes to initialize with the attr_real array. (particle weight is treated as a real attribute in this routine). The remaining runtime real attributes are initialized in the method DefaultInitializeRuntimeAttributes.
[in]attr_realvalue of real attributes to initialize
[in]nattr_intnumber of runtime int attributes to initialize with the attr_int array. The remaining runtime int attributes are initialized in the method DefaultInitializeRuntimeAttributes.
[in]attr_intvalue of int attributes to initialize
[in]uniqueparticlesif true, each MPI rank calling this function creates n particles. Else, all MPI ranks work together to create n particles in total.
[in]idif different than -1, this id will be assigned to the particles (used for particle tagging in some routines, e.g. SplitParticle)

◆ AllocData()

void WarpXParticleContainer::AllocData ( )
virtual

Reimplemented in PhysicalParticleContainer.

◆ AmIA()

template<PhysicalSpecies PhysSpec>
bool WarpXParticleContainer::AmIA ( ) const
inlinenoexcept

◆ ApplyBoundaryConditions()

void WarpXParticleContainer::ApplyBoundaryConditions ( )

Apply particle BC.

◆ BackwardCompatibility()

static void WarpXParticleContainer::BackwardCompatibility ( )
static

◆ ContinuousFluxInjection()

virtual void WarpXParticleContainer::ContinuousFluxInjection ( amrex::Real ,
amrex::Real  )
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ ContinuousInjection()

virtual void WarpXParticleContainer::ContinuousInjection ( const amrex::RealBox & )
inlinevirtual

◆ DefaultInitializeRuntimeAttributes()

virtual void WarpXParticleContainer::DefaultInitializeRuntimeAttributes ( typename ContainerLike< amrex::PinnedArenaAllocator >::ParticleTileType & pinned_tile,
int n_external_attr_real,
int n_external_attr_int )
pure virtual

Virtual method to initialize runtime attributes. Must be overriden by each derived class.

Implemented in LaserParticleContainer.

◆ defineAllParticleTiles()

void WarpXParticleContainer::defineAllParticleTiles ( )
noexcept

When using runtime components, AMReX requires to touch all tiles in serial and create particles tiles with runtime components if they do not exist (or if they were defined by default, i.e., without runtime component).

◆ deleteInvalidParticles()

void WarpXParticleContainer::deleteInvalidParticles ( )

Remove particles with invalid ID

This is a local operation (no MPI communication) and is thus preferable over ReDistribute (which also removes invalid particles, but involves MPI communications at the same time)

◆ DepositCharge() [1/3]

void WarpXParticleContainer::DepositCharge ( amrex::MultiFab * rho,
int lev,
bool local = false,
bool reset = false,
bool apply_boundary_and_scale_volume = false,
int icomp = 0 )

◆ DepositCharge() [2/3]

void WarpXParticleContainer::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.

Parameters
[in,out]rhovector of charge densities (one pointer to MultiFab per mesh refinement level)
[in]localif false, exchange the data in the guard cells after the deposition
[in]resetif true, reset all values of rho to zero
[in]apply_boundary_and_scale_volumewhether to apply boundary conditions and scale the final density by some volume norm in cylindrical and spherical geometry
[in]interpolate_across_levelswhether to average down from the fine patch to the coarse patch
[in]icompcomponent of the MultiFab where rho is deposited (old, new)

◆ DepositCharge() [3/3]

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

◆ DepositCurrent() [1/2]

void WarpXParticleContainer::DepositCurrent ( ablastr::fields::MultiLevelVectorField const & J,
amrex::Real dt,
amrex::Real relative_time )

Deposit current density.

Parameters
[in,out]Jvector of current densities (one three-dimensional array of pointers to MultiFabs per mesh refinement level)
[in]dtTime step for particle level
[in]relative_timeTime at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition.

◆ DepositCurrent() [2/2]

void WarpXParticleContainer::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 )
virtual

◆ DepositCurrentAndMassMatrices()

void WarpXParticleContainer::DepositCurrentAndMassMatrices ( WarpXParIter & pti,
const RealVector & wp,
const RealVector & uxp,
const RealVector & uyp,
const RealVector & uzp,
amrex::MultiFab * jx,
amrex::MultiFab * jy,
amrex::MultiFab * jz,
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

◆ DepositNumberDensity()

void WarpXParticleContainer::DepositNumberDensity ( amrex::MultiFab * number_density,
const int lev )

◆ DepositTemperature()

virtual void WarpXParticleContainer::DepositTemperature ( WarpXParIter & pti,
RealVector const & wp,
RealVector const & uxp,
RealVector const & uyp,
RealVector const & uzp,
amrex::MultiFab *const Tx,
amrex::MultiFab *const Ty,
amrex::MultiFab *const Tz,
long const offset,
long const np_to_deposit,
int const thread_num,
const int lev,
int const depos_lev,
amrex::Real const relative_time,
PushType push_type,
const warpx::particles::deposition::TemperatureDepositionType type,
const warpx::particles::deposition::TemperatureDepositionPass pass )
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ DepositTotalNGPTemperature()

void WarpXParticleContainer::DepositTotalNGPTemperature ( amrex::MultiFab * temperature,
const int lev )

◆ doContinuousInjection()

bool WarpXParticleContainer::doContinuousInjection ( ) const
inline

◆ DoFieldIonization()

int WarpXParticleContainer::DoFieldIonization ( ) const
inline

◆ DoQED()

int WarpXParticleContainer::DoQED ( ) const
inline

◆ Evolve()

virtual void WarpXParticleContainer::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,
ImplicitOptions const * implicit_options = nullptr )
pure virtual

Evolve is the central WarpXParticleContainer function that advances particles for a time dt (typically one timestep). It is a pure virtual function for flexibility.

Implemented in LaserParticleContainer, PhotonParticleContainer, PhysicalParticleContainer, and RigidInjectedParticleContainer.

◆ get_breit_wheeler_engine_ptr()

virtual BreitWheelerEngine * WarpXParticleContainer::get_breit_wheeler_engine_ptr ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ get_quantum_sync_engine_ptr()

virtual QuantumSynchrotronEngine * WarpXParticleContainer::get_quantum_sync_engine_ptr ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ GetAverageNGPTemperature()

std::unique_ptr< amrex::MultiFab > WarpXParticleContainer::GetAverageNGPTemperature ( int lev)

◆ getCharge()

amrex::ParticleReal WarpXParticleContainer::getCharge ( ) const
inline

◆ GetChargeDensity()

std::unique_ptr< MultiFab > WarpXParticleContainer::GetChargeDensity ( int lev,
bool local = false )

◆ GetDebyeLength()

std::unique_ptr< amrex::MultiFab > WarpXParticleContainer::GetDebyeLength ( int lev)

◆ GetDoBackTransformedParticles()

bool WarpXParticleContainer::GetDoBackTransformedParticles ( ) const
inline

◆ getIonizationInitialLevel()

int WarpXParticleContainer::getIonizationInitialLevel ( ) const
inlinenoexcept

◆ getMass()

amrex::ParticleReal WarpXParticleContainer::getMass ( ) const
inline

◆ GetNumberDensity()

std::unique_ptr< amrex::MultiFab > WarpXParticleContainer::GetNumberDensity ( int lev)

◆ GetPlasmaInjector()

virtual PlasmaInjector * WarpXParticleContainer::GetPlasmaInjector ( const int )
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ getSpeciesId()

int WarpXParticleContainer::getSpeciesId ( ) const
inline

◆ getSpeciesTypeName()

std::string WarpXParticleContainer::getSpeciesTypeName ( ) const
inline

This function returns a string containing the name of the species type.

◆ getTemperatureDepositionFlag()

virtual bool WarpXParticleContainer::getTemperatureDepositionFlag ( ) const
inlinevirtualnoexcept

Reimplemented in PhysicalParticleContainer.

◆ getUserIntAttribParser()

virtual amrex::Vector< amrex::Parser * > WarpXParticleContainer::getUserIntAttribParser ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ getUserIntAttribs()

virtual std::vector< std::string > WarpXParticleContainer::getUserIntAttribs ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ getUserRealAttribParser()

virtual amrex::Vector< amrex::Parser * > WarpXParticleContainer::getUserRealAttribParser ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ getUserRealAttribs()

virtual std::vector< std::string > WarpXParticleContainer::getUserRealAttribs ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ has_breit_wheeler()

virtual bool WarpXParticleContainer::has_breit_wheeler ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ has_quantum_sync()

virtual bool WarpXParticleContainer::has_quantum_sync ( ) const
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ HasiAttrib()

bool WarpXParticleContainer::HasiAttrib ( const std::string & name)
inline

◆ InitData()

virtual void WarpXParticleContainer::InitData ( )
pure virtual

◆ InitIonizationModule()

virtual void WarpXParticleContainer::InitIonizationModule ( )
inlinevirtual

Reimplemented in PhysicalParticleContainer.

◆ maxParticleVelocity()

amrex::ParticleReal WarpXParticleContainer::maxParticleVelocity ( bool local = false)

◆ meanParticleVelocity()

std::array< ParticleReal, 3 > WarpXParticleContainer::meanParticleVelocity ( bool local = false)

◆ operator=() [1/2]

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

◆ operator=() [2/2]

WarpXParticleContainer & WarpXParticleContainer::operator= ( WarpXParticleContainer && )
default

◆ particlePostLocate()

void WarpXParticleContainer::particlePostLocate ( ParticleType & p,
const amrex::ParticleLocData & pld,
int lev )
overrideprivatevirtual

◆ PostRestart()

virtual void WarpXParticleContainer::PostRestart ( )
pure virtual

◆ PushP()

virtual void WarpXParticleContainer::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 )
pure virtual

This pushes the particle momenta by dt.

Implemented in LaserParticleContainer, PhotonParticleContainer, PhysicalParticleContainer, and RigidInjectedParticleContainer.

◆ PushX() [1/2]

void WarpXParticleContainer::PushX ( amrex::Real dt)

This pushes the particle positions by one half time step. It is used to desynchronize the particles after initialization or when restarting from a checkpoint.

◆ PushX() [2/2]

void WarpXParticleContainer::PushX ( int lev,
amrex::Real dt )

◆ ReadHeader()

virtual void WarpXParticleContainer::ReadHeader ( std::istream & is)
pure virtual

◆ ReadParameters()

void WarpXParticleContainer::ReadParameters ( )
static

◆ resample()

virtual void WarpXParticleContainer::resample ( const amrex::Vector< amrex::Geometry > & ,
const int ,
bool  )
inlinevirtual

Virtual method to resample the species. Overriden by PhysicalParticleContainer only. Empty body is here because making the method purely virtual would mean that we need to override the method for every derived class. Note that in practice this function is never called because resample() is only called for PhysicalParticleContainers.

Reimplemented in PhysicalParticleContainer.

◆ set_breit_wheeler_engine_ptr()

virtual void WarpXParticleContainer::set_breit_wheeler_engine_ptr ( const std::shared_ptr< BreitWheelerEngine > & )
inlineprotectedvirtual

Reimplemented in PhysicalParticleContainer.

◆ set_quantum_sync_engine_ptr()

virtual void WarpXParticleContainer::set_quantum_sync_engine_ptr ( const std::shared_ptr< QuantumSynchrotronEngine > & )
inlineprotectedvirtual

Reimplemented in PhysicalParticleContainer.

◆ SetDoBackTransformedParticles()

void WarpXParticleContainer::SetDoBackTransformedParticles ( const bool do_back_transformed_particles)
inline

Whether back-transformed diagnostics need to be performed for a particular species.

Parameters
[in]do_back_transformed_particlesThe parameter to set if back-transformed particles are set to true/false

◆ setDoNotDeposit()

void WarpXParticleContainer::setDoNotDeposit ( int flag)
inline

◆ setDoNotGather()

void WarpXParticleContainer::setDoNotGather ( int flag)
inline

◆ setDoNotPush()

void WarpXParticleContainer::setDoNotPush ( bool flag)
inline

◆ sumParticleCharge()

amrex::ParticleReal WarpXParticleContainer::sumParticleCharge ( bool local = false) const

◆ sumParticleEnergy()

amrex::ParticleReal WarpXParticleContainer::sumParticleEnergy ( bool local = false) const

◆ sumParticleWeight()

amrex::ParticleReal WarpXParticleContainer::sumParticleWeight ( bool local = false) const

◆ sumParticleWeightAndEnergy()

std::pair< amrex::ParticleReal, amrex::ParticleReal > WarpXParticleContainer::sumParticleWeightAndEnergy ( bool local = false) const

This returns the total energy/weight/charge for all the particles in this ParticleContainer. The total charge is needed when solving Poisson's equation with periodic boundary conditions.

◆ UpdateAntennaPosition()

virtual void WarpXParticleContainer::UpdateAntennaPosition ( const amrex::Real )
inlinevirtual

Update antenna position for continuous injection of lasers in a boosted frame. Empty function for containers other than lasers.

Reimplemented in LaserParticleContainer.

◆ WriteHeader()

virtual void WarpXParticleContainer::WriteHeader ( std::ostream & os) const
pure virtual

Member Data Documentation

◆ adk_correction_factors

amrex::Gpu::DeviceVector<amrex::Real> WarpXParticleContainer::adk_correction_factors
protected

for correction in Zhang et al., PRA 90, 043410 (2014). a1, a2, a3, Ecrit.

◆ adk_exp_prefactor

amrex::Gpu::DeviceVector<amrex::Real> WarpXParticleContainer::adk_exp_prefactor
protected

◆ adk_power

amrex::Gpu::DeviceVector<amrex::Real> WarpXParticleContainer::adk_power
protected

◆ adk_prefactor

amrex::Gpu::DeviceVector<amrex::Real> WarpXParticleContainer::adk_prefactor
protected

◆ charge

amrex::ParticleReal WarpXParticleContainer::charge
protected

◆ do_adk_correction

int WarpXParticleContainer::do_adk_correction = 0
protected

◆ do_continuous_injection

int WarpXParticleContainer::do_continuous_injection = 0
protected

◆ do_field_ionization

int WarpXParticleContainer::do_field_ionization = 0
protected

◆ do_not_deposit

int WarpXParticleContainer::do_not_deposit = 0

◆ do_not_gather

int WarpXParticleContainer::do_not_gather = 0
protected

◆ do_not_push

bool WarpXParticleContainer::do_not_push = false
protected

◆ do_resampling

int WarpXParticleContainer::do_resampling = 0
protected

◆ do_splitting

bool WarpXParticleContainer::do_splitting = false

◆ initialize_self_fields

bool WarpXParticleContainer::initialize_self_fields = false

◆ ion_atomic_number

int WarpXParticleContainer::ion_atomic_number
protected

◆ ionization_energies

amrex::Gpu::DeviceVector<amrex::Real> WarpXParticleContainer::ionization_energies
protected

◆ ionization_initial_level

int WarpXParticleContainer::ionization_initial_level = 0
protected

◆ ionization_product

int WarpXParticleContainer::ionization_product
protected

◆ ionization_product_name

std::string WarpXParticleContainer::ionization_product_name
protected

◆ local_jx

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_jx
protected

◆ local_jy

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_jy
protected

◆ local_jz

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_jz
protected

◆ local_rho

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_rho
protected

◆ local_Sxx

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Sxx
protected

◆ local_Sxy

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Sxy
protected

◆ local_Sxz

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Sxz
protected

◆ local_Syx

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Syx
protected

◆ local_Syy

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Syy
protected

◆ local_Syz

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Syz
protected

◆ local_Szx

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Szx
protected

◆ local_Szy

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Szy
protected

◆ local_Szz

amrex::Vector<amrex::FArrayBox> WarpXParticleContainer::local_Szz
protected

◆ m_B_external_particle

amrex::Vector<amrex::ParticleReal> WarpXParticleContainer::m_B_external_particle

◆ m_boundary_conditions

ParticleBoundaries WarpXParticleContainer::m_boundary_conditions
protected

◆ m_current_injection_position

amrex::Real WarpXParticleContainer::m_current_injection_position = 0.

Current injection position.

◆ m_deposit_on_main_grid

bool WarpXParticleContainer::m_deposit_on_main_grid = false
protected

instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid

◆ m_do_back_transformed_particles

bool WarpXParticleContainer::m_do_back_transformed_particles = false
protected

Whether back-transformed diagnostics is turned on for the corresponding species.

◆ m_E_external_particle

amrex::Vector<amrex::ParticleReal> WarpXParticleContainer::m_E_external_particle

◆ m_gather_from_main_grid

bool WarpXParticleContainer::m_gather_from_main_grid = false
protected

instead of gathering fields from the finest patch level, gather from the coarsest

◆ m_mass

amrex::ParticleReal WarpXParticleContainer::m_mass
protected

◆ m_qed_breit_wheeler_ele_product

int WarpXParticleContainer::m_qed_breit_wheeler_ele_product
protected

◆ m_qed_breit_wheeler_ele_product_name

std::string WarpXParticleContainer::m_qed_breit_wheeler_ele_product_name
protected

◆ m_qed_breit_wheeler_pos_product

int WarpXParticleContainer::m_qed_breit_wheeler_pos_product
protected

◆ m_qed_breit_wheeler_pos_product_name

std::string WarpXParticleContainer::m_qed_breit_wheeler_pos_product_name
protected

◆ m_qed_quantum_sync_phot_product

int WarpXParticleContainer::m_qed_quantum_sync_phot_product
protected

◆ m_qed_quantum_sync_phot_product_name

std::string WarpXParticleContainer::m_qed_quantum_sync_phot_product_name
protected

◆ MultiParticleContainer

friend WarpXParticleContainer::MultiParticleContainer

◆ physical_element

std::string WarpXParticleContainer::physical_element
protected

◆ physical_species

PhysicalSpecies WarpXParticleContainer::physical_species = PhysicalSpecies::unspecified
protected

◆ self_fields_absolute_tolerance

amrex::Real WarpXParticleContainer::self_fields_absolute_tolerance = amrex::Real(0.0)

◆ self_fields_max_iters

int WarpXParticleContainer::self_fields_max_iters = 200

◆ self_fields_required_precision

amrex::Real WarpXParticleContainer::self_fields_required_precision = amrex::Real(1.e-11)

◆ self_fields_verbosity

int WarpXParticleContainer::self_fields_verbosity = 2

◆ species_id

int WarpXParticleContainer::species_id
protected

◆ split_type

int WarpXParticleContainer::split_type = 0

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