10 #ifndef WARPX_WarpXParticleContainer_H_ 11 #define WARPX_WarpXParticleContainer_H_ 59 const std::array<RealVector, PIdx::nattribs>&
GetAttribs ()
const {
60 return GetStructOfArrays().GetRealData();
64 return GetStructOfArrays().GetRealData();
68 return GetStructOfArrays().GetRealData(comp);
72 return GetStructOfArrays().GetRealData(comp);
76 return GetStructOfArrays().GetIntData(comp);
119 virtual void InitData () = 0;
128 virtual void Evolve (
int lev,
138 virtual void PostRestart () = 0;
146 virtual void DefaultInitializeRuntimeAttributes (
149 const int n_external_attr_real,
150 const int n_external_attr_int,
158 void PushX ( amrex::Real dt);
159 void PushX (
int lev, amrex::Real dt);
164 virtual void PushP (
int lev, amrex::Real dt,
183 void DepositCurrent (
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
184 const amrex::Real dt,
const amrex::Real relative_time);
196 void DepositCharge (
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
197 const bool local =
false,
const bool reset =
false,
198 const bool do_rz_volume_scaling =
false,
199 const bool interpolate_across_levels =
true,
200 const int icomp = 0);
202 std::unique_ptr<amrex::MultiFab> GetChargeDensity(
int lev,
bool local =
false);
205 RealVector
const & wp,
206 const int *
const ion_lev,
210 const long np_to_depose,
216 RealVector
const & wp,
217 RealVector
const & uxp,
218 RealVector
const & uyp,
219 RealVector
const & uzp,
220 int const *
const ion_lev,
225 long const np_to_depose,
226 int const thread_num,
229 amrex::Real
const dt,
230 amrex::Real
const relative_time);
250 amrex::ParticleReal sumParticleCharge(
bool local =
false);
252 std::array<amrex::ParticleReal, 3> meanParticleVelocity(
bool local =
false);
254 amrex::ParticleReal maxParticleVelocity(
bool local =
false);
280 void AddNParticles (
int lev,
281 int n,
const amrex::ParticleReal* x,
const amrex::ParticleReal* y,
const amrex::ParticleReal* z,
282 const amrex::ParticleReal* ux,
const amrex::ParticleReal* uy,
const amrex::ParticleReal* uz,
283 const int nattr_real,
const amrex::ParticleReal* attr_real,
284 const int nattr_int,
const int* attr_int,
285 int uniqueparticles, amrex::Long
id=-1);
287 virtual void ReadHeader (std::istream& is) = 0;
289 virtual void WriteHeader (std::ostream& os)
const = 0;
291 static void ReadParameters ();
293 static void BackwardCompatibility ();
297 void ApplyBoundaryConditions ();
299 bool do_splitting =
false;
300 int do_not_deposit = 0;
301 bool initialize_self_fields =
false;
302 amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
303 amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
304 int self_fields_max_iters = 200;
305 int self_fields_verbosity = 2;
315 m_do_back_transformed_particles = do_back_transformed_particles;
321 amrex::ParticleReal
getMass ()
const {
return mass;}
330 int DoQED()
const {
return has_quantum_sync() || has_breit_wheeler(); }
332 int DoQED()
const {
return false; }
340 template<PhysicalSpecies PhysSpec>
341 bool AmIA () const noexcept {
return (physical_species == PhysSpec);}
362 void defineAllParticleTiles () noexcept;
375 bool m_deposit_on_main_grid =
false;
378 bool m_gather_from_main_grid =
false;
381 int do_not_gather = 0;
387 int do_continuous_injection = 0;
389 int do_field_ionization = 0;
393 int ionization_initial_level = 0;
400 int do_resampling = 0;
403 bool m_do_back_transformed_particles =
false;
428 using TmpParticleTile = std::array<amrex::Gpu::DeviceVector<amrex::ParticleReal>,
438 const int lev)
override;
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:67
virtual void UpdateContinuousInjectionPosition(amrex::Real)
Definition: WarpXParticleContainer.H:241
DtType
Definition: WarpXDtType.H:10
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:429
virtual void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine >)
Definition: WarpXParticleContainer.H:409
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:413
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:421
typename SoA::IntVector IntVector
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition: WarpXParticleContainer.H:395
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:415
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:346
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:71
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:75
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:323
Definition: ParticleBoundaries.H:18
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition: WarpXParticleContainer.H:59
TmpParticles getTmpParticleData() const noexcept
Definition: WarpXParticleContainer.H:432
virtual void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine >)
Definition: WarpXParticleContainer.H:411
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:341
int dt
Definition: Stencil.py:468
int DoQED() const
Definition: WarpXParticleContainer.H:330
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition: SpeciesPhysicalProperties.cpp:294
virtual void ContinuousInjection(const amrex::RealBox &)
Definition: WarpXParticleContainer.H:239
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:319
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition: WarpXParticleContainer.H:396
amrex::ParticleReal charge
Definition: WarpXParticleContainer.H:367
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:321
amrex::ParticleReal mass
Definition: WarpXParticleContainer.H:368
PhysicalSpecies physical_species
Definition: WarpXParticleContainer.H:369
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:424
virtual ~WarpXParticleContainer()
Definition: WarpXParticleContainer.H:117
Definition: NamedComponentParticleContainer.H:45
std::string ionization_product_name
Definition: WarpXParticleContainer.H:391
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition: WarpXParticleContainer.H:394
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:434
int n
Definition: run_libensemble_on_warpx.py:67
int species_id
Definition: WarpXParticleContainer.H:365
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:121
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition: WarpXParticleContainer.H:397
Definition: WarpXParticleContainer_fwd.H:36
virtual bool has_quantum_sync() const
Definition: WarpXParticleContainer.H:327
std::string physical_element
Definition: WarpXParticleContainer.H:398
int ionization_product
Definition: WarpXParticleContainer.H:390
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:314
WarpXParticleContainer::ParticleType ParticleType
Definition: ParticleUtils.cpp:29
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:244
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:418
virtual void resample(const int)
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.
Definition: WarpXParticleContainer.H:354
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:328
typename SoA::RealVector RealVector
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:414
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:427
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:422
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:416
int ion_atomic_number
Definition: WarpXParticleContainer.H:392
Definition: WarpXParticleContainer.H:49
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:63
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:417
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:105
Definition: WarpXParticleContainer.H:101
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:423
ParticleBoundaries m_boundary_conditions
Definition: WarpXParticleContainer.H:372