10 #ifndef WARPX_WarpXParticleContainer_H_
11 #define WARPX_WarpXParticleContainer_H_
48 using namespace amrex::literals;
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);
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);
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);
293 static void ReadParameters ();
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;
392 int ionization_product;
393 std::
string ionization_product_name;
394 int ion_atomic_number;
395 int ionization_initial_level = 0;
400 std::
string physical_element;
402 int do_resampling = 0;
405 bool m_do_back_transformed_particles = false;
440 const int lev)
override;
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
DtType
Definition: WarpXDtType.H:11
Definition: NamedComponentParticleContainer.H:47
Definition: WarpXParticleContainer.H:52
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:64
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:68
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:76
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:72
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition: WarpXParticleContainer.H:60
Definition: WarpXParticleContainer.H:104
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:343
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
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:416
virtual void WriteHeader(std::ostream &os) const =0
virtual void set_quantum_sync_engine_ptr(std::shared_ptr< QuantumSynchrotronEngine >)
Definition: WarpXParticleContainer.H:413
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:246
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:348
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:419
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:122
virtual void InitData()=0
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:316
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:424
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:425
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:431
virtual ~WarpXParticleContainer()
Definition: WarpXParticleContainer.H:118
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:426
virtual void resample(const int)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition: WarpXParticleContainer.H:356
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:321
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:436
virtual void set_breit_wheeler_engine_ptr(std::shared_ptr< BreitWheelerEngine >)
Definition: WarpXParticleContainer.H:411
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:330
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:243
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:418
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:420
virtual void ContinuousInjection(const amrex::RealBox &)
Definition: WarpXParticleContainer.H:241
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:417
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:415
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:329
TmpParticles getTmpParticleData() const noexcept
Definition: WarpXParticleContainer.H:434
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:106
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:325
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:323
int DoQED() const
Definition: WarpXParticleContainer.H:332
static void BackwardCompatibility()
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:423
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:429
typename SoA::RealVector RealVector
typename SoA::IntVector IntVector
typename SoA::RealVector RealVector
T_ParticleType ParticleType
def y
Definition: Excitation_Flag_Generator.py:76
def z
Definition: Excitation_Flag_Generator.py:77
int n
Definition: run_libensemble_on_warpx.py:67
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition: SpeciesPhysicalProperties.cpp:294
int dt
Definition: stencil.py:440
Definition: ParticleBoundaries.H:19
@ nattribs
Definition: WarpXParticleContainer_fwd.H:39