WarpX
Loading...
Searching...
No Matches
WarpXParticleContainer.H
Go to the documentation of this file.
1/* Copyright 2019-2020 Andrew Myers, Axel Huebl, David Grote
2 * Jean-Luc Vay, Junmin Gu, Luca Fedeli
3 * Maxence Thevenet, Remi Lehe, Revathi Jambunathan
4 * Weiqun Zhang, Yinjian Zhao
5 *
6 * This file is part of WarpX.
7 *
8 * License: BSD-3-Clause-LBNL
9 */
10#ifndef WARPX_WarpXParticleContainer_H_
11#define WARPX_WarpXParticleContainer_H_
12
15
20
21#ifdef WARPX_QED
24#endif
26
29
31
32#include <AMReX_Array.H>
33#include <AMReX_FArrayBox.H>
34#include <AMReX_Geometry.H>
35#include <AMReX_GpuAllocators.H>
36#include <AMReX_GpuContainers.H>
37#include <AMReX_INT.H>
38#include <AMReX_ParIter.H>
39#include <AMReX_Particles.H>
40#include <AMReX_Random.H>
41#include <AMReX_REAL.H>
43#include <AMReX_Vector.H>
44
45#include <AMReX_BaseFwd.H>
46#include <AMReX_AmrCoreFwd.H>
47
48#include <array>
49#include <iosfwd>
50#include <map>
51#include <memory>
52#include <string>
53#include <utility>
54
57struct PIdx
58{
59 enum {
60#if !defined (WARPX_DIM_1D_Z)
62#endif
63#if defined (WARPX_DIM_3D)
64 y,
65#endif
66#if !defined(WARPX_DIM_RCYLINDER) && !defined(WARPX_DIM_RSPHERE)
68#endif
69 w,
70 ux, uy, uz,
71#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
73#endif
74#if defined(WARPX_DIM_RSPHERE)
75 phi,
76#endif
78 };
79
81 static constexpr auto names = {
82#if !defined (WARPX_DIM_1D_Z)
83 "x",
84#endif
85#if defined (WARPX_DIM_3D)
86 "y",
87#endif
88#if !defined(WARPX_DIM_RCYLINDER) && !defined(WARPX_DIM_RSPHERE)
89 "z",
90#endif
91 "w",
92 "ux",
93 "uy",
94 "uz",
95#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
96 "theta", // azimuthal angle
97#endif
98#if defined(WARPX_DIM_RSPHERE)
99 "phi", // polar angle, relative to the x-y plane
100#endif
101 };
102
103 static_assert(names.size() == nattribs);
104};
105
106struct IntIdx {
107 enum
108 {
110 };
111
112 static constexpr std::initializer_list<char const *> names = {};
113};
114
116 : public amrex::ParIterSoA<PIdx::nattribs, 0>
117{
118public:
119 using amrex::ParIterSoA<PIdx::nattribs, 0>::ParIterSoA;
120
121 WarpXParIter (ContainerType& pc, int level);
122
123 WarpXParIter (ContainerType& pc, int level, amrex::MFItInfo& info);
124
125 [[nodiscard]] const std::array<RealVector, PIdx::nattribs>& GetAttribs () const
126 {
127 return GetStructOfArrays().GetRealData();
128 }
129
130 [[nodiscard]] std::array<RealVector, PIdx::nattribs>& GetAttribs ()
131 {
132 return GetStructOfArrays().GetRealData();
133 }
134
135 [[nodiscard]] const RealVector& GetAttribs (int comp) const
136 {
137 return GetStructOfArrays().GetRealData(comp);
138 }
139
140 [[nodiscard]] RealVector& GetAttribs (int comp)
141 {
142 return GetStructOfArrays().GetRealData(comp);
143 }
144
145 [[nodiscard]] const IntVector& GetiAttribs (int comp) const
146 {
147 return GetStructOfArrays().GetIntData(comp);
148 }
149
150 [[nodiscard]] IntVector& GetiAttribs (int comp)
151 {
152 return GetStructOfArrays().GetIntData(comp);
153 }
154
155 [[nodiscard]] const RealVector& GetAttribs (const std::string& name) const
156 {
157 return GetStructOfArrays().GetRealData(name);
158 }
159
160 [[nodiscard]] RealVector& GetAttribs (const std::string& name)
161 {
162 return GetStructOfArrays().GetRealData(name);
163 }
164
165 [[nodiscard]] const IntVector& GetiAttribs (const std::string& name) const
166 {
167 return GetStructOfArrays().GetIntData(name);
168 }
169
170 [[nodiscard]] IntVector& GetiAttribs (const std::string& name)
171 {
172 return GetStructOfArrays().GetIntData(name);
173 }
174};
175
199 : public amrex::ParticleContainerPureSoA<PIdx::nattribs, 0, amrex::DefaultAllocator>
200{
201public:
203
204 // amrex::StructOfArrays with DiagIdx::nattribs amrex::ParticleReal components
205 // and 0 int components for the particle data.
207 // DiagnosticParticles is a vector, with one element per MR level.
208 // DiagnosticParticles[lev] is typically a key-value pair where the key is
209 // a pair [grid_index, tile_index], and the value is the corresponding
210 // DiagnosticParticleData (see above) on this tile.
212
213 WarpXParticleContainer (amrex::AmrCore* amr_core, int ispecies);
214 ~WarpXParticleContainer() override = default;
215
216 // Move and copy operations
221
222 virtual void InitData () = 0;
223
224 virtual void InitIonizationModule () {}
225
226 /*
227 * \brief Virtual function that returns a pointer to the plasma injector,
228 * for derived classes that define one (PhysicalParticleContainer).
229 */
230 virtual PlasmaInjector* GetPlasmaInjector (const int /*i*/) { return nullptr; }
231
238 int lev,
239 const std::string& current_fp_string,
240 amrex::Real t, amrex::Real dt, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false,
241 ImplicitOptions const * implicit_options = nullptr) = 0;
242
243 virtual void PostRestart () = 0;
244
245 virtual void AllocData ();
246
253 int n_external_attr_real,
254 int n_external_attr_int) = 0;
255
261 void PushX ( amrex::Real dt);
262 void PushX (int lev, amrex::Real dt);
263
267 virtual void PushP (int lev, amrex::Real dt,
268 const amrex::MultiFab& Ex,
269 const amrex::MultiFab& Ey,
270 const amrex::MultiFab& Ez,
271 const amrex::MultiFab& Bx,
272 const amrex::MultiFab& By,
273 const amrex::MultiFab& Bz) = 0;
274
287 amrex::Real dt, amrex::Real relative_time);
288
301 bool local = false, bool reset = false,
302 bool apply_boundary_and_scale_volume = false,
303 bool interpolate_across_levels = true,
304 int icomp = 0);
305 void DepositCharge (amrex::MultiFab* rho, int lev,
306 bool local = false, bool reset = false,
307 bool apply_boundary_and_scale_volume = false,
308 int icomp = 0);
309
310 std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
311
312 virtual void DepositCharge (WarpXParIter& pti,
313 RealVector const & wp,
314 const int* ion_lev,
315 amrex::MultiFab* rho,
316 int icomp,
317 long offset,
318 long np_to_deposit,
319 int thread_num,
320 int lev,
321 int depos_lev);
322
323 virtual void DepositCurrent (WarpXParIter& pti,
324 RealVector const & wp,
325 RealVector const & uxp,
326 RealVector const & uyp,
327 RealVector const & uzp,
328 int const* ion_lev,
329 amrex::MultiFab* jx,
330 amrex::MultiFab* jy,
331 amrex::MultiFab* jz,
332 long offset,
333 long np_to_deposit,
334 int thread_num,
335 int lev,
336 int depos_lev,
337 amrex::Real dt,
338 amrex::Real relative_time,
339 PushType push_type);
351 [[maybe_unused]]ablastr::fields::MultiLevelVectorField const & T_vf,
352 [[maybe_unused]]amrex::Real relative_time)
353 {}
354
355 virtual void DepositTemperature (
356 [[maybe_unused]]WarpXParIter& pti,
357 [[maybe_unused]]RealVector const & wp,
358 [[maybe_unused]]RealVector const & uxp,
359 [[maybe_unused]]RealVector const & uyp,
360 [[maybe_unused]]RealVector const & uzp,
361 [[maybe_unused]]amrex::MultiFab * const Tx,
362 [[maybe_unused]]amrex::MultiFab * const Ty,
363 [[maybe_unused]]amrex::MultiFab * const Tz,
364 [[maybe_unused]]long const offset,
365 [[maybe_unused]]long const np_to_deposit,
366 [[maybe_unused]]int const thread_num,
367 [[maybe_unused]]const int lev,
368 [[maybe_unused]]int const depos_lev,
369 [[maybe_unused]]amrex::Real const relative_time,
370 [[maybe_unused]]PushType push_type,
373 {}
374
375 void DepositTotalNGPTemperature (amrex::MultiFab* temperature, const int lev);
376 std::unique_ptr<amrex::MultiFab> GetAverageNGPTemperature (int lev);
377
378 void DepositNumberDensity (amrex::MultiFab* number_density, const int lev);
379 std::unique_ptr<amrex::MultiFab> GetNumberDensity (int lev);
380
381 std::unique_ptr<amrex::MultiFab> GetDebyeLength (int lev);
382
383 virtual
385 const RealVector& wp,
386 const RealVector& uxp,
387 const RealVector& uyp,
388 const RealVector& uzp,
389 amrex::MultiFab* jx,
390 amrex::MultiFab* jy,
391 amrex::MultiFab* jz,
392 amrex::MultiFab* Sxx,
393 amrex::MultiFab* Sxy,
394 amrex::MultiFab* Sxz,
395 amrex::MultiFab* Syx,
396 amrex::MultiFab* Syy,
397 amrex::MultiFab* Syz,
398 amrex::MultiFab* Szx,
399 amrex::MultiFab* Szy,
400 amrex::MultiFab* Szz,
401 const amrex::FArrayBox* bxfab,
402 const amrex::FArrayBox* byfab,
403 const amrex::FArrayBox* bzfab,
404 long offset,
405 long np_to_deposit,
406 int thread_num,
407 int lev,
408 int depos_lev,
409 amrex::Real dt );
410
411 // If particles start outside of the domain, ContinuousInjection
412 // makes sure that they are initialized when they enter the domain, and
413 // NOT before. Virtual function, overriden by derived classes.
414 // Current status:
415 // PhysicalParticleContainer: implemented.
416 // LaserParticleContainer: implemented.
417 // RigidInjectedParticleContainer: not implemented.
418 virtual void ContinuousInjection(const amrex::RealBox& /*injection_box*/) {}
419
424 virtual void UpdateAntennaPosition(const amrex::Real /*dt*/) {}
425
427
428 // Inject a continuous flux of particles from a defined plane
429 virtual void ContinuousFluxInjection(amrex::Real /*t*/, amrex::Real /*dt*/) {}
430
431 int getSpeciesId() const {return species_id;}
432
437 std::pair<amrex::ParticleReal, amrex::ParticleReal> sumParticleWeightAndEnergy (bool local = false) const;
438 amrex::ParticleReal sumParticleCharge (bool local = false) const;
439 amrex::ParticleReal sumParticleWeight (bool local = false) const;
440 amrex::ParticleReal sumParticleEnergy (bool local = false) const;
441
442 std::array<amrex::ParticleReal, 3> meanParticleVelocity(bool local = false);
443
444 amrex::ParticleReal maxParticleVelocity(bool local = false);
445
470 void AddNParticles (int lev, long n,
477 int nattr_real,
479 int nattr_int, amrex::Vector<amrex::Vector<int>> const & attr_int,
480 int uniqueparticles, amrex::Long id=-1);
481
488
489 virtual void ReadHeader (std::istream& is) = 0;
490
491 virtual void WriteHeader (std::ostream& os) const = 0;
492
493 static void ReadParameters ();
494
495 static void BackwardCompatibility ();
496
500
501 bool do_splitting = false;
504 amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
505 amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
508
509 // External fields added to particle fields.
512
515
516 // split along diagonals (0) or axes (1)
517 int split_type = 0;
518
523 void SetDoBackTransformedParticles (const bool do_back_transformed_particles) {
524 m_do_back_transformed_particles = do_back_transformed_particles;
525 }
526
530
531 amrex::ParticleReal getCharge () const {return charge;}
532
533 amrex::ParticleReal getMass () const {return m_mass;}
534
536
537#ifdef WARPX_QED
538 //Species for which QED effects are relevant should override these methods
539 virtual bool has_quantum_sync() const {return false;}
540 virtual bool has_breit_wheeler() const {return false;}
541
542 int DoQED() const { return has_quantum_sync() || has_breit_wheeler(); }
543#else
544 int DoQED() const { return false; }
545#endif
546
547 /* \brief This function tests if the current species
548 * is of a given PhysicalSpecies (specified as a template parameter).
549 * @tparam PhysSpec the PhysicalSpecies to test against
550 * @return the result of the test
551 */
552 template<PhysicalSpecies PhysSpec>
553 bool AmIA () const noexcept {return (physical_species == PhysSpec);}
554
559
566 virtual void resample (const amrex::Vector<amrex::Geometry>& /*geom*/, const int /*timestep*/, bool /*verbose*/) {}
567
574 void defineAllParticleTiles () noexcept;
575
576 virtual std::vector<std::string> getUserIntAttribs () const { return std::vector<std::string>{}; }
577
578 virtual std::vector<std::string> getUserRealAttribs () const { return std::vector<std::string>{}; }
579
581
583
584#ifdef WARPX_QED
585 virtual BreitWheelerEngine* get_breit_wheeler_engine_ptr () const {return nullptr;}
586 virtual QuantumSynchrotronEngine* get_quantum_sync_engine_ptr () const {return nullptr;}
587#endif
588
589 void setDoNotPush (bool flag) { do_not_push = flag; }
590 void setDoNotGather (int flag) { do_not_gather = flag; }
591 void setDoNotDeposit (int flag) { do_not_deposit = flag; }
592
593 bool HasiAttrib (const std::string& name)
594 {
595 std::vector<std::string> const & int_names = GetIntSoANames();
596 auto const pos = std::find(int_names.begin(), int_names.end(), name);
597 return (pos != int_names.end());
598 }
599
600protected:
602
603 amrex::ParticleReal charge;
604 amrex::ParticleReal m_mass;
606
607 // Controls boundaries for particles exiting the domain
609
612
615
616 bool do_not_push = false;
618
619 // Whether to allow particles outside of the simulation domain to be
620 // initialized when they enter the domain.
621 // This is currently required because continuous injection does not
622 // support all features allowed by direct injection.
624
637 std::string physical_element;
638
640
643
644#ifdef WARPX_QED
645 //Species can receive a shared pointer to a QED engine (species for
646 //which this is relevant should override these functions)
647 virtual void
648 set_breit_wheeler_engine_ptr(const std::shared_ptr<BreitWheelerEngine>&){}
649 virtual void
650 set_quantum_sync_engine_ptr(const std::shared_ptr<QuantumSynchrotronEngine>&){}
651
658
659#endif
664
665 // local containers for mass matrix deposit used by implicit solvers
675
676public:
677 using PairIndex = std::pair<int, int>;
678
680
681 // By default this returns false, can be overridden in PysicalParticleContainer
682 virtual bool getTemperatureDepositionFlag () const noexcept {return false;}
683
684private:
685 void particlePostLocate(ParticleType& p, const amrex::ParticleLocData& pld, int lev) override;
686
687};
688
689#endif
Array4< int const > offset
PhysicalSpecies
Definition SpeciesPhysicalProperties.H:16
@ unspecified
Definition SpeciesPhysicalProperties.H:17
PushType
Particle push scheme.
Definition WarpXAlgorithmSelection.H:170
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
Definition BreitWheelerEngineWrapper.H:294
Definition PlasmaInjector.H:39
Definition QuantumSyncEngineWrapper.H:273
Definition WarpXParticleContainer.H:117
WarpXParIter(ContainerType &pc, int level)
Definition WarpXParticleContainer.cpp:82
RealVector & GetAttribs(const std::string &name)
Definition WarpXParticleContainer.H:160
const RealVector & GetAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:155
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition WarpXParticleContainer.H:130
const IntVector & GetiAttribs(int comp) const
Definition WarpXParticleContainer.H:145
const IntVector & GetiAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:165
const RealVector & GetAttribs(int comp) const
Definition WarpXParticleContainer.H:135
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition WarpXParticleContainer.H:125
IntVector & GetiAttribs(const std::string &name)
Definition WarpXParticleContainer.H:170
RealVector & GetAttribs(int comp)
Definition WarpXParticleContainer.H:140
IntVector & GetiAttribs(int comp)
Definition WarpXParticleContainer.H:150
amrex::Real self_fields_required_precision
Definition WarpXParticleContainer.H:504
amrex::ParticleReal sumParticleCharge(bool local=false) const
Definition WarpXParticleContainer.cpp:2150
void DepositTotalNGPTemperature(amrex::MultiFab *temperature, const int lev)
Definition WarpXParticleContainer.cpp:1821
int do_continuous_injection
Definition WarpXParticleContainer.H:623
amrex::Vector< amrex::FArrayBox > local_Szy
Definition WarpXParticleContainer.H:673
virtual amrex::Vector< amrex::Parser * > getUserIntAttribParser() const
Definition WarpXParticleContainer.H:580
amrex::Vector< amrex::FArrayBox > local_Sxy
Definition WarpXParticleContainer.H:667
~WarpXParticleContainer() override=default
bool AmIA() const noexcept
Definition WarpXParticleContainer.H:553
virtual void DefaultInitializeRuntimeAttributes(typename ContainerLike< amrex::PinnedArenaAllocator >::ParticleTileType &pinned_tile, int n_external_attr_real, int n_external_attr_int)=0
Virtual method to initialize runtime attributes. Must be overriden by each derived class.
amrex::Vector< amrex::FArrayBox > local_Syx
Definition WarpXParticleContainer.H:669
amrex::Vector< amrex::FArrayBox > local_Szz
Definition WarpXParticleContainer.H:674
amrex::Vector< amrex::ParticleReal > m_B_external_particle
Definition WarpXParticleContainer.H:510
amrex::Vector< amrex::FArrayBox > local_Sxx
Definition WarpXParticleContainer.H:666
bool m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition WarpXParticleContainer.H:614
virtual void AllocData()
Definition WarpXParticleContainer.cpp:171
void defineAllParticleTiles() noexcept
Definition WarpXParticleContainer.cpp:2345
std::pair< amrex::ParticleReal, amrex::ParticleReal > sumParticleWeightAndEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2084
virtual void PostRestart()=0
void particlePostLocate(ParticleType &p, const amrex::ParticleLocData &pld, int lev) override
Definition WarpXParticleContainer.cpp:2360
virtual void ReadHeader(std::istream &is)=0
int self_fields_max_iters
Definition WarpXParticleContainer.H:506
void DepositNumberDensity(amrex::MultiFab *number_density, const int lev)
Definition WarpXParticleContainer.cpp:1954
amrex::Real m_current_injection_position
Current injection position.
Definition WarpXParticleContainer.H:514
int species_id
Definition WarpXParticleContainer.H:601
virtual bool getTemperatureDepositionFlag() const noexcept
Definition WarpXParticleContainer.H:682
std::string m_qed_breit_wheeler_ele_product_name
Definition WarpXParticleContainer.H:653
virtual void WriteHeader(std::ostream &os) const =0
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition WarpXParticleContainer.H:634
int do_adk_correction
Definition WarpXParticleContainer.H:626
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition WarpXParticleContainer.H:632
PhysicalSpecies physical_species
Definition WarpXParticleContainer.H:605
bool do_not_push
Definition WarpXParticleContainer.H:616
std::unique_ptr< amrex::MultiFab > GetDebyeLength(int lev)
Definition WarpXParticleContainer.cpp:2029
bool HasiAttrib(const std::string &name)
Definition WarpXParticleContainer.H:593
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition WarpXParticleContainer.H:429
virtual std::vector< std::string > getUserIntAttribs() const
Definition WarpXParticleContainer.H:576
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition WarpXParticleContainer.H:558
int m_qed_quantum_sync_phot_product
Definition WarpXParticleContainer.H:656
amrex::ParticleReal maxParticleVelocity(bool local=false)
Definition WarpXParticleContainer.cpp:2241
std::unique_ptr< amrex::MultiFab > GetAverageNGPTemperature(int lev)
Definition WarpXParticleContainer.cpp:1930
virtual void InitIonizationModule()
Definition WarpXParticleContainer.H:224
virtual void InitData()=0
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition WarpXParticleContainer.H:633
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition WarpXParticleContainer.H:523
amrex::Vector< amrex::FArrayBox > local_Syy
Definition WarpXParticleContainer.H:670
int ionization_initial_level
Definition WarpXParticleContainer.H:630
virtual QuantumSynchrotronEngine * get_quantum_sync_engine_ptr() const
Definition WarpXParticleContainer.H:586
amrex::Real self_fields_absolute_tolerance
Definition WarpXParticleContainer.H:505
amrex::Vector< amrex::FArrayBox > local_jx
Definition WarpXParticleContainer.H:661
void setDoNotDeposit(int flag)
Definition WarpXParticleContainer.H:591
virtual void set_breit_wheeler_engine_ptr(const std::shared_ptr< BreitWheelerEngine > &)
Definition WarpXParticleContainer.H:648
amrex::Vector< amrex::FArrayBox > local_Syz
Definition WarpXParticleContainer.H:671
void DepositCurrent(ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time)
Deposit current density.
Definition WarpXParticleContainer.cpp:1332
virtual void UpdateAntennaPosition(const amrex::Real)
Update antenna position for continuous injection of lasers in a boosted frame. Empty function for con...
Definition WarpXParticleContainer.H:424
virtual std::vector< std::string > getUserRealAttribs() const
Definition WarpXParticleContainer.H:578
bool doContinuousInjection() const
Definition WarpXParticleContainer.H:426
bool GetDoBackTransformedParticles() const
Definition WarpXParticleContainer.H:527
amrex::StructOfArrays< DiagIdx::nattribs, 0 > DiagnosticParticleData
Definition WarpXParticleContainer.H:206
amrex::Vector< amrex::FArrayBox > local_jy
Definition WarpXParticleContainer.H:662
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition WarpXParticleContainer.cpp:1791
static void ReadParameters()
Definition WarpXParticleContainer.cpp:158
int getIonizationInitialLevel() const noexcept
Definition WarpXParticleContainer.H:679
virtual BreitWheelerEngine * get_breit_wheeler_engine_ptr() const
Definition WarpXParticleContainer.H:585
amrex::Gpu::DeviceVector< amrex::Real > adk_correction_factors
Definition WarpXParticleContainer.H:636
int ion_atomic_number
Definition WarpXParticleContainer.H:629
bool m_do_back_transformed_particles
Definition WarpXParticleContainer.H:642
amrex::Vector< amrex::FArrayBox > local_jz
Definition WarpXParticleContainer.H:663
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition WarpXParticleContainer.H:631
amrex::ParticleReal getCharge() const
Definition WarpXParticleContainer.H:531
std::unique_ptr< amrex::MultiFab > GetNumberDensity(int lev)
Definition WarpXParticleContainer.cpp:2013
amrex::Vector< amrex::FArrayBox > local_Szx
Definition WarpXParticleContainer.H:672
virtual void DepositTemperature(WarpXParIter &pti, RealVector const &wp, RealVector const &uxp, RealVector const &uyp, RealVector const &uzp, amrex::MultiFab *const Tx, amrex::MultiFab *const Ty, amrex::MultiFab *const Tz, long const offset, long const np_to_deposit, int const thread_num, const int lev, int const depos_lev, amrex::Real const relative_time, PushType push_type, const warpx::particles::deposition::TemperatureDepositionType type, const warpx::particles::deposition::TemperatureDepositionPass pass)
Definition WarpXParticleContainer.H:355
WarpXParticleContainer & operator=(WarpXParticleContainer &&)=default
void ApplyBoundaryConditions()
Apply particle BC.
Definition WarpXParticleContainer.cpp:2382
virtual bool has_breit_wheeler() const
Definition WarpXParticleContainer.H:540
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
std::string m_qed_breit_wheeler_pos_product_name
Definition WarpXParticleContainer.H:655
virtual void Evolve(ablastr::fields::MultiFabRegister &fields, int lev, const std::string &current_fp_string, amrex::Real t, amrex::Real dt, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false, ImplicitOptions const *implicit_options=nullptr)=0
std::string m_qed_quantum_sync_phot_product_name
Definition WarpXParticleContainer.H:657
virtual void ContinuousInjection(const amrex::RealBox &)
Definition WarpXParticleContainer.H:418
WarpXParticleContainer & operator=(const WarpXParticleContainer &)=delete
ParticleBoundaries m_boundary_conditions
Definition WarpXParticleContainer.H:608
virtual void resample(const amrex::Vector< amrex::Geometry > &, const int, bool)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition WarpXParticleContainer.H:566
int m_qed_breit_wheeler_pos_product
Definition WarpXParticleContainer.H:654
int ionization_product
Definition WarpXParticleContainer.H:627
void AddNParticles(int lev, long n, amrex::Vector< amrex::ParticleReal > const &x, amrex::Vector< amrex::ParticleReal > const &y, amrex::Vector< amrex::ParticleReal > const &z, amrex::Vector< amrex::ParticleReal > const &ux, amrex::Vector< amrex::ParticleReal > const &uy, amrex::Vector< amrex::ParticleReal > const &uz, int nattr_real, amrex::Vector< amrex::Vector< amrex::ParticleReal > > const &attr_real, int nattr_int, amrex::Vector< amrex::Vector< int > > const &attr_int, int uniqueparticles, amrex::Long id=-1)
Adds n particles to the simulation.
Definition WarpXParticleContainer.cpp:180
int m_qed_breit_wheeler_ele_product
Definition WarpXParticleContainer.H:652
bool do_splitting
Definition WarpXParticleContainer.H:501
virtual void set_quantum_sync_engine_ptr(const std::shared_ptr< QuantumSynchrotronEngine > &)
Definition WarpXParticleContainer.H:650
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(bool local=false)
Definition WarpXParticleContainer.cpp:2155
virtual void AccumulateVelocitiesAndComputeTemperature(ablastr::fields::MultiLevelVectorField const &T_vf, amrex::Real relative_time)
Accumulate velocity moments for matched temperature deposition using particle shapes.
Definition WarpXParticleContainer.H:350
bool initialize_self_fields
Definition WarpXParticleContainer.H:503
int self_fields_verbosity
Definition WarpXParticleContainer.H:507
virtual bool has_quantum_sync() const
Definition WarpXParticleContainer.H:539
WarpXParticleContainer(amrex::AmrCore *amr_core, int ispecies)
Definition WarpXParticleContainer.cpp:94
std::string physical_element
Definition WarpXParticleContainer.H:637
virtual void DepositCurrentAndMassMatrices(WarpXParIter &pti, const RealVector &wp, const RealVector &uxp, const RealVector &uyp, const RealVector &uzp, amrex::MultiFab *jx, amrex::MultiFab *jy, amrex::MultiFab *jz, amrex::MultiFab *Sxx, amrex::MultiFab *Sxy, amrex::MultiFab *Sxz, amrex::MultiFab *Syx, amrex::MultiFab *Syy, amrex::MultiFab *Syz, amrex::MultiFab *Szx, amrex::MultiFab *Szy, amrex::MultiFab *Szz, const amrex::FArrayBox *bxfab, const amrex::FArrayBox *byfab, const amrex::FArrayBox *bzfab, long offset, long np_to_deposit, int thread_num, int lev, int depos_lev, amrex::Real dt)
Definition WarpXParticleContainer.cpp:933
void deleteInvalidParticles()
Definition WarpXParticleContainer.cpp:352
int split_type
Definition WarpXParticleContainer.H:517
virtual amrex::Vector< amrex::Parser * > getUserRealAttribParser() const
Definition WarpXParticleContainer.H:582
amrex::Vector< amrex::FArrayBox > local_Sxz
Definition WarpXParticleContainer.H:668
amrex::ParticleReal sumParticleEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2138
void PushX(amrex::Real dt)
Definition WarpXParticleContainer.cpp:2275
WarpXParticleContainer(WarpXParticleContainer &&)=default
virtual PlasmaInjector * GetPlasmaInjector(const int)
Definition WarpXParticleContainer.H:230
friend MultiParticleContainer
Definition WarpXParticleContainer.H:202
amrex::Vector< amrex::ParticleReal > m_E_external_particle
Definition WarpXParticleContainer.H:511
std::string ionization_product_name
Definition WarpXParticleContainer.H:628
amrex::ParticleReal m_mass
Definition WarpXParticleContainer.H:604
int getSpeciesId() const
Definition WarpXParticleContainer.H:431
int DoFieldIonization() const
Definition WarpXParticleContainer.H:535
int do_not_deposit
Definition WarpXParticleContainer.H:502
void setDoNotPush(bool flag)
Definition WarpXParticleContainer.H:589
WarpXParticleContainer(const WarpXParticleContainer &)=delete
amrex::ParticleReal getMass() const
Definition WarpXParticleContainer.H:533
void DepositCharge(const ablastr::fields::MultiLevelScalarField &rho, bool local=false, bool reset=false, bool apply_boundary_and_scale_volume=false, bool interpolate_across_levels=true, int icomp=0)
Deposit charge density.
Definition WarpXParticleContainer.cpp:1682
void setDoNotGather(int flag)
Definition WarpXParticleContainer.H:590
amrex::ParticleReal sumParticleWeight(bool local=false) const
Definition WarpXParticleContainer.cpp:2144
amrex::Vector< std::map< std::pair< int, int >, DiagnosticParticleData > > DiagnosticParticles
Definition WarpXParticleContainer.H:211
int DoQED() const
Definition WarpXParticleContainer.H:542
int do_resampling
Definition WarpXParticleContainer.H:639
int do_not_gather
Definition WarpXParticleContainer.H:617
static void BackwardCompatibility()
bool m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid
Definition WarpXParticleContainer.H:611
amrex::Vector< amrex::FArrayBox > local_rho
Definition WarpXParticleContainer.H:660
std::pair< int, int > PairIndex
Definition WarpXParticleContainer.H:677
int do_field_ionization
Definition WarpXParticleContainer.H:625
amrex::ParticleReal charge
Definition WarpXParticleContainer.H:603
SoARef GetStructOfArrays() const
ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor > ContainerType
ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
Definition EffectivePotentialPoissonSolver.H:63
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:200
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:208
PODVector< T, ArenaAllocator< T > > DeviceVector
ParIter_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParIterSoA
ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParticleContainerPureSoA
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition SpeciesPhysicalProperties.cpp:295
TemperatureDepositionType
Definition TemperatureDepositionTypes.H:20
TemperatureDepositionPass
Definition TemperatureDepositionTypes.H:25
Definition ImplicitOptions.H:7
Definition WarpXParticleContainer.H:106
@ nattribs
the number of attributes above (always last)
Definition WarpXParticleContainer.H:109
static constexpr std::initializer_list< char const * > names
Definition WarpXParticleContainer.H:112
Definition WarpXParticleContainer.H:58
static constexpr auto names
component names
Definition WarpXParticleContainer.H:81
@ theta
RZ needs all three position components.
Definition WarpXParticleContainer.H:72
@ nattribs
number of compile-time attributes
Definition WarpXParticleContainer.H:77
@ x
Definition WarpXParticleContainer.H:61
@ uz
Definition WarpXParticleContainer.H:70
@ w
weight
Definition WarpXParticleContainer.H:69
@ uy
Definition WarpXParticleContainer.H:70
@ z
Definition WarpXParticleContainer.H:67
@ ux
Definition WarpXParticleContainer.H:70
Definition ParticleBoundaries.H:42
Definition MultiFabRegister.H:262