10 #ifndef WARPX_WarpXParticleContainer_H_
11 #define WARPX_WarpXParticleContainer_H_
49 using namespace amrex::literals;
61 const std::array<RealVector, PIdx::nattribs>&
GetAttribs ()
const {
62 return GetStructOfArrays().GetRealData();
66 return GetStructOfArrays().GetRealData();
70 return GetStructOfArrays().GetRealData(comp);
74 return GetStructOfArrays().GetRealData(comp);
78 return GetStructOfArrays().GetIntData(comp);
156 NArrayReal, NArrayInt,
158 const int n_external_attr_real,
159 const int n_external_attr_int,
167 void PushX ( amrex::Real
dt);
168 void PushX (
int lev, amrex::Real
dt);
192 void DepositCurrent (
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
193 const amrex::Real
dt,
const amrex::Real relative_time);
205 void DepositCharge (
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
206 const bool local =
false,
const bool reset =
false,
207 const bool apply_boundary_and_scale_volume =
false,
208 const bool interpolate_across_levels =
true,
209 const int icomp = 0);
210 void DepositCharge (std::unique_ptr<amrex::MultiFab>& rho,
const int lev,
211 const bool local =
false,
const bool reset =
false,
212 const bool apply_boundary_and_scale_volume =
false,
213 const int icomp = 0);
215 std::unique_ptr<amrex::MultiFab> GetChargeDensity(
int lev,
bool local =
false);
219 const int *
const ion_lev,
223 const long np_to_depose,
224 const int thread_num,
226 const int depos_lev);
233 int const *
const ion_lev,
238 long const np_to_depose,
239 int const thread_num,
242 amrex::Real
const dt,
243 amrex::Real
const relative_time);
266 amrex::ParticleReal sumParticleCharge(
bool local =
false);
268 std::array<amrex::ParticleReal, 3> meanParticleVelocity(
bool local =
false);
270 amrex::ParticleReal maxParticleVelocity(
bool local =
false);
296 void AddNParticles (
int lev,
297 int n,
const amrex::ParticleReal* x,
const amrex::ParticleReal* y,
const amrex::ParticleReal* z,
298 const amrex::ParticleReal* ux,
const amrex::ParticleReal* uy,
const amrex::ParticleReal* uz,
299 const int nattr_real,
const amrex::ParticleReal* attr_real,
300 const int nattr_int,
const int* attr_int,
301 int uniqueparticles, amrex::Long
id=-1);
307 static void ReadParameters ();
313 void ApplyBoundaryConditions ();
315 bool do_splitting =
false;
316 int do_not_deposit = 0;
317 bool initialize_self_fields =
false;
318 amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
319 amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
320 int self_fields_max_iters = 200;
321 int self_fields_verbosity = 2;
334 m_do_back_transformed_particles = do_back_transformed_particles;
340 amrex::ParticleReal
getMass ()
const {
return mass;}
349 int DoQED()
const {
return has_quantum_sync() || has_breit_wheeler(); }
351 int DoQED()
const {
return false; }
359 template<PhysicalSpecies PhysSpec>
360 bool AmIA () const noexcept {
return (physical_species == PhysSpec);}
381 void defineAllParticleTiles () noexcept;
394 bool m_deposit_on_main_grid = false;
397 bool m_gather_from_main_grid = false;
400 int do_not_gather = 0;
406 int do_continuous_injection = 0;
408 int do_field_ionization = 0;
409 int ionization_product;
410 std::
string ionization_product_name;
411 int ion_atomic_number;
412 int ionization_initial_level = 0;
417 std::
string physical_element;
419 int do_resampling = 0;
422 bool m_do_back_transformed_particles = false;
457 const int lev)
override;
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
DtType
Definition: WarpXDtType.H:11
Definition: NamedComponentParticleContainer.H:48
Definition: PlasmaInjector.H:41
Definition: WarpXParticleContainer.H:53
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:65
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:69
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:77
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:73
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition: WarpXParticleContainer.H:61
Definition: WarpXParticleContainer.H:105
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:360
virtual void PostRestart()=0
virtual void ReadHeader(std::istream &is)=0
virtual void Evolve(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz, amrex::MultiFab &jx, amrex::MultiFab &jy, amrex::MultiFab &jz, amrex::MultiFab *cjx, amrex::MultiFab *cjy, amrex::MultiFab *cjz, amrex::MultiFab *rho, amrex::MultiFab *crho, const amrex::MultiFab *cEx, const amrex::MultiFab *cEy, const amrex::MultiFab *cEz, const amrex::MultiFab *cBx, const amrex::MultiFab *cBy, const amrex::MultiFab *cBz, amrex::Real t, amrex::Real dt, DtType a_dt_type=DtType::Full, bool skip_deposition=false)=0
amrex::Real m_current_injection_position
Current injection position.
Definition: WarpXParticleContainer.H:324
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:433
virtual void WriteHeader(std::ostream &os) const =0
virtual void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine >)
Definition: WarpXParticleContainer.H:430
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:258
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:365
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:436
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:123
virtual void InitData()=0
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:333
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:441
bool doContinuousInjection() const
Definition: WarpXParticleContainer.H:255
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:442
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:448
virtual ~WarpXParticleContainer()
Definition: WarpXParticleContainer.H:119
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:443
virtual void resample(const int)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition: WarpXParticleContainer.H:373
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:338
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:453
virtual void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine >)
Definition: WarpXParticleContainer.H:428
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:347
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
virtual void UpdateContinuousInjectionPosition(amrex::Real)
Definition: WarpXParticleContainer.H:254
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:435
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:437
virtual void ContinuousInjection(const amrex::RealBox &)
Definition: WarpXParticleContainer.H:252
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:434
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:432
virtual void DefaultInitializeRuntimeAttributes(amrex::ParticleTile< amrex::Particle< NStructReal, NStructInt >, NArrayReal, NArrayInt, amrex::PinnedArenaAllocator > &pinned_tile, const int n_external_attr_real, const int n_external_attr_int, const amrex::RandomEngine &engine)=0
Virtual method to initialize runtime attributes. Must be overriden by each derived class.
virtual bool has_quantum_sync() const
Definition: WarpXParticleContainer.H:346
TmpParticles getTmpParticleData() const noexcept
Definition: WarpXParticleContainer.H:451
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:107
virtual PlasmaInjector * GetPlasmaInjector()
Definition: WarpXParticleContainer.H:129
int getSpeciesId() const
Definition: WarpXParticleContainer.H:260
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:342
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:340
int DoQED() const
Definition: WarpXParticleContainer.H:349
static void BackwardCompatibility()
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:440
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:446
typename SoA::RealVector RealVector
typename SoA::IntVector IntVector
typename SoA::RealVector RealVector
T_ParticleType ParticleType
PODVector< T, ArenaAllocator< T > > DeviceVector
int n
Definition: run_libensemble_on_warpx.py:70
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition: SpeciesPhysicalProperties.cpp:294
float dt
Definition: stencil.py:440
Definition: ParticleBoundaries.H:19
@ nattribs
Definition: WarpXParticleContainer_fwd.H:39