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;
141 const amrex::Real ,
const amrex::Real ,
142 const amrex::Real ,
const amrex::Real ,
151 virtual void DefaultInitializeRuntimeAttributes (
154 const int n_external_attr_real,
155 const int n_external_attr_int,
163 void PushX ( amrex::Real dt);
164 void PushX (
int lev, amrex::Real dt);
169 virtual void PushP (
int lev, amrex::Real dt,
188 void DepositCurrent (
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
189 const amrex::Real dt,
const amrex::Real relative_time);
201 void DepositCharge (
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
202 const bool local =
false,
const bool reset =
false,
203 const bool do_rz_volume_scaling =
false,
204 const bool interpolate_across_levels =
true,
205 const int icomp = 0);
207 std::unique_ptr<amrex::MultiFab> GetChargeDensity(
int lev,
bool local =
false);
210 RealVector
const & wp,
211 const int *
const ion_lev,
215 const long np_to_depose,
221 RealVector
const & wp,
222 RealVector
const & uxp,
223 RealVector
const & uyp,
224 RealVector
const & uzp,
225 int const *
const ion_lev,
230 long const np_to_depose,
231 int const thread_num,
234 amrex::Real
const dt,
235 amrex::Real
const relative_time);
255 amrex::ParticleReal sumParticleCharge(
bool local =
false);
257 std::array<amrex::ParticleReal, 3> meanParticleVelocity(
bool local =
false);
259 amrex::ParticleReal maxParticleVelocity(
bool local =
false);
285 void AddNParticles (
int lev,
286 int n,
const amrex::ParticleReal*
x,
const amrex::ParticleReal* y,
const amrex::ParticleReal*
z,
287 const amrex::ParticleReal* vx,
const amrex::ParticleReal* vy,
const amrex::ParticleReal* vz,
288 const int nattr_real,
const amrex::ParticleReal* attr_real,
289 const int nattr_int,
const int* attr_int,
290 int uniqueparticles, amrex::Long
id=-1);
292 virtual void ReadHeader (std::istream& is) = 0;
294 virtual void WriteHeader (std::ostream& os)
const = 0;
296 static void ReadParameters ();
298 static void BackwardCompatibility ();
305 void ApplyBoundaryConditions ();
307 bool do_splitting =
false;
308 int do_not_deposit = 0;
309 bool initialize_self_fields =
false;
310 amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
311 amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
312 int self_fields_max_iters = 200;
313 int self_fields_verbosity = 2;
324 m_do_back_transformed_particles = do_back_transformed_particles;
330 amrex::ParticleReal
getMass ()
const {
return mass;}
339 int DoQED()
const {
return has_quantum_sync() || has_breit_wheeler(); }
341 int DoQED()
const {
return false; }
349 template<PhysicalSpecies PhysSpec>
350 bool AmIA () const noexcept {
return (physical_species == PhysSpec);}
371 void defineAllParticleTiles () noexcept;
384 bool m_deposit_on_main_grid =
false;
387 bool m_gather_from_main_grid =
false;
390 int do_not_gather = 0;
396 int do_continuous_injection = 0;
398 int do_field_ionization = 0;
402 int ionization_initial_level = 0;
409 int do_resampling = 0;
411 int do_back_transformed_diagnostics = 1;
413 bool m_do_back_transformed_particles =
false;
438 using TmpParticleTile = std::array<amrex::Gpu::DeviceVector<amrex::ParticleReal>,
448 const int lev)
override;
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:67
virtual void UpdateContinuousInjectionPosition(amrex::Real)
Definition: WarpXParticleContainer.H:246
DtType
Definition: WarpXDtType.H:10
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:439
virtual void GetParticleSlice(const int, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, DiagnosticParticles &)
Definition: WarpXParticleContainer.H:140
virtual void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine >)
Definition: WarpXParticleContainer.H:419
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:423
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:431
typename SoA::IntVector IntVector
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition: WarpXParticleContainer.H:404
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:425
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:355
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:71
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:75
def x
Definition: read_lab_particles.py:26
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:332
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:442
virtual void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine >)
Definition: WarpXParticleContainer.H:421
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:350
int dt
Definition: Stencil.py:468
int DoQED() const
Definition: WarpXParticleContainer.H:339
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition: SpeciesPhysicalProperties.cpp:292
virtual void ContinuousInjection(const amrex::RealBox &)
Definition: WarpXParticleContainer.H:244
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:328
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition: WarpXParticleContainer.H:405
def z
Definition: read_lab_particles.py:27
amrex::ParticleReal charge
Definition: WarpXParticleContainer.H:376
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:330
amrex::ParticleReal mass
Definition: WarpXParticleContainer.H:377
PhysicalSpecies physical_species
Definition: WarpXParticleContainer.H:378
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:434
virtual ~WarpXParticleContainer()
Definition: WarpXParticleContainer.H:117
int doBackTransformedDiagnostics() const
Definition: WarpXParticleContainer.H:318
Definition: NamedComponentParticleContainer.H:45
std::string ionization_product_name
Definition: WarpXParticleContainer.H:400
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition: WarpXParticleContainer.H:403
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:444
int n
Definition: run_libensemble_on_warpx.py:67
int species_id
Definition: WarpXParticleContainer.H:374
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:121
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition: WarpXParticleContainer.H:406
Definition: WarpXParticleContainer_fwd.H:36
virtual bool has_quantum_sync() const
Definition: WarpXParticleContainer.H:336
std::string physical_element
Definition: WarpXParticleContainer.H:407
int ionization_product
Definition: WarpXParticleContainer.H:399
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:323
WarpXParticleContainer::ParticleType ParticleType
Definition: ParticleUtils.cpp:29
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:249
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:428
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:363
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:337
typename SoA::RealVector RealVector
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:424
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:437
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:432
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:426
int ion_atomic_number
Definition: WarpXParticleContainer.H:401
Definition: WarpXParticleContainer.H:49
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:63
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:427
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:105
Definition: WarpXParticleContainer.H:101
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:433
ParticleBoundaries m_boundary_conditions
Definition: WarpXParticleContainer.H:381