9#ifndef WARPX_PLASMA_INJECTOR_H_
10#define WARPX_PLASMA_INJECTOR_H_
47 const std::string& src_name=
"");
59 amrex::Real x, amrex::Real y, amrex::Real z)
const noexcept;
72 amrex::Real x, amrex::Real y, amrex::Real z)
const noexcept;
74 bool queryCharge (amrex::ParticleReal& a_charge)
const;
75 bool queryMass (amrex::ParticleReal& a_mass)
const;
105 amrex::Real
x_cut = std::numeric_limits<amrex::Real>::max();
106 amrex::Real
y_cut = std::numeric_limits<amrex::Real>::max();
107 amrex::Real
z_cut = std::numeric_limits<amrex::Real>::max();
121#ifdef WARPX_USE_OPENPMD
145 amrex::Real
density_min = std::numeric_limits<amrex::Real>::epsilon();
146 amrex::Real
density_max = std::numeric_limits<amrex::Real>::max();
176 std::unique_ptr<InjectorDensity,InjectorDensityDeleter>
h_inj_rho;
180 std::unique_ptr<InjectorFlux,InjectorFluxDeleter>
h_inj_flux;
184 std::unique_ptr<InjectorMomentum,InjectorMomentumDeleter>
h_inj_mom;
PhysicalSpecies
Definition SpeciesPhysicalProperties.H:16
@ unspecified
Definition SpeciesPhysicalProperties.H:17
bool insideBounds(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition PlasmaInjector.cpp:619
void setupExternalFile(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:469
void setupMultipleParticles(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:207
InjectorPosition * d_inj_pos
Definition PlasmaInjector.H:171
std::unique_ptr< InjectorDensity, InjectorDensityDeleter > h_inj_rho
Definition PlasmaInjector.H:176
amrex::Real rotation_angle
Definition PlasmaInjector.H:116
std::string str_flux_function
Definition PlasmaInjector.H:140
amrex::Vector< amrex::ParticleReal > multiple_particles_weight
Definition PlasmaInjector.H:96
amrex::ParticleReal charge
Definition PlasmaInjector.H:160
bool charge_from_source
Definition PlasmaInjector.H:159
std::unique_ptr< amrex::Parser > uz_th_parser
Definition PlasmaInjector.H:191
void setupNuniformPerCell(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:416
std::unique_ptr< InjectorMomentum, InjectorMomentumDeleter > h_inj_mom
Definition PlasmaInjector.H:184
amrex::Real radial_numpercell_power
Definition PlasmaInjector.H:136
amrex::Real x_rms
Definition PlasmaInjector.H:102
amrex::Vector< amrex::ParticleReal > multiple_particles_ux
Definition PlasmaInjector.H:93
InjectorFlux * getInjectorFlux() const
Definition PlasmaInjector.cpp:671
InjectorPosition * d_flux_pos
Definition PlasmaInjector.H:174
amrex::Real z_rms
Definition PlasmaInjector.H:104
InjectorDensity * d_inj_rho
Definition PlasmaInjector.H:177
long npart
Definition PlasmaInjector.H:109
void setupGaussianBeam(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:230
amrex::Real x_m
Definition PlasmaInjector.H:99
bool queryCharge(amrex::ParticleReal &a_charge) const
Definition PlasmaInjector.cpp:635
amrex::Vector< amrex::ParticleReal > multiple_particles_uy
Definition PlasmaInjector.H:94
InjectorMomentum * getInjectorMomentumHost() const
Definition PlasmaInjector.cpp:683
InjectorPosition * getInjectorPosition() const
Definition PlasmaInjector.cpp:653
amrex::Vector< amrex::ParticleReal > multiple_particles_uz
Definition PlasmaInjector.H:95
bool doFluxInjection() const noexcept
Definition PlasmaInjector.H:82
amrex::Real x_cut
Definition PlasmaInjector.H:105
bool do_rotation
Definition PlasmaInjector.H:114
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_x
Definition PlasmaInjector.H:90
bool overlapsWith(const amrex::XDim3 &lo, const amrex::XDim3 &hi) const noexcept
Definition PlasmaInjector.cpp:626
std::unique_ptr< amrex::Parser > uz_parser
Definition PlasmaInjector.H:188
amrex::Real z_cut
Definition PlasmaInjector.H:107
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_y
Definition PlasmaInjector.H:91
std::unique_ptr< amrex::Parser > ux_th_parser
Definition PlasmaInjector.H:189
PlasmaInjector(const PlasmaInjector &)=delete
void parseFlux(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:575
bool do_rotation_momenta
Definition PlasmaInjector.H:115
amrex::Real q_tot
Definition PlasmaInjector.H:108
amrex::Real flux_tmin
Definition PlasmaInjector.H:127
bool add_multiple_particles
Definition PlasmaInjector.H:89
amrex::XDim3 getMomentum(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition PlasmaInjector.cpp:608
amrex::Real flux_tmax
Definition PlasmaInjector.H:128
std::unique_ptr< InjectorFlux, InjectorFluxDeleter > h_inj_flux
Definition PlasmaInjector.H:180
amrex::Real xmin
Definition PlasmaInjector.H:142
std::unique_ptr< amrex::Parser > uy_parser
Definition PlasmaInjector.H:187
int symmetrization_order
Definition PlasmaInjector.H:111
void setupSingleParticle(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:196
amrex::Real ymax
Definition PlasmaInjector.H:143
amrex::ParticleReal mass
Definition PlasmaInjector.H:160
std::string species_name
Definition PlasmaInjector.H:167
void setupNRandomPerCell(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:290
InjectorMomentum * d_inj_mom
Definition PlasmaInjector.H:185
amrex::ParticleReal single_particle_weight
Definition PlasmaInjector.H:87
std::unique_ptr< amrex::Parser > ux_parser
Definition PlasmaInjector.H:186
bool external_file
Definition PlasmaInjector.H:119
PlasmaInjector & operator=(PlasmaInjector &&)=default
amrex::Vector< amrex::Real > rotation_axis
Definition PlasmaInjector.H:117
amrex::Real xmax
Definition PlasmaInjector.H:142
amrex::Real zmin
Definition PlasmaInjector.H:144
std::unique_ptr< TemperatureProperties > h_mom_temp
Definition PlasmaInjector.H:195
std::unique_ptr< amrex::Parser > flux_parser
Definition PlasmaInjector.H:182
int do_symmetrize
Definition PlasmaInjector.H:110
amrex::Real y_rms
Definition PlasmaInjector.H:103
amrex::Real ymin
Definition PlasmaInjector.H:143
amrex::Real density_min
Definition PlasmaInjector.H:145
amrex::Real focal_distance
Definition PlasmaInjector.H:113
InjectorDensity * getInjectorDensity() const
Definition PlasmaInjector.cpp:665
amrex::Vector< int > num_particles_per_cell_each_dim
Definition PlasmaInjector.H:68
bool add_single_particle
Definition PlasmaInjector.H:84
int num_particles_per_cell
Definition PlasmaInjector.H:65
amrex::Real z_shift
initialize from an openPMD file
Definition PlasmaInjector.H:120
bool m_inject_from_eb
Definition PlasmaInjector.H:138
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_z
Definition PlasmaInjector.H:92
bool gaussian_beam
Definition PlasmaInjector.H:98
amrex::Real zmax
Definition PlasmaInjector.H:144
amrex::Real z_m
Definition PlasmaInjector.H:101
InjectorMomentum * getInjectorMomentumDevice() const
Definition PlasmaInjector.cpp:677
amrex::Vector< amrex::ParticleReal > single_particle_u
Definition PlasmaInjector.H:86
bool do_focusing
Definition PlasmaInjector.H:112
std::any m_openpmd_input_series
additional z offset for particle positions
Definition PlasmaInjector.H:123
PhysicalSpecies physical_species
Definition PlasmaInjector.H:162
bool doInjection() const noexcept
Definition PlasmaInjector.H:79
bool mass_from_source
Definition PlasmaInjector.H:158
std::unique_ptr< amrex::Parser > uy_th_parser
Definition PlasmaInjector.H:190
std::unique_ptr< InjectorPosition > h_flux_pos
Definition PlasmaInjector.H:173
std::string source_name
Definition PlasmaInjector.H:168
InjectorFlux * d_inj_flux
Definition PlasmaInjector.H:181
int flux_direction
Definition PlasmaInjector.H:133
InjectorPosition * getInjectorFluxPosition() const
Definition PlasmaInjector.cpp:659
std::unique_ptr< amrex::Parser > density_parser
Definition PlasmaInjector.H:178
int species_id
Definition PlasmaInjector.H:166
amrex::Real density_max
Definition PlasmaInjector.H:146
amrex::Vector< amrex::ParticleReal > single_particle_pos
Definition PlasmaInjector.H:85
std::unique_ptr< InjectorPosition > h_inj_pos
Definition PlasmaInjector.H:170
PlasmaInjector & operator=(const PlasmaInjector &)=delete
amrex::Real y_cut
Definition PlasmaInjector.H:106
bool queryMass(amrex::ParticleReal &a_mass) const
Definition PlasmaInjector.cpp:644
amrex::Real num_particles_per_cell_real
Definition PlasmaInjector.H:66
amrex::Real flux
Definition PlasmaInjector.H:164
PlasmaInjector(PlasmaInjector &&)=default
std::unique_ptr< VelocityProperties > h_mom_vel
Definition PlasmaInjector.H:196
void setupNFluxPerCell(amrex::ParmParse const &pp_species)
Definition PlasmaInjector.cpp:321
int flux_normal_axis
Definition PlasmaInjector.H:132
amrex::Real surface_flux_pos
Definition PlasmaInjector.H:126
amrex::Real y_m
Definition PlasmaInjector.H:100
Definition InjectorDensity.H:163
Definition InjectorFlux.H:64
Definition InjectorMomentum.H:505
Definition InjectorPosition.H:130