10 #ifndef WARPX_WarpXParticleContainer_H_ 11 #define WARPX_WarpXParticleContainer_H_ 60 const std::array<RealVector, PIdx::nattribs>&
GetAttribs ()
const {
61 return GetStructOfArrays().GetRealData();
65 return GetStructOfArrays().GetRealData();
69 return GetStructOfArrays().GetRealData(comp);
73 return GetStructOfArrays().GetRealData(comp);
77 return GetStructOfArrays().GetIntData(comp);
120 virtual void InitData () = 0;
129 virtual void Evolve (
int lev,
139 virtual void PostRestart () = 0;
147 virtual void DefaultInitializeRuntimeAttributes (
149 NArrayReal, NArrayInt,
151 const int n_external_attr_real,
152 const int n_external_attr_int,
160 void PushX ( amrex::Real dt);
161 void PushX (
int lev, amrex::Real dt);
166 virtual void PushP (
int lev, amrex::Real dt,
185 void DepositCurrent (
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
186 const amrex::Real dt,
const amrex::Real relative_time);
198 void DepositCharge (
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
199 const bool local =
false,
const bool reset =
false,
200 const bool apply_boundary_and_scale_volume =
false,
201 const bool interpolate_across_levels =
true,
202 const int icomp = 0);
204 std::unique_ptr<amrex::MultiFab> GetChargeDensity(
int lev,
bool local =
false);
208 const int *
const ion_lev,
212 const long np_to_depose,
213 const int thread_num,
215 const int depos_lev);
222 int const *
const ion_lev,
227 long const np_to_depose,
228 int const thread_num,
231 amrex::Real
const dt,
232 amrex::Real
const relative_time);
252 amrex::ParticleReal sumParticleCharge(
bool local =
false);
254 std::array<amrex::ParticleReal, 3> meanParticleVelocity(
bool local =
false);
256 amrex::ParticleReal maxParticleVelocity(
bool local =
false);
282 void AddNParticles (
int lev,
283 int n,
const amrex::ParticleReal* x,
const amrex::ParticleReal* y,
const amrex::ParticleReal* z,
284 const amrex::ParticleReal* ux,
const amrex::ParticleReal* uy,
const amrex::ParticleReal* uz,
285 const int nattr_real,
const amrex::ParticleReal* attr_real,
286 const int nattr_int,
const int* attr_int,
287 int uniqueparticles, amrex::Long
id=-1);
289 virtual void ReadHeader (std::istream& is) = 0;
291 virtual void WriteHeader (std::ostream& os)
const = 0;
293 static void ReadParameters ();
295 static void BackwardCompatibility ();
299 void ApplyBoundaryConditions ();
301 bool do_splitting =
false;
302 int do_not_deposit = 0;
303 bool initialize_self_fields =
false;
304 amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
305 amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
306 int self_fields_max_iters = 200;
307 int self_fields_verbosity = 2;
317 m_do_back_transformed_particles = do_back_transformed_particles;
323 amrex::ParticleReal
getMass ()
const {
return mass;}
332 int DoQED()
const {
return has_quantum_sync() || has_breit_wheeler(); }
334 int DoQED()
const {
return false; }
342 template<PhysicalSpecies PhysSpec>
343 bool AmIA () const noexcept {
return (physical_species == PhysSpec);}
364 void defineAllParticleTiles () noexcept;
377 bool m_deposit_on_main_grid =
false;
380 bool m_gather_from_main_grid =
false;
383 int do_not_gather = 0;
389 int do_continuous_injection = 0;
391 int do_field_ionization = 0;
395 int ionization_initial_level = 0;
402 int do_resampling = 0;
405 bool m_do_back_transformed_particles =
false;
430 using TmpParticleTile = std::array<amrex::Gpu::DeviceVector<amrex::ParticleReal>,
440 const int lev)
override;
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:68
virtual void UpdateContinuousInjectionPosition(amrex::Real)
Definition: WarpXParticleContainer.H:243
DtType
Definition: WarpXDtType.H:10
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:431
virtual void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine >)
Definition: WarpXParticleContainer.H:411
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:415
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:423
typename SoA::RealVector RealVector
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition: WarpXParticleContainer.H:397
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:417
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:348
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:72
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:76
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:325
Definition: ParticleBoundaries.H:18
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition: WarpXParticleContainer.H:60
typename SoA::IntVector IntVector
TmpParticles getTmpParticleData() const noexcept
Definition: WarpXParticleContainer.H:434
virtual void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine >)
Definition: WarpXParticleContainer.H:413
T_ParticleType ParticleType
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:343
int DoQED() const
Definition: WarpXParticleContainer.H:332
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:241
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:321
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition: WarpXParticleContainer.H:398
amrex::ParticleReal charge
Definition: WarpXParticleContainer.H:369
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:323
amrex::ParticleReal mass
Definition: WarpXParticleContainer.H:370
PhysicalSpecies physical_species
Definition: WarpXParticleContainer.H:371
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:426
virtual ~WarpXParticleContainer()
Definition: WarpXParticleContainer.H:118
Definition: NamedComponentParticleContainer.H:45
std::string ionization_product_name
Definition: WarpXParticleContainer.H:393
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition: WarpXParticleContainer.H:396
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:436
int n
Definition: run_libensemble_on_warpx.py:67
int species_id
Definition: WarpXParticleContainer.H:367
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:122
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition: WarpXParticleContainer.H:399
Definition: WarpXParticleContainer_fwd.H:39
virtual bool has_quantum_sync() const
Definition: WarpXParticleContainer.H:329
std::string physical_element
Definition: WarpXParticleContainer.H:400
int ionization_product
Definition: WarpXParticleContainer.H:392
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:316
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:246
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:420
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:356
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:330
int dt
Definition: stencil.py:440
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:416
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:429
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:424
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:418
int ion_atomic_number
Definition: WarpXParticleContainer.H:394
typename SoA::RealVector RealVector
Definition: WarpXParticleContainer.H:50
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:64
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:419
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:106
Definition: WarpXParticleContainer.H:102
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:425
ParticleBoundaries m_boundary_conditions
Definition: WarpXParticleContainer.H:374