WarpX
PlasmaInjector.H
Go to the documentation of this file.
1 /* Copyright 2019 Andrew Myers, Axel Huebl, David Grote
2  * Maxence Thevenet, Remi Lehe, Weiqun Zhang
3  *
4  *
5  * This file is part of WarpX.
6  *
7  * License: BSD-3-Clause-LBNL
8  */
9 #ifndef PLASMA_INJECTOR_H_
10 #define PLASMA_INJECTOR_H_
11 
13 #include "InjectorPosition.H"
14 #include "InjectorDensity.H"
15 #include "InjectorMomentum.H"
16 
17 #include "Utils/WarpXConst.H"
18 #include "Parser/WarpXParser.H"
19 
20 #include <AMReX_Vector.H>
21 #include <AMReX_ParmParse.H>
22 #include <AMReX_Utility.H>
23 
24 #ifdef WARPX_USE_OPENPMD
25 # include <openPMD/openPMD.hpp>
26 #endif
27 
28 #include <array>
29 
36 {
37 
38 public:
39 
40  PlasmaInjector ();
41 
42  PlasmaInjector (int ispecies, const std::string& name);
43 
44  ~PlasmaInjector ();
45 
46  // bool: whether the point (x, y, z) is inside the plasma region
47  bool insideBounds (amrex::Real x, amrex::Real y, amrex::Real z) const noexcept;
48 
49  // bool: whether the region defined by lo and hi overlaps with the plasma region
50  bool overlapsWith (const amrex::XDim3& lo, const amrex::XDim3& hi) const noexcept;
51 
53 
54  amrex::Vector<int> num_particles_per_cell_each_dim;
55 
56  // gamma * beta
57  amrex::XDim3 getMomentum (amrex::Real x, amrex::Real y, amrex::Real z) const noexcept;
58 
59  amrex::Real getCharge () {return charge;}
60  amrex::Real getMass () {return mass;}
62 
63  bool doInjection () const noexcept { return h_inj_pos != nullptr;}
64 
65  bool add_single_particle = false;
66  amrex::Vector<amrex::ParticleReal> single_particle_pos;
67  amrex::Vector<amrex::ParticleReal> single_particle_vel;
68  amrex::ParticleReal single_particle_weight;
69 
70  bool gaussian_beam = false;
71  amrex::Real x_m;
72  amrex::Real y_m;
73  amrex::Real z_m;
74  amrex::Real x_rms;
75  amrex::Real y_rms;
76  amrex::Real z_rms;
77  amrex::Real x_cut = std::numeric_limits<amrex::Real>::max();
78  amrex::Real y_cut = std::numeric_limits<amrex::Real>::max();
79  amrex::Real z_cut = std::numeric_limits<amrex::Real>::max();
80  amrex::Real q_tot = 0.0;
81  long npart;
82  int do_symmetrize = 0;
83 
84  bool external_file = false;
85  amrex::Real z_shift = 0.0;
86 #ifdef WARPX_USE_OPENPMD
87  std::unique_ptr<openPMD::Series> m_openpmd_input_series;
89 #endif
90 
91  bool radially_weighted = true;
92 
93  std::string str_density_function;
97 
98  amrex::Real xmin, xmax;
99  amrex::Real ymin, ymax;
100  amrex::Real zmin, zmax;
101  amrex::Real density_min = std::numeric_limits<amrex::Real>::epsilon();
102  amrex::Real density_max = std::numeric_limits<amrex::Real>::max();
103 
107 
108 protected:
109 
110  amrex::Real mass, charge;
111 
113 
114  amrex::Real density;
115 
117  std::string species_name;
118 
119  std::unique_ptr<InjectorPosition> h_inj_pos;
121 
122  std::unique_ptr<InjectorDensity,InjectorDensityDeleter> h_inj_rho;
124 
125  std::unique_ptr<InjectorMomentum,InjectorMomentumDeleter> h_inj_mom;
127 
128  void parseDensity (amrex::ParmParse& pp);
129  void parseMomentum (amrex::ParmParse& pp);
130 };
131 
132 #endif
amrex::Real xmin
Definition: PlasmaInjector.H:98
InjectorMomentum * d_inj_mom
Definition: PlasmaInjector.H:126
PhysicalSpecies getPhysicalSpecies() const
Definition: PlasmaInjector.H:61
PhysicalSpecies physical_species
Definition: PlasmaInjector.H:112
amrex::Real mass
Definition: PlasmaInjector.H:110
amrex::Real z_m
Definition: PlasmaInjector.H:73
amrex::ParticleReal single_particle_weight
Definition: PlasmaInjector.H:68
std::unique_ptr< openPMD::Series > m_openpmd_input_series
additional z offset for particle positions
Definition: PlasmaInjector.H:88
Definition: PlasmaInjector.H:35
bool gaussian_beam
Definition: PlasmaInjector.H:70
amrex::Real getCharge()
Definition: PlasmaInjector.H:59
def x
Definition: read_lab_particles.py:25
amrex::Real x_cut
Definition: PlasmaInjector.H:77
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:19
amrex::XDim3 getMomentum(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition: PlasmaInjector.cpp:566
amrex::Real q_tot
Definition: PlasmaInjector.H:80
void parseDensity(amrex::ParmParse &pp)
Definition: PlasmaInjector.cpp:404
amrex::Real density_max
Definition: PlasmaInjector.H:102
bool add_single_particle
Definition: PlasmaInjector.H:65
amrex::Real x_m
Definition: PlasmaInjector.H:71
amrex::Real z_rms
Definition: PlasmaInjector.H:76
bool radially_weighted
Definition: PlasmaInjector.H:91
amrex::Real x_rms
Definition: PlasmaInjector.H:74
amrex::Real z_cut
Definition: PlasmaInjector.H:79
bool doInjection() const noexcept
Definition: PlasmaInjector.H:63
int num_particles_per_cell
Definition: PlasmaInjector.H:52
amrex::Vector< int > num_particles_per_cell_each_dim
Definition: PlasmaInjector.H:54
def z
Definition: read_lab_particles.py:26
std::string species_name
Definition: PlasmaInjector.H:117
amrex::Real ymax
Definition: PlasmaInjector.H:99
amrex::Real density_min
Definition: PlasmaInjector.H:101
int species_id
Definition: PlasmaInjector.H:116
std::unique_ptr< InjectorPosition > h_inj_pos
Definition: PlasmaInjector.H:119
amrex::Real charge
Definition: PlasmaInjector.H:110
std::unique_ptr< InjectorMomentum, InjectorMomentumDeleter > h_inj_mom
Definition: PlasmaInjector.H:125
PlasmaInjector()
Definition: PlasmaInjector.cpp:72
std::unique_ptr< InjectorDensity, InjectorDensityDeleter > h_inj_rho
Definition: PlasmaInjector.H:122
amrex::Real y_m
Definition: PlasmaInjector.H:72
std::string str_density_function
Definition: PlasmaInjector.H:93
long npart
Definition: PlasmaInjector.H:81
InjectorMomentum * getInjectorMomentum()
Definition: PlasmaInjector.cpp:599
InjectorPosition * d_inj_pos
Definition: PlasmaInjector.H:120
amrex::Real z_shift
initialize from an openPMD file
Definition: PlasmaInjector.H:85
amrex::Real y_cut
Definition: PlasmaInjector.H:78
name
Definition: run_automated.py:204
int do_symmetrize
Definition: PlasmaInjector.H:82
bool external_file
Definition: PlasmaInjector.H:84
Definition: InjectorMomentum.H:303
InjectorDensity * getInjectorDensity()
Definition: PlasmaInjector.cpp:593
InjectorPosition * getInjectorPosition()
Definition: PlasmaInjector.cpp:587
bool insideBounds(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition: PlasmaInjector.cpp:571
amrex::Real xmax
Definition: PlasmaInjector.H:98
~PlasmaInjector()
Definition: PlasmaInjector.cpp:386
std::string str_momentum_function_ux
Definition: PlasmaInjector.H:94
amrex::Real getMass()
Definition: PlasmaInjector.H:60
void parseMomentum(amrex::ParmParse &pp)
Definition: PlasmaInjector.cpp:439
std::string str_momentum_function_uy
Definition: PlasmaInjector.H:95
amrex::Real ymin
Definition: PlasmaInjector.H:99
amrex::Real y_rms
Definition: PlasmaInjector.H:75
bool overlapsWith(const amrex::XDim3 &lo, const amrex::XDim3 &hi) const noexcept
Definition: PlasmaInjector.cpp:578
Definition: InjectorPosition.H:72
std::string str_momentum_function_uz
Definition: PlasmaInjector.H:96
amrex::Real zmin
Definition: PlasmaInjector.H:100
Definition: InjectorDensity.H:123
amrex::Vector< amrex::ParticleReal > single_particle_vel
Definition: PlasmaInjector.H:67
amrex::Real zmax
Definition: PlasmaInjector.H:100
amrex::Real density
Definition: PlasmaInjector.H:114
amrex::Vector< amrex::ParticleReal > single_particle_pos
Definition: PlasmaInjector.H:66
InjectorDensity * d_inj_rho
Definition: PlasmaInjector.H:123