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

#include <LaserParticleContainer.H>

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

Public Member Functions

 LaserParticleContainer (amrex::AmrCore *amr_core, int ispecies, const std::string &name)
 ~LaserParticleContainer () override=default
 LaserParticleContainer (LaserParticleContainer const &)=delete
LaserParticleContaineroperator= (LaserParticleContainer const &)=delete
 LaserParticleContainer (LaserParticleContainer &&)=default
LaserParticleContaineroperator= (LaserParticleContainer &&)=default
void InitData () final
void DefaultInitializeRuntimeAttributes (typename ContainerLike< amrex::PolymorphicArenaAllocator >::ParticleTileType &, int, int) final
 Method to initialize runtime attributes. Does nothing for LaserParticleContainer.
void ReadHeader (std::istream &is) final
void WriteHeader (std::ostream &os) const final
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) final
 Pure virtual function to advance particles (typically by one time step).
void PushP (int lev, amrex::Real dt, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, MomentumPushType momentum_push_type=MomentumPushType::Full) final
void PostRestart () final
void calculate_laser_plane_coordinates (const WarpXParIter &pti, int np, amrex::Real *AMREX_RESTRICT pplane_Xp, amrex::Real *AMREX_RESTRICT pplane_Yp)
void update_laser_particle (WarpXParIter &pti, int np, amrex::ParticleReal *AMREX_RESTRICT puxp, amrex::ParticleReal *AMREX_RESTRICT puyp, amrex::ParticleReal *AMREX_RESTRICT puzp, amrex::ParticleReal const *AMREX_RESTRICT pwp, amrex::Real const *AMREX_RESTRICT amplitude, amrex::Real dt, PushType push_type=PushType::Explicit)
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 InitIonizationModule ()
virtual PlasmaInjectorGetPlasmaInjector (const int)
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 DepositMassMatrices (ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt)
 virtual function to deposit mass matrices for charged particles
virtual void AllocData ()
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)
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 (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)
bool doContinuousInjection () const
virtual void ContinuousFluxInjection (amrex::Real, amrex::Real)
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
virtual bool has_quantum_sync () const
virtual bool has_breit_wheeler () const
virtual bool has_virtual_photons () const
virtual bool has_virtual_photons_beam_size_effect () const
virtual int getVirtualPhotonSpeciesIndex () 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)
std::string const & getName ()
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< 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)

Protected Attributes

std::string m_laser_name
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

Private Member Functions

void ComputeSpacing (int lev, amrex::Real &Sx, amrex::Real &Sy) const
void ComputeWeightMobility (amrex::Real Sx, amrex::Real Sy)
void InitData (int lev)
void ContinuousInjection (const amrex::RealBox &injection_box) override
void UpdateAntennaPosition (amrex::Real dt) override
 Update antenna position for continuous injection of lasers in a boosted frame.

Private Attributes

amrex::Vector< amrex::Realm_position
amrex::Vector< amrex::Realm_nvec
 Coordinates of one of the point of the antenna.
amrex::Vector< amrex::Realm_p_X
 Normal of the plane of the antenna.
amrex::Real m_e_max = std::numeric_limits<amrex::Real>::quiet_NaN()
amrex::Real m_wavelength = std::numeric_limits<amrex::Real>::quiet_NaN()
amrex::Real m_Z0_lab = 0
long m_min_particles_per_mode = 4
amrex::Vector< amrex::Realm_p_Y
amrex::Vector< amrex::Realm_u_X
amrex::Vector< amrex::Realm_u_Y
amrex::Real m_weight = std::numeric_limits<amrex::Real>::quiet_NaN()
amrex::Real m_mobility = std::numeric_limits<amrex::Real>::quiet_NaN()
amrex::RealBox m_laser_injection_box
amrex::Vector< amrex::Realm_updated_position
std::unique_ptr< WarpXLaserProfiles::ILaserProfilem_up_laser_profile
bool m_enabled = true

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 WarpXParticleContainer
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 ()
Protected Member Functions inherited from amrex::ParticleContainerBase
void BuildRedistributeMask (int lev, int nghost=1) const
void defineBufferMap () const

Detailed Description

The main method to inject a laser pulse in WarpX is to use an artificial antenna: particles evenly distributed in a given plane (one particle per cell) move at each iteration and deposit a current J onto the grid, which in turns creates an electromagnetic field on the grid. The particles' displacements are prescribed to create the field requested by the user.

These artificial particles are contained in the LaserParticleContainer. LaserParticleContainer derives directly from WarpXParticleContainer. It requires a DepositCurrent function, but no FieldGather function.

Constructor & Destructor Documentation

◆ LaserParticleContainer() [1/3]

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

◆ ~LaserParticleContainer()

LaserParticleContainer::~LaserParticleContainer ( )
overridedefault

◆ LaserParticleContainer() [2/3]

LaserParticleContainer::LaserParticleContainer ( LaserParticleContainer const & )
delete

◆ LaserParticleContainer() [3/3]

LaserParticleContainer::LaserParticleContainer ( LaserParticleContainer && )
default

Member Function Documentation

◆ calculate_laser_plane_coordinates()

void LaserParticleContainer::calculate_laser_plane_coordinates ( const WarpXParIter & pti,
int np,
amrex::Real *AMREX_RESTRICT pplane_Xp,
amrex::Real *AMREX_RESTRICT pplane_Yp )

◆ ComputeSpacing()

void LaserParticleContainer::ComputeSpacing ( int lev,
amrex::Real & Sx,
amrex::Real & Sy ) const
private

◆ ComputeWeightMobility()

void LaserParticleContainer::ComputeWeightMobility ( amrex::Real Sx,
amrex::Real Sy )
private

◆ ContinuousInjection()

void LaserParticleContainer::ContinuousInjection ( const amrex::RealBox & injection_box)
overrideprivatevirtual

Reimplemented from WarpXParticleContainer.

◆ DefaultInitializeRuntimeAttributes()

void LaserParticleContainer::DefaultInitializeRuntimeAttributes ( typename ContainerLike< amrex::PolymorphicArenaAllocator >::ParticleTileType & ,
int ,
int  )
inlinefinalvirtual

Method to initialize runtime attributes. Does nothing for LaserParticleContainer.

Implements WarpXParticleContainer.

◆ Evolve()

void LaserParticleContainer::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 )
finalvirtual

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

Implements WarpXParticleContainer.

◆ InitData() [1/2]

void LaserParticleContainer::InitData ( )
finalvirtual

◆ InitData() [2/2]

void LaserParticleContainer::InitData ( int lev)
private

◆ operator=() [1/2]

LaserParticleContainer & LaserParticleContainer::operator= ( LaserParticleContainer && )
default

◆ operator=() [2/2]

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

◆ PostRestart()

void LaserParticleContainer::PostRestart ( )
finalvirtual

◆ PushP()

void LaserParticleContainer::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 )
finalvirtual

This pushes the particle momenta by dt.

Implements WarpXParticleContainer.

◆ ReadHeader()

void LaserParticleContainer::ReadHeader ( std::istream & is)
finalvirtual

◆ update_laser_particle()

void LaserParticleContainer::update_laser_particle ( WarpXParIter & pti,
int np,
amrex::ParticleReal *AMREX_RESTRICT puxp,
amrex::ParticleReal *AMREX_RESTRICT puyp,
amrex::ParticleReal *AMREX_RESTRICT puzp,
amrex::ParticleReal const *AMREX_RESTRICT pwp,
amrex::Real const *AMREX_RESTRICT amplitude,
amrex::Real dt,
PushType push_type = PushType::Explicit )

◆ UpdateAntennaPosition()

void LaserParticleContainer::UpdateAntennaPosition ( amrex::Real dt)
overrideprivatevirtual

Update antenna position for continuous injection of lasers in a boosted frame.

Reimplemented from WarpXParticleContainer.

◆ WriteHeader()

void LaserParticleContainer::WriteHeader ( std::ostream & os) const
finalvirtual

Member Data Documentation

◆ m_e_max

amrex::Real LaserParticleContainer::m_e_max = std::numeric_limits<amrex::Real>::quiet_NaN()
private

◆ m_enabled

bool LaserParticleContainer::m_enabled = true
private

◆ m_laser_injection_box

amrex::RealBox LaserParticleContainer::m_laser_injection_box
private

◆ m_laser_name

std::string LaserParticleContainer::m_laser_name
protected

◆ m_min_particles_per_mode

long LaserParticleContainer::m_min_particles_per_mode = 4
private

◆ m_mobility

amrex::Real LaserParticleContainer::m_mobility = std::numeric_limits<amrex::Real>::quiet_NaN()
private

◆ m_nvec

amrex::Vector<amrex::Real> LaserParticleContainer::m_nvec
private

Coordinates of one of the point of the antenna.

◆ m_p_X

amrex::Vector<amrex::Real> LaserParticleContainer::m_p_X
private

Normal of the plane of the antenna.

◆ m_p_Y

amrex::Vector<amrex::Real> LaserParticleContainer::m_p_Y
private

◆ m_position

amrex::Vector<amrex::Real> LaserParticleContainer::m_position
private

◆ m_u_X

amrex::Vector<amrex::Real> LaserParticleContainer::m_u_X
private

◆ m_u_Y

amrex::Vector<amrex::Real> LaserParticleContainer::m_u_Y
private

◆ m_up_laser_profile

std::unique_ptr<WarpXLaserProfiles::ILaserProfile> LaserParticleContainer::m_up_laser_profile
private

◆ m_updated_position

amrex::Vector<amrex::Real> LaserParticleContainer::m_updated_position
private

◆ m_wavelength

amrex::Real LaserParticleContainer::m_wavelength = std::numeric_limits<amrex::Real>::quiet_NaN()
private

◆ m_weight

amrex::Real LaserParticleContainer::m_weight = std::numeric_limits<amrex::Real>::quiet_NaN()
private

◆ m_Z0_lab

amrex::Real LaserParticleContainer::m_Z0_lab = 0
private

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