WarpX
Loading...
Searching...
No Matches
MultiParticleContainer.H
Go to the documentation of this file.
1/* Copyright 2019-2020 Andrew Myers, Ann Almgren, Axel Huebl
2 * David Grote, Jean-Luc Vay, Junmin Gu
3 * Luca Fedeli, Mathieu Lobet, Maxence Thevenet
4 * Remi Lehe, Revathi Jambunathan, Weiqun Zhang
5 * Yinjian Zhao
6 *
7 * This file is part of WarpX.
8 *
9 * License: BSD-3-Clause-LBNL
10 */
11#ifndef WARPX_ParticleContainer_H_
12#define WARPX_ParticleContainer_H_
13
16
18#ifdef WARPX_QED
21#endif
23#include "Utils/TextMsg.H"
24#include "Utils/WarpXConst.H"
26#include "ParticleBoundaries.H"
28
30
31#include <AMReX_BLassert.H>
32#include <AMReX_Box.H>
33#include <AMReX_Config.H>
34#include <AMReX_Geometry.H>
35#include <AMReX_GpuControl.H>
36#include <AMReX_INT.H>
37#include <AMReX_MFIter.H>
38#include <AMReX_REAL.H>
39#include <AMReX_RealBox.H>
40#include <AMReX_Vector.H>
41
42#include <AMReX_BaseFwd.H>
43#include <AMReX_AmrCoreFwd.H>
44
45#include <algorithm>
46#include <array>
47#include <iosfwd>
48#include <iterator>
49#include <limits>
50#include <memory>
51#include <string>
52#include <vector>
53
69{
70
71public:
72
73 explicit MultiParticleContainer (amrex::AmrCore* amr_core);
74
76
81
82 [[nodiscard]] WarpXParticleContainer&
83 GetParticleContainer (int index) const {return *allcontainers[index];}
84
85 [[nodiscard]] WarpXParticleContainer*
86 GetParticleContainerPtr (int index) const {return allcontainers[index].get();}
87
88 [[nodiscard]] WarpXParticleContainer&
89 GetParticleContainerFromName (const std::string& name) const;
90
91 std::array<amrex::ParticleReal, 3> meanParticleVelocity(int index) {
92 return allcontainers[index]->meanParticleVelocity();
93 }
94
96
97 void TransformMomentumToCurvilinear (bool forward);
98
99 void AllocData ();
100
101 void InitData ();
102
104
110 void Evolve (
112 int lev,
113 std::string const& current_fp_string,
114 amrex::Real t,
115 amrex::Real dt,
116 SubcyclingHalf subcycling_half=SubcyclingHalf::None,
117 bool skip_deposition=false,
118 PositionPushType position_push_type=PositionPushType::Full,
119 MomentumPushType momentum_push_type=MomentumPushType::Full,
120 ImplicitOptions const * implicit_options = nullptr
121 );
122
127 int lev, amrex::Real dt);
128
133 void PushX (amrex::Real dt);
134
141 void PushP (int lev, amrex::Real dt,
142 const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
143 const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
144 MomentumPushType momentum_push_type);
145
152 std::unique_ptr<amrex::MultiFab> GetZeroChargeDensity(int lev);
153
163 void
165 amrex::Real relative_time);
166
180 void
182 amrex::Real dt, amrex::Real relative_time,
183 PushType push_type = PushType::Explicit);
184
195 void
197
201
202 std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
203
204 std::unique_ptr<amrex::MultiFab> GetGlobalPlasmaFrequency (int lev);
206
207 /*
208 * \brief Calculates the electron-ion collision frequency for the specified species
209 * @param[in] electron_species_name name of the electon species
210 */
211 void CalculateNuei (std::string const & electron_species_name);
212
213 void doFieldIonization (int lev,
214 const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
215 const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz);
216
217 void doCollisions (int step, amrex::Real cur_time, amrex::Real dt);
218
226 void doResampling (const amrex::Vector<amrex::Geometry>& geom, int timestep, bool verbose);
227
228#ifdef WARPX_QED
236 void doQEDSchwinger ();
237
242 [[nodiscard]] amrex::Box ComputeSchwingerGlobalBox () const;
243#endif
244
245 void Restart (const std::string& dir);
246
247 void PostRestart ();
248
249 void ReadHeader (std::istream& is);
250
251 void WriteHeader (std::ostream& os) const;
252
253 void SortParticlesByBin (
254 const amrex::IntVect& bin_size,
255 bool sort_particles_for_deposition,
256 const amrex::IntVect& sort_idx_type);
257
258 void Redistribute ();
259
261
263
264 void RedistributeLocal (const amrex::IntVect& max_cells_travelled);
265
269
277 [[nodiscard]] amrex::Vector<amrex::Long> GetZeroParticlesInGrid(int lev) const;
278
279 [[nodiscard]] amrex::Vector<amrex::Long> NumberOfParticlesInGrid(int lev) const;
280
281 void Increment (amrex::MultiFab& mf, int lev);
282
283 void SetParticleBoxArray (int lev, amrex::BoxArray& new_ba);
285
286 [[nodiscard]] int nSpecies () const {return static_cast<int>(species_names.size());}
287 [[nodiscard]] int nLasers () const {return static_cast<int>(lasers_names.size());}
288 [[nodiscard]] int nContainers () const {return static_cast<int>(allcontainers.size());}
289
294 void SetDoBackTransformedParticles (bool do_back_transformed_particles);
300 void SetDoBackTransformedParticles (const std::string& species_name, bool do_back_transformed_particles);
301
304 [[nodiscard]] bool getDoBackTransformedParticles () const
305 {
307 }
308
309 [[nodiscard]] int nSpeciesDepositOnMainGrid () const
310 {
311 bool const onMainGrid = true;
312 auto const & v = m_deposit_on_main_grid;
313 return static_cast<int>(std::count( v.begin(), v.end(), onMainGrid ));
314 }
315
316 [[nodiscard]] int nSpeciesGatherFromMainGrid() const
317 {
318 bool const fromMainGrid = true;
319 auto const & v = m_gather_from_main_grid;
320 return static_cast<int>(std::count( v.begin(), v.end(), fromMainGrid ));
321 }
322
323 // Inject particles during the simulation (for particles entering the
324 // simulation domain after some iterations, due to flowing plasma and/or
325 // moving window).
326 void ContinuousInjection(const amrex::RealBox& injection_box) const;
327
332 void UpdateAntennaPosition(amrex::Real dt) const;
333
334 [[nodiscard]] int doContinuousInjection() const;
335
336 // Inject particles from a surface during the simulation
338
339 [[nodiscard]] std::vector<std::string> GetSpeciesNames() const { return species_names; }
340
341 [[nodiscard]] std::vector<std::string> GetLasersNames() const { return lasers_names; }
342
343 [[nodiscard]] std::vector<std::string> GetSpeciesAndLasersNames() const
344 {
345 std::vector<std::string> tmp = species_names;
346 tmp.insert(tmp.end(), lasers_names.begin(), lasers_names.end());
347 return tmp;
348 }
349
351
352 std::string m_B_ext_particle_s = "none";
353 std::string m_E_ext_particle_s = "none";
354 // Parser for B_external on the particle
355 std::unique_ptr<amrex::Parser> m_Bx_particle_parser;
356 std::unique_ptr<amrex::Parser> m_By_particle_parser;
357 std::unique_ptr<amrex::Parser> m_Bz_particle_parser;
358 // Parser for E_external on the particle
359 std::unique_ptr<amrex::Parser> m_Ex_particle_parser;
360 std::unique_ptr<amrex::Parser> m_Ey_particle_parser;
361 std::unique_ptr<amrex::Parser> m_Ez_particle_parser;
362
364
374
375#ifdef WARPX_QED
379 void doQedEvents (int lev,
380 const amrex::MultiFab& Ex,
381 const amrex::MultiFab& Ey,
382 const amrex::MultiFab& Ez,
383 const amrex::MultiFab& Bx,
384 const amrex::MultiFab& By,
385 const amrex::MultiFab& Bz);
386#endif
387
388 [[nodiscard]] int getSpeciesID (const std::string& product_str) const;
389
392
393protected:
394
395#ifdef WARPX_QED
399 void doQedBreitWheeler (int lev,
400 const amrex::MultiFab& Ex,
401 const amrex::MultiFab& Ey,
402 const amrex::MultiFab& Ez,
403 const amrex::MultiFab& Bx,
404 const amrex::MultiFab& By,
405 const amrex::MultiFab& Bz);
406
410 void doQedQuantumSync (int lev,
411 const amrex::MultiFab& Ex,
412 const amrex::MultiFab& Ey,
413 const amrex::MultiFab& Ez,
414 const amrex::MultiFab& Bx,
415 const amrex::MultiFab& By,
416 const amrex::MultiFab& Bz);
417#endif
418
419 // Particle container types
420 enum struct PCTypes {Physical, RigidInjected, Photon};
421
422 std::vector<std::string> species_names;
423
424 std::vector<std::string> lasers_names;
425
426 std::unique_ptr<CollisionHandler> collisionhandler;
427
429 std::vector<bool> m_deposit_on_main_grid;
431
433 std::vector<bool> m_gather_from_main_grid;
434
435 std::vector<PCTypes> species_types;
436
437 template<typename ...Args>
438 [[nodiscard]]
440 Args const&... pc_dsts) const noexcept
441 {
442 amrex::MFItInfo info;
443
444 MFItInfoCheckTiling(pc_src, pc_dsts...);
445
448 }
449
450#ifdef AMREX_USE_OMP
451 info.SetDynamic(true);
452#endif
453
454 return info;
455 }
456
457
458#ifdef WARPX_QED
459 // The QED engines
460 std::shared_ptr<BreitWheelerEngine> m_shr_p_bw_engine;
461 std::shared_ptr<QuantumSynchrotronEngine> m_shr_p_qs_engine;
462 //_______________________________
463
468 void InitQED ();
469
470 //Variables to store how many species need a QED process
473 //________
474
476 static_cast<amrex::ParticleReal>(
477 2.0 * PhysConst::m_e * PhysConst::c2 );
478
479
482
486 [[nodiscard]] int NSpeciesQuantumSync() const { return m_nspecies_quantum_sync;}
487
491 [[nodiscard]] int NSpeciesBreitWheeler() const { return m_nspecies_breit_wheeler;}
492
496 void InitQuantumSync ();
497
501 void InitBreitWheeler ();
502
508
514
516 bool m_do_qed_schwinger = false;
535 amrex::Real m_qed_schwinger_xmin = std::numeric_limits<amrex::Real>::lowest();
536 amrex::Real m_qed_schwinger_xmax = std::numeric_limits<amrex::Real>::max();
537 amrex::Real m_qed_schwinger_ymin = std::numeric_limits<amrex::Real>::lowest();
538 amrex::Real m_qed_schwinger_ymax = std::numeric_limits<amrex::Real>::max();
539 amrex::Real m_qed_schwinger_zmin = std::numeric_limits<amrex::Real>::lowest();
540 amrex::Real m_qed_schwinger_zmax = std::numeric_limits<amrex::Real>::max();
541
542#endif
543
544private:
545
546 // physical particles (+ laser)
548
549 void ReadParameters ();
550
554
555 void mapSpeciesProduct ();
556
558
559 void MFItInfoCheckTiling(const WarpXParticleContainer& /*pc_src*/) const noexcept
560 {}
561
562 template<typename First, typename ...Args>
564 First const& pc_dst, Args const&... others) const noexcept
565 {
567 WARPX_ALWAYS_ASSERT_WITH_MESSAGE(pc_dst.do_tiling,
568 "For particle creation processes, either all or none of the "
569 "particle species must use tiling.");
570 }
571
572 MFItInfoCheckTiling(pc_src, others...);
573 }
574
581
582#ifdef WARPX_QED
589#endif
590
591
592};
593#endif /*WARPX_ParticleContainer_H_*/
@ v
Definition RigidInjectedParticleContainer.H:27
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition TextMsg.H:13
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 ExternalParticleFields.H:40
void SortParticlesByBin(const amrex::IntVect &bin_size, bool sort_particles_for_deposition, const amrex::IntVect &sort_idx_type)
Definition MultiParticleContainer.cpp:865
std::vector< std::string > GetLasersNames() const
Definition MultiParticleContainer.H:341
amrex::Vector< std::unique_ptr< WarpXParticleContainer > >::iterator begin()
Definition MultiParticleContainer.H:390
void deleteInvalidParticles()
Definition MultiParticleContainer.cpp:897
std::unique_ptr< amrex::Parser > m_Bz_particle_parser
Definition MultiParticleContainer.H:357
void InitQED()
Definition MultiParticleContainer.cpp:1272
std::unique_ptr< amrex::Parser > m_Ey_particle_parser
Definition MultiParticleContainer.H:360
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition MultiParticleContainer.cpp:686
int nLasers() const
Definition MultiParticleContainer.H:287
bool getDoBackTransformedParticles() const
Definition MultiParticleContainer.H:304
amrex::Real m_qed_schwinger_zmax
Definition MultiParticleContainer.H:540
void RedistributeLocal(const amrex::IntVect &max_cells_travelled)
Definition MultiParticleContainer.cpp:905
amrex::Real m_qed_schwinger_zmin
Definition MultiParticleContainer.H:539
void InitMultiPhysicsModules()
Definition MultiParticleContainer.cpp:463
std::string m_B_ext_particle_s
Definition MultiParticleContainer.H:352
void QuantumSyncGenerateTable()
Definition MultiParticleContainer.cpp:1435
MultiParticleContainer & operator=(MultiParticleContainer const &)=delete
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_E
Definition MultiParticleContainer.H:368
void AllocData()
Definition MultiParticleContainer.cpp:433
void SetParticleDistributionMap(int lev, amrex::DistributionMapping &new_dm)
Definition MultiParticleContainer.cpp:976
void InitData()
Definition MultiParticleContainer.cpp:443
amrex::Real m_qed_schwinger_ymin
Definition MultiParticleContainer.H:537
std::vector< bool > m_laser_deposit_on_main_grid
Definition MultiParticleContainer.H:430
void Evolve(ablastr::fields::MultiFabRegister &fields, int lev, std::string const &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)
This evolves all the particles by one PIC time step, including current deposition,...
Definition MultiParticleContainer.cpp:481
void Increment(amrex::MultiFab &mf, int lev)
Definition MultiParticleContainer.cpp:960
void mapSpeciesProduct()
Definition MultiParticleContainer.cpp:1037
void ContinuousInjection(const amrex::RealBox &injection_box) const
Definition MultiParticleContainer.cpp:989
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_lengths
Definition MultiParticleContainer.H:371
MultiParticleContainer(MultiParticleContainer const &)=delete
void doResampling(const amrex::Vector< amrex::Geometry > &geom, int timestep, bool verbose)
This function loops over all species and performs resampling if appropriate.
Definition MultiParticleContainer.cpp:1225
void DepositMassMatrices(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real dt)
Deposit mass matrices.
Definition MultiParticleContainer.cpp:529
amrex::Vector< std::unique_ptr< WarpXParticleContainer > >::iterator end()
Definition MultiParticleContainer.H:391
int NSpeciesBreitWheeler() const
Definition MultiParticleContainer.H:491
void CalculateNuei(std::string const &electron_species_name)
Definition MultiParticleContainer.cpp:824
void ReadHeader(std::istream &is)
Definition ParticleIO.cpp:231
static constexpr auto m_default_quantum_sync_photon_creation_energy_threshold
Definition MultiParticleContainer.H:475
void ApplyBoundaryConditions()
Definition MultiParticleContainer.cpp:920
std::vector< std::string > lasers_names
Definition MultiParticleContainer.H:424
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_starts
Definition MultiParticleContainer.H:370
bool m_do_qed_schwinger
Definition MultiParticleContainer.H:516
std::unique_ptr< amrex::Parser > m_By_particle_parser
Definition MultiParticleContainer.H:356
void PushX(amrex::Real dt)
This pushes the particle positions by one time step for all the species in the MultiParticleContainer...
Definition MultiParticleContainer.cpp:546
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_lengths
Definition MultiParticleContainer.H:367
std::string m_qed_schwinger_ele_product_name
Definition MultiParticleContainer.H:518
int m_nspecies_quantum_sync
Definition MultiParticleContainer.H:471
int m_qed_schwinger_ele_product
Definition MultiParticleContainer.H:522
int nSpecies() const
Definition MultiParticleContainer.H:286
int m_nspecies_breit_wheeler
Definition MultiParticleContainer.H:472
void MFItInfoCheckTiling(const WarpXParticleContainer &) const noexcept
Definition MultiParticleContainer.H:559
void InitQuantumSync()
Definition MultiParticleContainer.cpp:1303
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition MultiParticleContainer.H:460
void Redistribute()
Definition MultiParticleContainer.cpp:881
std::vector< PCTypes > species_types
Definition MultiParticleContainer.H:435
void PostRestart()
Definition MultiParticleContainer.cpp:453
int NSpeciesQuantumSync() const
Definition MultiParticleContainer.H:486
amrex::ParticleReal m_quantum_sync_photon_creation_energy_threshold
Definition MultiParticleContainer.H:480
amrex::ParticleReal maxParticleDtInv()
Definition MultiParticleContainer.cpp:417
WarpXParticleContainer & GetParticleContainerFromName(const std::string &name) const
Definition MultiParticleContainer.cpp:405
std::vector< std::string > species_names
Definition MultiParticleContainer.H:422
amrex::Box ComputeSchwingerGlobalBox() const
Definition MultiParticleContainer.cpp:1716
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_B
Definition MultiParticleContainer.H:373
amrex::Real m_qed_schwinger_ymax
Definition MultiParticleContainer.H:538
void doQEDSchwinger()
Definition MultiParticleContainer.cpp:1608
std::string m_E_ext_particle_s
Definition MultiParticleContainer.H:353
amrex::Real m_qed_schwinger_xmin
Definition MultiParticleContainer.H:535
int nSpeciesGatherFromMainGrid() const
Definition MultiParticleContainer.H:316
WarpXParticleContainer * GetParticleContainerPtr(int index) const
Definition MultiParticleContainer.H:86
void defineAllParticleTiles()
Definition MultiParticleContainer.cpp:889
void BreitWheelerGenerateTable()
Definition MultiParticleContainer.cpp:1524
std::unique_ptr< amrex::MultiFab > GetZeroChargeDensity(int lev)
This returns a MultiFAB filled with zeros. It is used to return the charge density when there is no p...
Definition MultiParticleContainer.cpp:565
void ReadParameters()
Definition MultiParticleContainer.cpp:130
int doContinuousInjection() const
Definition MultiParticleContainer.cpp:1009
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_B
Definition MultiParticleContainer.H:369
int nSpeciesDepositOnMainGrid() const
Definition MultiParticleContainer.H:309
void DepositTemperatures(ablastr::fields::MultiFabRegister &fields, amrex::Real relative_time)
Deposit temperature to species MFs. This is done for each species and can be used in the future for a...
Definition MultiParticleContainer.cpp:656
MultiParticleContainer & operator=(MultiParticleContainer &&)=default
std::unique_ptr< CollisionHandler > collisionhandler
Definition MultiParticleContainer.H:426
amrex::ParticleReal m_repeated_plasma_lens_period
Definition MultiParticleContainer.H:365
amrex::Real m_qed_schwinger_xmax
Definition MultiParticleContainer.H:536
bool m_params_initialized
Definition MultiParticleContainer.H:553
void doCollisions(int step, amrex::Real cur_time, amrex::Real dt)
Definition MultiParticleContainer.cpp:1219
void MFItInfoCheckTiling(const WarpXParticleContainer &pc_src, First const &pc_dst, Args const &... others) const noexcept
Definition MultiParticleContainer.H:563
int getSpeciesID(const std::string &product_str) const
Definition MultiParticleContainer.cpp:1088
amrex::Vector< amrex::Long > NumberOfParticlesInGrid(int lev) const
Definition MultiParticleContainer.cpp:937
void InitBreitWheeler()
Definition MultiParticleContainer.cpp:1375
void doFieldIonization(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)
Definition MultiParticleContainer.cpp:1153
amrex::Vector< amrex::Long > GetZeroParticlesInGrid(int lev) const
This returns a vector filled with zeros whose size is the number of boxes in the simulation boxarray....
Definition MultiParticleContainer.cpp:928
std::unique_ptr< amrex::MultiFab > GetGlobalPlasmaFrequency(int lev)
Definition MultiParticleContainer.cpp:708
bool m_do_back_transformed_particles
Definition MultiParticleContainer.H:557
void GenerateGlobalDebyeLength()
Definition MultiParticleContainer.cpp:749
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)
Definition MultiParticleContainer.cpp:554
void TransformMomentumToCurvilinear(bool forward)
Definition MultiParticleContainer.cpp:426
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(int index)
Definition MultiParticleContainer.H:91
amrex::Vector< std::unique_ptr< WarpXParticleContainer > > allcontainers
Definition MultiParticleContainer.H:547
void SetParticleBoxArray(int lev, amrex::BoxArray &new_ba)
Definition MultiParticleContainer.cpp:968
void doQedQuantumSync(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)
Performs QED photon emission for the species for which it is enabled.
Definition MultiParticleContainer.cpp:1875
WarpXParticleContainer & GetParticleContainer(int index) const
Definition MultiParticleContainer.H:83
void ScrapeParticlesAtEB(ablastr::fields::MultiLevelScalarField const &distance_to_eb)
Definition MultiParticleContainer.cpp:1248
void UpdateAntennaPosition(amrex::Real dt) const
Update antenna position for continuous injection of lasers in a boosted frame. Empty function for con...
Definition MultiParticleContainer.cpp:999
MultiParticleContainer(MultiParticleContainer &&)=default
void CheckIonizationProductSpecies()
Definition MultiParticleContainer.cpp:1237
std::unique_ptr< amrex::Parser > m_Ex_particle_parser
Definition MultiParticleContainer.H:359
void DepositCurrent(ablastr::fields::MultiLevelVectorField const &J, amrex::Real dt, amrex::Real relative_time, PushType push_type=PushType::Explicit)
Deposit current density.
Definition MultiParticleContainer.cpp:590
std::vector< std::string > GetSpeciesAndLasersNames() const
Definition MultiParticleContainer.H:343
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_starts
Definition MultiParticleContainer.H:366
int m_qed_schwinger_threshold_poisson_gaussian
Definition MultiParticleContainer.H:531
std::vector< bool > m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition MultiParticleContainer.H:433
void doQedEvents(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)
Performs QED events (Breit-Wheeler process and photon emission).
Definition MultiParticleContainer.cpp:1778
void DepositCharge(const ablastr::fields::MultiLevelScalarField &rho, amrex::Real relative_time)
Deposit charge density.
Definition MultiParticleContainer.cpp:619
void CheckQEDProductSpecies()
Definition MultiParticleContainer.cpp:1956
amrex::Real m_qed_schwinger_y_size
Definition MultiParticleContainer.H:526
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_E
Definition MultiParticleContainer.H:372
int nContainers() const
Definition MultiParticleContainer.H:288
ExternalParticleFields m_external_particle_fields_metadata
Definition MultiParticleContainer.H:363
void WriteHeader(std::ostream &os) const
Definition ParticleIO.cpp:242
std::string m_qed_schwinger_pos_product_name
Definition MultiParticleContainer.H:520
void Restart(const std::string &dir)
Definition ParticleIO.cpp:129
std::vector< std::string > GetSpeciesNames() const
Definition MultiParticleContainer.H:339
void ContinuousFluxInjection(amrex::Real t, amrex::Real dt) const
Definition MultiParticleContainer.cpp:1025
int m_qed_schwinger_pos_product
Definition MultiParticleContainer.H:524
amrex::MFItInfo getMFItInfo(const WarpXParticleContainer &pc_src, Args const &... pc_dsts) const noexcept
Definition MultiParticleContainer.H:439
MultiParticleContainer(amrex::AmrCore *amr_core)
Definition MultiParticleContainer.cpp:96
std::unique_ptr< amrex::Parser > m_Ez_particle_parser
Definition MultiParticleContainer.H:361
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition MultiParticleContainer.H:461
~MultiParticleContainer()=default
std::vector< bool > m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid
Definition MultiParticleContainer.H:429
void SetDoBackTransformedParticles(bool do_back_transformed_particles)
Definition MultiParticleContainer.cpp:1112
PCTypes
Definition MultiParticleContainer.H:420
std::unique_ptr< amrex::Parser > m_Bx_particle_parser
Definition MultiParticleContainer.H:355
void doQedBreitWheeler(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)
Performs Breit-Wheeler process for the species for which it is enabled.
Definition MultiParticleContainer.cpp:1792
Definition WarpXParticleContainer.H:195
Long size() const noexcept
amrex_real Real
amrex_particle_real ParticleReal
PODVector< T, ArenaAllocator< T > > DeviceVector
constexpr auto c2
square of the vacuum speed of light [m^2/s^2]
Definition constant.H:221
constexpr auto m_e
electron mass [kg]
Definition constant.H:172
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
bool notInLaunchRegion() noexcept
BoxND< 3 > Box
IntVectND< 3 > IntVect
Definition ImplicitOptions.H:7
Definition MultiFabRegister.H:275
MFItInfo & SetDynamic(bool f) noexcept
MFItInfo & EnableTiling(const IntVect &ts=FabArrayBase::mfiter_tile_size) noexcept