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
64struct PIdx
65{
66#if defined(WARPX_DIM_1D_Z)
67 enum { z , w , ux , uy , uz, nattribs};
68 static constexpr auto names = {"z", "w", "ux", "uy", "uz"};
69#elif defined(WARPX_DIM_XZ)
70 enum { x , z , w , ux , uy , uz, nattribs};
71 static constexpr auto names = {"x", "z", "w", "ux", "uy", "uz"};
72#elif defined(WARPX_DIM_RZ)
73 enum { r , z , w , ux , uy , uz , theta, nattribs};
74 static constexpr auto names = {"r", "z", "w", "ux", "uy", "uz", "theta"};
75#elif defined(WARPX_DIM_RCYLINDER)
76 enum { r , w , ux , uy , uz , theta, nattribs};
77 static constexpr auto names = {"r", "w", "ux", "uy", "uz", "theta"};
78#elif defined(WARPX_DIM_RSPHERE)
79 enum { r , w , ux , uy , uz , theta , phi, nattribs};
80 static constexpr auto names = {"r", "w", "ux", "uy", "uz", "theta", "phi"};
81#elif defined(WARPX_DIM_3D)
82 enum { x , y, z, w, ux, uy, uz, nattribs};
83 static constexpr auto names = {"x", "y", "z", "w", "ux", "uy", "uz"};
84#else
85 #error WarpX dimension is not correctly set!
86#endif
87
88 static_assert(names.size() == nattribs);
89};
90
91
92struct IntIdx {
93 enum
94 {
96 };
97
98 static constexpr std::initializer_list<char const *> names = {};
99};
100
102{
103 enum {
104 w = 0,
105 x, y, z, ux, uy, uz,
107 };
108};
109
111 : public amrex::ParIterSoA<PIdx::nattribs, 0, amrex::PolymorphicArenaAllocator>
112{
113public:
115
116 WarpXParIter (ContainerType& pc, int level);
117
118 WarpXParIter (ContainerType& pc, int level, amrex::MFItInfo& info);
119
120 [[nodiscard]] const std::array<RealVector, PIdx::nattribs>& GetAttribs () const
121 {
122 return GetStructOfArrays().GetRealData();
123 }
124
125 [[nodiscard]] std::array<RealVector, PIdx::nattribs>& GetAttribs ()
126 {
127 return GetStructOfArrays().GetRealData();
128 }
129
130 [[nodiscard]] const RealVector& GetAttribs (int comp) const
131 {
132 return GetStructOfArrays().GetRealData(comp);
133 }
134
135 [[nodiscard]] RealVector& GetAttribs (int comp)
136 {
137 return GetStructOfArrays().GetRealData(comp);
138 }
139
140 [[nodiscard]] const IntVector& GetiAttribs (int comp) const
141 {
142 return GetStructOfArrays().GetIntData(comp);
143 }
144
145 [[nodiscard]] IntVector& GetiAttribs (int comp)
146 {
147 return GetStructOfArrays().GetIntData(comp);
148 }
149
150 [[nodiscard]] const RealVector& GetAttribs (const std::string& name) const
151 {
152 return GetStructOfArrays().GetRealData(name);
153 }
154
155 [[nodiscard]] RealVector& GetAttribs (const std::string& name)
156 {
157 return GetStructOfArrays().GetRealData(name);
158 }
159
160 [[nodiscard]] const IntVector& GetiAttribs (const std::string& name) const
161 {
162 return GetStructOfArrays().GetIntData(name);
163 }
164
165 [[nodiscard]] IntVector& GetiAttribs (const std::string& name)
166 {
167 return GetStructOfArrays().GetIntData(name);
168 }
169};
170
194 : public amrex::ParticleContainerPureSoA<PIdx::nattribs, 0, amrex::PolymorphicArenaAllocator>
195{
196public:
198
200
201 // amrex::StructOfArrays with DiagIdx::nattribs amrex::ParticleReal components
202 // and 0 int components for the particle data.
204 // DiagnosticParticles is a vector, with one element per MR level.
205 // DiagnosticParticles[lev] is typically a key-value pair where the key is
206 // a pair [grid_index, tile_index], and the value is the corresponding
207 // DiagnosticParticleData (see above) on this tile.
209
210 WarpXParticleContainer (amrex::AmrCore* amr_core, int ispecies, const std::string& name);
211 ~WarpXParticleContainer() override = default;
212
213 // Move and copy operations
218
219 virtual void InitData () = 0;
220
221 virtual void InitIonizationModule () {}
222
223 /*
224 * \brief Virtual function that returns a pointer to the plasma injector,
225 * for derived classes that define one (PhysicalParticleContainer).
226 */
227 virtual PlasmaInjector* GetPlasmaInjector (const int /*i*/) { return nullptr; }
228
233 int lev,
234 const std::string& current_fp_string,
235 amrex::Real t, amrex::Real dt, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false,
236 PositionPushType position_push_type=PositionPushType::Full,
237 MomentumPushType momentum_push_type=MomentumPushType::Full,
238 ImplicitOptions const * implicit_options = nullptr) = 0;
239
254 virtual void FinishImplicitParticleUpdate (
256 int lev, amrex::Real t, amrex::Real dt);
257
262 int lev,
263 amrex::Real dt)
264 {
266 }
267
268 virtual void PostRestart () = 0;
269
270 virtual void AllocData ();
271
278 int n_external_attr_real,
279 int n_external_attr_int) = 0;
280
286 void PushX ( amrex::Real dt);
287 void PushX (int lev, amrex::Real dt);
288
292 virtual void PushP (int lev, amrex::Real dt,
293 const amrex::MultiFab& Ex,
294 const amrex::MultiFab& Ey,
295 const amrex::MultiFab& Ez,
296 const amrex::MultiFab& Bx,
297 const amrex::MultiFab& By,
298 const amrex::MultiFab& Bz,
299 MomentumPushType momentum_push_type = MomentumPushType::Full) = 0;
300
315 amrex::Real dt, amrex::Real relative_time,
316 PushType push_type = PushType::Explicit);
317
329 void DepositCurrent (const std::string& mf_name, int lev,
330 amrex::Real dt, amrex::Real relative_time);
331
344 bool local = false, bool reset = false,
345 bool apply_boundary_and_scale_volume = false,
346 bool interpolate_across_levels = true,
347 int icomp = 0);
348 void DepositCharge (amrex::MultiFab* rho, int lev,
349 bool local = false, bool reset = false,
350 bool apply_boundary_and_scale_volume = false,
351 int icomp = 0);
352
353 std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
354
355 virtual void DepositCharge (WarpXParIter& pti,
356 RealVector const & wp,
357 const int* ion_lev,
358 amrex::MultiFab* rho,
359 int icomp,
360 long offset,
361 long np_to_deposit,
362 int thread_num,
363 int lev,
364 int depos_lev);
365
366 virtual void DepositCurrent (WarpXParIter& pti,
367 RealVector const & wp,
368 RealVector const & uxp,
369 RealVector const & uyp,
370 RealVector const & uzp,
371 int const* ion_lev,
372 amrex::MultiFab* jx,
373 amrex::MultiFab* jy,
374 amrex::MultiFab* jz,
375 long offset,
376 long np_to_deposit,
377 int thread_num,
378 int lev,
379 int depos_lev,
380 amrex::Real dt,
381 amrex::Real relative_time,
382 PushType push_type);
394 [[maybe_unused]]ablastr::fields::MultiLevelVectorField const & T_vf,
395 [[maybe_unused]]amrex::Real relative_time)
396 {}
397
398 virtual void DepositTemperature (
399 [[maybe_unused]]WarpXParIter& pti,
400 [[maybe_unused]]RealVector const & wp,
401 [[maybe_unused]]RealVector const & uxp,
402 [[maybe_unused]]RealVector const & uyp,
403 [[maybe_unused]]RealVector const & uzp,
404 [[maybe_unused]]amrex::MultiFab * const Tx,
405 [[maybe_unused]]amrex::MultiFab * const Ty,
406 [[maybe_unused]]amrex::MultiFab * const Tz,
407 [[maybe_unused]]long const offset,
408 [[maybe_unused]]long const np_to_deposit,
409 [[maybe_unused]]int const thread_num,
410 [[maybe_unused]]const int lev,
411 [[maybe_unused]]int const depos_lev,
412 [[maybe_unused]]amrex::Real const relative_time,
413 [[maybe_unused]]PushType push_type,
416 {}
417
418 void DepositTotalNGPTemperature (int lev);
419 void CalculateNuei(amrex::MultiFab & species_nuei,
420 WarpXParticleContainer const & electron_species, int lev);
421 std::unique_ptr<amrex::MultiFab> GetDebyeLength (int lev);
422
423 void DepositNumberDensity (amrex::MultiFab* number_density, int lev);
424 std::unique_ptr<amrex::MultiFab> GetNumberDensity (int lev);
425
426 std::unique_ptr<amrex::MultiFab> GetPlasmaFrequency (int lev);
427
429 const RealVector& wp,
430 const RealVector& uxp,
431 const RealVector& uyp,
432 const RealVector& uzp,
433 amrex::MultiFab* Sxx,
434 amrex::MultiFab* Sxy,
435 amrex::MultiFab* Sxz,
436 amrex::MultiFab* Syx,
437 amrex::MultiFab* Syy,
438 amrex::MultiFab* Syz,
439 amrex::MultiFab* Szx,
440 amrex::MultiFab* Szy,
441 amrex::MultiFab* Szz,
442 const amrex::FArrayBox* bxfab,
443 const amrex::FArrayBox* byfab,
444 const amrex::FArrayBox* bzfab,
445 long offset,
446 long np_to_deposit,
447 int thread_num,
448 int lev,
449 int depos_lev,
450 amrex::Real dt);
451
452 // If particles start outside of the domain, ContinuousInjection
453 // makes sure that they are initialized when they enter the domain, and
454 // NOT before. Virtual function, overriden by derived classes.
455 // Current status:
456 // PhysicalParticleContainer: implemented.
457 // LaserParticleContainer: implemented.
458 // RigidInjectedParticleContainer: not implemented.
459 virtual void ContinuousInjection(const amrex::RealBox& /*injection_box*/) {}
460
465 virtual void UpdateAntennaPosition(const amrex::Real /*dt*/) {}
466
468
469 // Inject a continuous flux of particles from a defined plane
470 virtual void ContinuousFluxInjection(amrex::Real /*t*/, amrex::Real /*dt*/) {}
471
472 int getSpeciesId() const {return species_id;}
473
478 std::pair<amrex::ParticleReal, amrex::ParticleReal> sumParticleWeightAndEnergy (bool local = false) const;
479 amrex::ParticleReal sumParticleCharge (bool local = false) const;
480 amrex::ParticleReal sumParticleWeight (bool local = false) const;
481 amrex::ParticleReal sumParticleEnergy (bool local = false) const;
482
483 std::array<amrex::ParticleReal, 3> meanParticleVelocity(bool local = false);
484
485 amrex::ParticleReal maxParticleDtInv(bool local = false);
486
497 void TransformMomentumToCurvilinear (bool forward);
498
523 void AddNParticles (int lev, long n,
530 int nattr_real,
532 int nattr_int, amrex::Vector<amrex::Vector<int>> const & attr_int,
533 int uniqueparticles, amrex::Long id=-1);
534
541
542 virtual void ReadHeader (std::istream& is) = 0;
543
544 virtual void WriteHeader (std::ostream& os) const = 0;
545
546 static void ReadParameters ();
547
548 static void BackwardCompatibility ();
549
553
554 bool do_splitting = false;
555
562
563 // External fields added to particle fields.
566
569
570 // split along diagonals (0) or axes (1)
571 int split_type = 0;
572
577 void SetDoBackTransformedParticles (const bool do_back_transformed_particles) {
578 m_do_back_transformed_particles = do_back_transformed_particles;
579 }
580
584
586
588
596
598
599#ifdef WARPX_QED
600 //Species for which QED effects are relevant should override these methods
601 virtual bool has_quantum_sync() const {return false;}
602 virtual bool has_breit_wheeler() const {return false;}
603 virtual bool has_virtual_photons() const {return false;}
604 virtual bool has_virtual_photons_beam_size_effect() const {return false;}
605 virtual int getVirtualPhotonSpeciesIndex() const { return -1; }
606 int DoQED() const { return has_quantum_sync() || has_breit_wheeler(); }
607#else
608 int DoQED() const { return false; }
609#endif
610
611 /* \brief This function tests if the current species
612 * is of a given PhysicalSpecies (specified as a template parameter).
613 * @tparam PhysSpec the PhysicalSpecies to test against
614 * @return the result of the test
615 */
616 template<PhysicalSpecies PhysSpec>
617 bool AmIA () const noexcept {return (physical_species == PhysSpec);}
618
623
630 virtual void resample (const amrex::Vector<amrex::Geometry>& /*geom*/, const int /*timestep*/, bool /*verbose*/) {}
631
638 void defineAllParticleTiles () noexcept;
639
640 virtual std::vector<std::string> getUserIntAttribs () const { return std::vector<std::string>{}; }
641
642 virtual std::vector<std::string> getUserRealAttribs () const { return std::vector<std::string>{}; }
643
645
647
648#ifdef WARPX_QED
649 virtual BreitWheelerEngine* get_breit_wheeler_engine_ptr () const {return nullptr;}
650 virtual QuantumSynchrotronEngine* get_quantum_sync_engine_ptr () const {return nullptr;}
651#endif
652
653 void setDoNotPush (bool flag) { do_not_push = flag; }
654 void setDoNotGather (int flag) { do_not_gather = flag; }
655 void setDoNotDeposit (int flag) { do_not_deposit = flag; }
656
657 bool HasiAttrib (const std::string& name)
658 {
659 std::vector<std::string> const & int_names = GetIntSoANames();
660 auto const pos = std::find(int_names.begin(), int_names.end(), name);
661 return (pos != int_names.end());
662 }
663
664 std::string const & getName() { return species_name; }
665
666protected:
668 std::string species_name;
669
673
674 // Controls boundaries for particles exiting the domain
676
677 // Controls whether particle trajectoris are cropped when particles
678 // cross a PEC boundary
680
683
686
687 bool do_not_push = false;
689
690 // Whether to allow particles outside of the simulation domain to be
691 // initialized when they enter the domain.
692 // This is currently required because continuous injection does not
693 // support all features allowed by direct injection.
695
708 std::string physical_element;
709
711
714
715#ifdef WARPX_QED
716 //Species can receive a shared pointer to a QED engine (species for
717 //which this is relevant should override these functions)
718 virtual void
719 set_breit_wheeler_engine_ptr(const std::shared_ptr<BreitWheelerEngine>&){}
720 virtual void
721 set_quantum_sync_engine_ptr(const std::shared_ptr<QuantumSynchrotronEngine>&){}
722
732#endif
737
738 // local containers for mass matrix deposit used by implicit solvers
748
749public:
750
752
753 // By default this returns false, can be overridden in PysicalParticleContainer
754 virtual bool getTemperatureDepositionFlag () const noexcept {return false;}
755
756private:
757 void particlePostLocate(ParticleType& p, const amrex::ParticleLocData& pld, int lev) override;
758
759};
760
761#endif
Array4< int const > offset
PhysicalSpecies
Definition SpeciesPhysicalProperties.H:16
@ unspecified
Definition SpeciesPhysicalProperties.H:17
PushType
Particle push scheme.
Definition WarpXAlgorithmSelection.H:170
@ Explicit
Standard leap-frog scheme.
Definition WarpXAlgorithmSelection.H:170
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:178
@ Full
Definition WarpXAlgorithmSelection.H:178
MomentumPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:185
@ Full
Definition WarpXAlgorithmSelection.H:185
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
Definition BreitWheelerEngineWrapper.H:294
Definition PlasmaInjector.H:39
Definition QuantumSyncEngineWrapper.H:274
Definition WarpXParticleContainer.H:112
WarpXParIter(ContainerType &pc, int level)
Definition WarpXParticleContainer.cpp:85
RealVector & GetAttribs(const std::string &name)
Definition WarpXParticleContainer.H:155
const RealVector & GetAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:150
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition WarpXParticleContainer.H:125
const IntVector & GetiAttribs(int comp) const
Definition WarpXParticleContainer.H:140
const IntVector & GetiAttribs(const std::string &name) const
Definition WarpXParticleContainer.H:160
const RealVector & GetAttribs(int comp) const
Definition WarpXParticleContainer.H:130
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition WarpXParticleContainer.H:120
IntVector & GetiAttribs(const std::string &name)
Definition WarpXParticleContainer.H:165
RealVector & GetAttribs(int comp)
Definition WarpXParticleContainer.H:135
IntVector & GetiAttribs(int comp)
Definition WarpXParticleContainer.H:145
Definition WarpXParticleContainer.H:195
amrex::ParticleReal maxParticleDtInv(bool local=false)
Definition WarpXParticleContainer.cpp:2659
amrex::Real self_fields_required_precision
Definition WarpXParticleContainer.H:558
amrex::ParticleReal sumParticleCharge(bool local=false) const
Definition WarpXParticleContainer.cpp:2568
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, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full, ImplicitOptions const *implicit_options=nullptr)=0
Pure virtual function to advance particles (typically by one time step).
int do_continuous_injection
Definition WarpXParticleContainer.H:694
amrex::Vector< amrex::FArrayBox > local_Szy
Definition WarpXParticleContainer.H:746
virtual amrex::Vector< amrex::Parser * > getUserIntAttribParser() const
Definition WarpXParticleContainer.H:644
amrex::Vector< amrex::FArrayBox > local_Sxy
Definition WarpXParticleContainer.H:740
void DepositTotalNGPTemperature(int lev)
Definition WarpXParticleContainer.cpp:1917
~WarpXParticleContainer() override=default
WarpXParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition WarpXParticleContainer.cpp:97
bool AmIA() const noexcept
Definition WarpXParticleContainer.H:617
amrex::Vector< amrex::FArrayBox > local_Syx
Definition WarpXParticleContainer.H:742
amrex::Vector< amrex::FArrayBox > local_Szz
Definition WarpXParticleContainer.H:747
amrex::Vector< amrex::ParticleReal > m_B_external_particle
Definition WarpXParticleContainer.H:564
amrex::ParticleContainerPureSoA< PIdx::nattribs, 0, amrex::PolymorphicArenaAllocator > Base
Definition WarpXParticleContainer.H:199
void CalculateNuei(amrex::MultiFab &species_nuei, WarpXParticleContainer const &electron_species, int lev)
Definition WarpXParticleContainer.cpp:2251
amrex::Vector< amrex::FArrayBox > local_Sxx
Definition WarpXParticleContainer.H:739
bool m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition WarpXParticleContainer.H:685
virtual void AllocData()
Definition WarpXParticleContainer.cpp:174
void defineAllParticleTiles() noexcept
Definition WarpXParticleContainer.cpp:2892
std::pair< amrex::ParticleReal, amrex::ParticleReal > sumParticleWeightAndEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2502
virtual void PostRestart()=0
void particlePostLocate(ParticleType &p, const amrex::ParticleLocData &pld, int lev) override
Definition WarpXParticleContainer.cpp:2907
virtual void ReadHeader(std::istream &is)=0
int self_fields_max_iters
Definition WarpXParticleContainer.H:560
amrex::Real m_current_injection_position
Current injection position.
Definition WarpXParticleContainer.H:568
int species_id
Definition WarpXParticleContainer.H:667
virtual bool getTemperatureDepositionFlag() const noexcept
Definition WarpXParticleContainer.H:754
void DepositCurrent(ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time, PushType push_type=PushType::Explicit)
Deposit current density.
Definition WarpXParticleContainer.cpp:1401
std::string m_qed_breit_wheeler_ele_product_name
Definition WarpXParticleContainer.H:724
virtual void WriteHeader(std::ostream &os) const =0
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition WarpXParticleContainer.H:705
int do_adk_correction
Definition WarpXParticleContainer.H:697
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition WarpXParticleContainer.H:703
PhysicalSpecies physical_species
Definition WarpXParticleContainer.H:672
amrex::ParticleReal m_charge
Definition WarpXParticleContainer.H:670
bool do_not_push
Definition WarpXParticleContainer.H:687
std::unique_ptr< amrex::MultiFab > GetPlasmaFrequency(int lev)
Definition WarpXParticleContainer.cpp:2458
std::unique_ptr< amrex::MultiFab > GetDebyeLength(int lev)
Definition WarpXParticleContainer.cpp:2152
bool HasiAttrib(const std::string &name)
Definition WarpXParticleContainer.H:657
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition WarpXParticleContainer.H:470
virtual std::vector< std::string > getUserIntAttribs() const
Definition WarpXParticleContainer.H:640
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition WarpXParticleContainer.H:622
int m_qed_quantum_sync_phot_product
Definition WarpXParticleContainer.H:727
virtual void InitIonizationModule()
Definition WarpXParticleContainer.H:221
virtual void InitData()=0
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition WarpXParticleContainer.H:704
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition WarpXParticleContainer.H:577
virtual void DefaultInitializeRuntimeAttributes(typename ContainerLike< amrex::PolymorphicArenaAllocator >::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_Syy
Definition WarpXParticleContainer.H:743
int ionization_initial_level
Definition WarpXParticleContainer.H:701
virtual QuantumSynchrotronEngine * get_quantum_sync_engine_ptr() const
Definition WarpXParticleContainer.H:650
amrex::Real self_fields_absolute_tolerance
Definition WarpXParticleContainer.H:559
amrex::Vector< amrex::FArrayBox > local_jx
Definition WarpXParticleContainer.H:734
std::string m_qed_virtual_photon_species_name
Definition WarpXParticleContainer.H:730
void setDoNotDeposit(int flag)
Definition WarpXParticleContainer.H:655
virtual void set_breit_wheeler_engine_ptr(const std::shared_ptr< BreitWheelerEngine > &)
Definition WarpXParticleContainer.H:719
amrex::Vector< amrex::FArrayBox > local_Syz
Definition WarpXParticleContainer.H:744
virtual bool has_virtual_photons() const
Definition WarpXParticleContainer.H:603
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:465
virtual std::vector< std::string > getUserRealAttribs() const
Definition WarpXParticleContainer.H:642
bool doContinuousInjection() const
Definition WarpXParticleContainer.H:467
bool GetDoBackTransformedParticles() const
Definition WarpXParticleContainer.H:581
amrex::StructOfArrays< DiagIdx::nattribs, 0 > DiagnosticParticleData
Definition WarpXParticleContainer.H:203
amrex::Vector< amrex::FArrayBox > local_jy
Definition WarpXParticleContainer.H:735
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition WarpXParticleContainer.cpp:1887
static void ReadParameters()
Definition WarpXParticleContainer.cpp:164
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, MomentumPushType momentum_push_type=MomentumPushType::Full)=0
int getIonizationInitialLevel() const noexcept
Definition WarpXParticleContainer.H:751
virtual BreitWheelerEngine * get_breit_wheeler_engine_ptr() const
Definition WarpXParticleContainer.H:649
amrex::Gpu::DeviceVector< amrex::Real > adk_correction_factors
Definition WarpXParticleContainer.H:707
int ion_atomic_number
Definition WarpXParticleContainer.H:700
bool m_do_back_transformed_particles
Definition WarpXParticleContainer.H:713
amrex::Vector< amrex::FArrayBox > local_jz
Definition WarpXParticleContainer.H:736
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition WarpXParticleContainer.H:702
amrex::ParticleReal getCharge() const
Definition WarpXParticleContainer.H:585
std::unique_ptr< amrex::MultiFab > GetNumberDensity(int lev)
Definition WarpXParticleContainer.cpp:2442
amrex::Vector< amrex::FArrayBox > local_Szx
Definition WarpXParticleContainer.H:745
bool m_crop_on_PEC_boundary
Definition WarpXParticleContainer.H:679
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:398
void TransformMomentumToCurvilinear(bool forward)
Map the momentum of the particles to and from the curvilinear frame. This is equivalent to mapping to...
Definition WarpXParticleContainer.cpp:2741
virtual void DepositMassMatrices(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt)
virtual function to deposit mass matrices for charged particles
Definition WarpXParticleContainer.H:261
WarpXParticleContainer & operator=(WarpXParticleContainer &&)=default
void ApplyBoundaryConditions()
Apply particle BC.
Definition WarpXParticleContainer.cpp:2929
virtual bool has_breit_wheeler() const
Definition WarpXParticleContainer.H:602
std::string m_qed_breit_wheeler_pos_product_name
Definition WarpXParticleContainer.H:726
virtual void FinishImplicitParticleUpdate(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real t, amrex::Real dt)
Finish the implicit particle update at the end of a time step.
Definition WarpXParticleContainer.cpp:2999
std::string m_qed_quantum_sync_phot_product_name
Definition WarpXParticleContainer.H:728
virtual void ContinuousInjection(const amrex::RealBox &)
Definition WarpXParticleContainer.H:459
WarpXParticleContainer & operator=(const WarpXParticleContainer &)=delete
ParticleBoundaries m_boundary_conditions
Definition WarpXParticleContainer.H:675
virtual void resample(const amrex::Vector< amrex::Geometry > &, const int, bool)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition WarpXParticleContainer.H:630
int m_qed_breit_wheeler_pos_product
Definition WarpXParticleContainer.H:725
std::string species_name
Definition WarpXParticleContainer.H:668
int ionization_product
Definition WarpXParticleContainer.H:698
int m_qed_virtual_photon_species
Definition WarpXParticleContainer.H:729
amrex::Real m_qed_virtual_photon_min_energy
Definition WarpXParticleContainer.H:731
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:183
int m_qed_breit_wheeler_ele_product
Definition WarpXParticleContainer.H:723
bool do_splitting
Definition WarpXParticleContainer.H:554
virtual void set_quantum_sync_engine_ptr(const std::shared_ptr< QuantumSynchrotronEngine > &)
Definition WarpXParticleContainer.H:721
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(bool local=false)
Definition WarpXParticleContainer.cpp:2573
std::string const & getName()
Definition WarpXParticleContainer.H:664
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:393
bool initialize_self_fields
Definition WarpXParticleContainer.H:557
int self_fields_verbosity
Definition WarpXParticleContainer.H:561
amrex::ParticleReal getBoundaryThermalVelocity() const
Definition WarpXParticleContainer.H:592
virtual bool has_quantum_sync() const
Definition WarpXParticleContainer.H:601
std::string physical_element
Definition WarpXParticleContainer.H:708
void deleteInvalidParticles()
Definition WarpXParticleContainer.cpp:357
int split_type
Definition WarpXParticleContainer.H:571
virtual amrex::Vector< amrex::Parser * > getUserRealAttribParser() const
Definition WarpXParticleContainer.H:646
amrex::Vector< amrex::FArrayBox > local_Sxz
Definition WarpXParticleContainer.H:741
amrex::ParticleReal sumParticleEnergy(bool local=false) const
Definition WarpXParticleContainer.cpp:2556
void PushX(amrex::Real dt)
Definition WarpXParticleContainer.cpp:2822
WarpXParticleContainer(WarpXParticleContainer &&)=default
virtual PlasmaInjector * GetPlasmaInjector(const int)
Definition WarpXParticleContainer.H:227
friend MultiParticleContainer
Definition WarpXParticleContainer.H:197
amrex::Vector< amrex::ParticleReal > m_E_external_particle
Definition WarpXParticleContainer.H:565
std::string ionization_product_name
Definition WarpXParticleContainer.H:699
amrex::ParticleReal m_mass
Definition WarpXParticleContainer.H:671
int getSpeciesId() const
Definition WarpXParticleContainer.H:472
int DoFieldIonization() const
Definition WarpXParticleContainer.H:597
virtual bool has_virtual_photons_beam_size_effect() const
Definition WarpXParticleContainer.H:604
int do_not_deposit
Definition WarpXParticleContainer.H:556
void setDoNotPush(bool flag)
Definition WarpXParticleContainer.H:653
WarpXParticleContainer(const WarpXParticleContainer &)=delete
amrex::ParticleReal getMass() const
Definition WarpXParticleContainer.H:587
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:1778
void setDoNotGather(int flag)
Definition WarpXParticleContainer.H:654
amrex::ParticleReal sumParticleWeight(bool local=false) const
Definition WarpXParticleContainer.cpp:2562
virtual int getVirtualPhotonSpeciesIndex() const
Definition WarpXParticleContainer.H:605
amrex::Vector< std::map< std::pair< int, int >, DiagnosticParticleData > > DiagnosticParticles
Definition WarpXParticleContainer.H:208
int DoQED() const
Definition WarpXParticleContainer.H:606
int do_resampling
Definition WarpXParticleContainer.H:710
int do_not_gather
Definition WarpXParticleContainer.H:688
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:682
amrex::Vector< amrex::FArrayBox > local_rho
Definition WarpXParticleContainer.H:733
int do_field_ionization
Definition WarpXParticleContainer.H:696
void DepositNumberDensity(amrex::MultiFab *number_density, int lev)
Definition WarpXParticleContainer.cpp:2384
SoARef GetStructOfArrays() const
ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor > ContainerType
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
amrex_real Real
amrex_particle_real ParticleReal
amrex_long Long
PODVector< T, ArenaAllocator< T > > DeviceVector
Definition EffectivePotentialPoissonSolver.H:63
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
__host__ __device__ void ignore_unused(const Ts &...)
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:291
TemperatureDepositionType
Definition TemperatureDepositionTypes.H:20
TemperatureDepositionPass
Definition TemperatureDepositionTypes.H:25
Definition WarpXParticleContainer.H:102
@ ux
Definition WarpXParticleContainer.H:105
@ x
Definition WarpXParticleContainer.H:105
@ nattribs
Definition WarpXParticleContainer.H:106
@ z
Definition WarpXParticleContainer.H:105
@ w
Definition WarpXParticleContainer.H:104
@ y
Definition WarpXParticleContainer.H:105
@ uy
Definition WarpXParticleContainer.H:105
@ uz
Definition WarpXParticleContainer.H:105
Definition ImplicitOptions.H:7
Definition WarpXParticleContainer.H:92
@ nattribs
the number of attributes above (always last)
Definition WarpXParticleContainer.H:95
static constexpr std::initializer_list< char const * > names
Definition WarpXParticleContainer.H:98
Definition WarpXParticleContainer.H:65
static constexpr auto names
Definition WarpXParticleContainer.H:71
@ nattribs
Definition WarpXParticleContainer.H:70
@ x
Definition WarpXParticleContainer.H:70
@ uz
Definition WarpXParticleContainer.H:70
@ w
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ z
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70
amrex::Real m_uth
Definition ParticleBoundaries.H:82
Definition ParticleBoundaries.H:42
ParticleBoundariesData data
Definition ParticleBoundaries.H:93
Definition MultiFabRegister.H:275