WarpX
Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
PlasmaInjector Class Reference

#include <PlasmaInjector.H>

Public Member Functions

 PlasmaInjector ()=default
 
 PlasmaInjector (int ispecies, const std::string &name, const amrex::Geometry &geom, const std::string &src_name="")
 
 PlasmaInjector (const PlasmaInjector &)=delete
 
PlasmaInjectoroperator= (const PlasmaInjector &)=delete
 
 PlasmaInjector (PlasmaInjector &&)=default
 
PlasmaInjectoroperator= (PlasmaInjector &&)=default
 
 ~PlasmaInjector ()
 
bool insideBounds (amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
 
bool overlapsWith (const amrex::XDim3 &lo, const amrex::XDim3 &hi) const noexcept
 
amrex::XDim3 getMomentum (amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
 
bool queryCharge (amrex::ParticleReal &a_charge) const
 
bool queryMass (amrex::ParticleReal &a_mass) const
 
bool doInjection () const noexcept
 
bool doFluxInjection () const noexcept
 
InjectorPositiongetInjectorPosition () const
 
InjectorPositiongetInjectorFluxPosition () const
 
InjectorDensitygetInjectorDensity () const
 
InjectorFluxgetInjectorFlux () const
 
InjectorMomentumgetInjectorMomentumDevice () const
 
InjectorMomentumgetInjectorMomentumHost () const
 

Public Attributes

int num_particles_per_cell
 
amrex::Real num_particles_per_cell_real
 
amrex::Vector< intnum_particles_per_cell_each_dim
 
bool add_single_particle = false
 
amrex::Vector< amrex::ParticleReal > single_particle_pos
 
amrex::Vector< amrex::ParticleReal > single_particle_u
 
amrex::ParticleReal single_particle_weight
 
bool add_multiple_particles = false
 
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_x
 
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_y
 
amrex::Vector< amrex::ParticleReal > multiple_particles_pos_z
 
amrex::Vector< amrex::ParticleReal > multiple_particles_ux
 
amrex::Vector< amrex::ParticleReal > multiple_particles_uy
 
amrex::Vector< amrex::ParticleReal > multiple_particles_uz
 
amrex::Vector< amrex::ParticleReal > multiple_particles_weight
 
bool gaussian_beam = false
 
amrex::Real x_m
 
amrex::Real y_m
 
amrex::Real z_m
 
amrex::Real x_rms
 
amrex::Real y_rms
 
amrex::Real z_rms
 
amrex::Real x_cut = std::numeric_limits<amrex::Real>::max()
 
amrex::Real y_cut = std::numeric_limits<amrex::Real>::max()
 
amrex::Real z_cut = std::numeric_limits<amrex::Real>::max()
 
amrex::Real q_tot = 0.0
 
long npart
 
int do_symmetrize = 0
 
int symmetrization_order = 4
 
bool do_focusing = false
 
amrex::Real focal_distance
 
bool external_file = false
 
amrex::Real z_shift = 0.0
 initialize from an openPMD file More...
 
std::unique_ptr< openPMD::Seriesm_openpmd_input_series
 additional z offset for particle positions More...
 
amrex::Real surface_flux_pos
 
amrex::Real flux_tmin = -1.
 
amrex::Real flux_tmax = -1.
 
int flux_normal_axis
 
int flux_direction
 
bool radially_weighted = true
 
std::string str_flux_function
 
amrex::Real xmin
 
amrex::Real xmax
 
amrex::Real ymin
 
amrex::Real ymax
 
amrex::Real zmin
 
amrex::Real zmax
 
amrex::Real density_min = std::numeric_limits<amrex::Real>::epsilon()
 
amrex::Real density_max = std::numeric_limits<amrex::Real>::max()
 

Protected Member Functions

void setupSingleParticle (amrex::ParmParse const &pp_species)
 
void setupMultipleParticles (amrex::ParmParse const &pp_species)
 
void setupGaussianBeam (amrex::ParmParse const &pp_species)
 
void setupNRandomPerCell (amrex::ParmParse const &pp_species)
 
void setupNFluxPerCell (amrex::ParmParse const &pp_species)
 
void setupNuniformPerCell (amrex::ParmParse const &pp_species)
 
void setupExternalFile (amrex::ParmParse const &pp_species)
 
void parseFlux (amrex::ParmParse const &pp_species)
 

Protected Attributes

bool mass_from_source = false
 
bool charge_from_source = false
 
amrex::ParticleReal mass
 
amrex::ParticleReal charge
 
PhysicalSpecies physical_species = PhysicalSpecies::unspecified
 
amrex::Real flux
 
int species_id
 
std::string species_name
 
std::string source_name
 
std::unique_ptr< InjectorPositionh_inj_pos
 
InjectorPositiond_inj_pos = nullptr
 
std::unique_ptr< InjectorPositionh_flux_pos
 
InjectorPositiond_flux_pos = nullptr
 
std::unique_ptr< InjectorDensity, InjectorDensityDeleterh_inj_rho
 
InjectorDensityd_inj_rho = nullptr
 
std::unique_ptr< amrex::Parserdensity_parser
 
std::unique_ptr< InjectorFlux, InjectorFluxDeleterh_inj_flux
 
InjectorFluxd_inj_flux = nullptr
 
std::unique_ptr< amrex::Parserflux_parser
 
std::unique_ptr< InjectorMomentum, InjectorMomentumDeleterh_inj_mom
 
InjectorMomentumd_inj_mom = nullptr
 
std::unique_ptr< amrex::Parserux_parser
 
std::unique_ptr< amrex::Parseruy_parser
 
std::unique_ptr< amrex::Parseruz_parser
 
std::unique_ptr< amrex::Parserux_th_parser
 
std::unique_ptr< amrex::Parseruy_th_parser
 
std::unique_ptr< amrex::Parseruz_th_parser
 
std::unique_ptr< TemperaturePropertiesh_mom_temp
 
std::unique_ptr< VelocityPropertiesh_mom_vel
 

Detailed Description

The PlasmaInjector class parses and stores information about the plasma type used in the particle container. This information is used to create the particles on initialization and whenever the window moves.

Constructor & Destructor Documentation

◆ PlasmaInjector() [1/4]

PlasmaInjector::PlasmaInjector ( )
default

Default constructor

◆ PlasmaInjector() [2/4]

PlasmaInjector::PlasmaInjector ( int  ispecies,
const std::string &  name,
const amrex::Geometry geom,
const std::string &  src_name = "" 
)

◆ PlasmaInjector() [3/4]

PlasmaInjector::PlasmaInjector ( const PlasmaInjector )
delete

◆ PlasmaInjector() [4/4]

PlasmaInjector::PlasmaInjector ( PlasmaInjector &&  )
default

◆ ~PlasmaInjector()

PlasmaInjector::~PlasmaInjector ( )
default

Member Function Documentation

◆ doFluxInjection()

bool PlasmaInjector::doFluxInjection ( ) const
inlinenoexcept

◆ doInjection()

bool PlasmaInjector::doInjection ( ) const
inlinenoexcept

◆ getInjectorDensity()

InjectorDensity * PlasmaInjector::getInjectorDensity ( ) const

◆ getInjectorFlux()

InjectorFlux * PlasmaInjector::getInjectorFlux ( ) const

◆ getInjectorFluxPosition()

InjectorPosition * PlasmaInjector::getInjectorFluxPosition ( ) const

◆ getInjectorMomentumDevice()

InjectorMomentum * PlasmaInjector::getInjectorMomentumDevice ( ) const

◆ getInjectorMomentumHost()

InjectorMomentum * PlasmaInjector::getInjectorMomentumHost ( ) const

◆ getInjectorPosition()

InjectorPosition * PlasmaInjector::getInjectorPosition ( ) const

◆ getMomentum()

amrex::XDim3 PlasmaInjector::getMomentum ( amrex::Real  x,
amrex::Real  y,
amrex::Real  z 
) const
noexcept

◆ insideBounds()

bool PlasmaInjector::insideBounds ( amrex::Real  x,
amrex::Real  y,
amrex::Real  z 
) const
noexcept

◆ operator=() [1/2]

PlasmaInjector& PlasmaInjector::operator= ( const PlasmaInjector )
delete

◆ operator=() [2/2]

PlasmaInjector& PlasmaInjector::operator= ( PlasmaInjector &&  )
default

◆ overlapsWith()

bool PlasmaInjector::overlapsWith ( const amrex::XDim3 lo,
const amrex::XDim3 hi 
) const
noexcept

◆ parseFlux()

void PlasmaInjector::parseFlux ( amrex::ParmParse const &  pp_species)
protected

◆ queryCharge()

bool PlasmaInjector::queryCharge ( amrex::ParticleReal &  a_charge) const

◆ queryMass()

bool PlasmaInjector::queryMass ( amrex::ParticleReal &  a_mass) const

◆ setupExternalFile()

void PlasmaInjector::setupExternalFile ( amrex::ParmParse const &  pp_species)
protected

◆ setupGaussianBeam()

void PlasmaInjector::setupGaussianBeam ( amrex::ParmParse const &  pp_species)
protected

◆ setupMultipleParticles()

void PlasmaInjector::setupMultipleParticles ( amrex::ParmParse const &  pp_species)
protected

◆ setupNFluxPerCell()

void PlasmaInjector::setupNFluxPerCell ( amrex::ParmParse const &  pp_species)
protected

◆ setupNRandomPerCell()

void PlasmaInjector::setupNRandomPerCell ( amrex::ParmParse const &  pp_species)
protected

◆ setupNuniformPerCell()

void PlasmaInjector::setupNuniformPerCell ( amrex::ParmParse const &  pp_species)
protected

◆ setupSingleParticle()

void PlasmaInjector::setupSingleParticle ( amrex::ParmParse const &  pp_species)
protected

Member Data Documentation

◆ add_multiple_particles

bool PlasmaInjector::add_multiple_particles = false

◆ add_single_particle

bool PlasmaInjector::add_single_particle = false

◆ charge

amrex::ParticleReal PlasmaInjector::charge
protected

◆ charge_from_source

bool PlasmaInjector::charge_from_source = false
protected

◆ d_flux_pos

InjectorPosition* PlasmaInjector::d_flux_pos = nullptr
protected

◆ d_inj_flux

InjectorFlux* PlasmaInjector::d_inj_flux = nullptr
protected

◆ d_inj_mom

InjectorMomentum* PlasmaInjector::d_inj_mom = nullptr
protected

◆ d_inj_pos

InjectorPosition* PlasmaInjector::d_inj_pos = nullptr
protected

◆ d_inj_rho

InjectorDensity* PlasmaInjector::d_inj_rho = nullptr
protected

◆ density_max

amrex::Real PlasmaInjector::density_max = std::numeric_limits<amrex::Real>::max()

◆ density_min

amrex::Real PlasmaInjector::density_min = std::numeric_limits<amrex::Real>::epsilon()

◆ density_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::density_parser
protected

◆ do_focusing

bool PlasmaInjector::do_focusing = false

◆ do_symmetrize

int PlasmaInjector::do_symmetrize = 0

◆ external_file

bool PlasmaInjector::external_file = false

◆ flux

amrex::Real PlasmaInjector::flux
protected

◆ flux_direction

int PlasmaInjector::flux_direction

◆ flux_normal_axis

int PlasmaInjector::flux_normal_axis

◆ flux_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::flux_parser
protected

◆ flux_tmax

amrex::Real PlasmaInjector::flux_tmax = -1.

◆ flux_tmin

amrex::Real PlasmaInjector::flux_tmin = -1.

◆ focal_distance

amrex::Real PlasmaInjector::focal_distance

◆ gaussian_beam

bool PlasmaInjector::gaussian_beam = false

◆ h_flux_pos

std::unique_ptr<InjectorPosition> PlasmaInjector::h_flux_pos
protected

◆ h_inj_flux

std::unique_ptr<InjectorFlux,InjectorFluxDeleter> PlasmaInjector::h_inj_flux
protected

◆ h_inj_mom

std::unique_ptr<InjectorMomentum,InjectorMomentumDeleter> PlasmaInjector::h_inj_mom
protected

◆ h_inj_pos

std::unique_ptr<InjectorPosition> PlasmaInjector::h_inj_pos
protected

◆ h_inj_rho

std::unique_ptr<InjectorDensity,InjectorDensityDeleter> PlasmaInjector::h_inj_rho
protected

◆ h_mom_temp

std::unique_ptr<TemperatureProperties> PlasmaInjector::h_mom_temp
protected

◆ h_mom_vel

std::unique_ptr<VelocityProperties> PlasmaInjector::h_mom_vel
protected

◆ m_openpmd_input_series

std::unique_ptr<openPMD::Series> PlasmaInjector::m_openpmd_input_series

additional z offset for particle positions

openPMD::Series to load from in external_file injection

◆ mass

amrex::ParticleReal PlasmaInjector::mass
protected

◆ mass_from_source

bool PlasmaInjector::mass_from_source = false
protected

◆ multiple_particles_pos_x

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_pos_x

◆ multiple_particles_pos_y

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_pos_y

◆ multiple_particles_pos_z

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_pos_z

◆ multiple_particles_ux

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_ux

◆ multiple_particles_uy

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_uy

◆ multiple_particles_uz

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_uz

◆ multiple_particles_weight

amrex::Vector<amrex::ParticleReal> PlasmaInjector::multiple_particles_weight

◆ npart

long PlasmaInjector::npart

◆ num_particles_per_cell

int PlasmaInjector::num_particles_per_cell

◆ num_particles_per_cell_each_dim

amrex::Vector<int> PlasmaInjector::num_particles_per_cell_each_dim

◆ num_particles_per_cell_real

amrex::Real PlasmaInjector::num_particles_per_cell_real

◆ physical_species

PhysicalSpecies PlasmaInjector::physical_species = PhysicalSpecies::unspecified
protected

◆ q_tot

amrex::Real PlasmaInjector::q_tot = 0.0

◆ radially_weighted

bool PlasmaInjector::radially_weighted = true

◆ single_particle_pos

amrex::Vector<amrex::ParticleReal> PlasmaInjector::single_particle_pos

◆ single_particle_u

amrex::Vector<amrex::ParticleReal> PlasmaInjector::single_particle_u

◆ single_particle_weight

amrex::ParticleReal PlasmaInjector::single_particle_weight

◆ source_name

std::string PlasmaInjector::source_name
protected

◆ species_id

int PlasmaInjector::species_id
protected

◆ species_name

std::string PlasmaInjector::species_name
protected

◆ str_flux_function

std::string PlasmaInjector::str_flux_function

◆ surface_flux_pos

amrex::Real PlasmaInjector::surface_flux_pos

◆ symmetrization_order

int PlasmaInjector::symmetrization_order = 4

◆ ux_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::ux_parser
protected

◆ ux_th_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::ux_th_parser
protected

◆ uy_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::uy_parser
protected

◆ uy_th_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::uy_th_parser
protected

◆ uz_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::uz_parser
protected

◆ uz_th_parser

std::unique_ptr<amrex::Parser> PlasmaInjector::uz_th_parser
protected

◆ x_cut

amrex::Real PlasmaInjector::x_cut = std::numeric_limits<amrex::Real>::max()

◆ x_m

amrex::Real PlasmaInjector::x_m

◆ x_rms

amrex::Real PlasmaInjector::x_rms

◆ xmax

amrex::Real PlasmaInjector::xmax

◆ xmin

amrex::Real PlasmaInjector::xmin

◆ y_cut

amrex::Real PlasmaInjector::y_cut = std::numeric_limits<amrex::Real>::max()

◆ y_m

amrex::Real PlasmaInjector::y_m

◆ y_rms

amrex::Real PlasmaInjector::y_rms

◆ ymax

amrex::Real PlasmaInjector::ymax

◆ ymin

amrex::Real PlasmaInjector::ymin

◆ z_cut

amrex::Real PlasmaInjector::z_cut = std::numeric_limits<amrex::Real>::max()

◆ z_m

amrex::Real PlasmaInjector::z_m

◆ z_rms

amrex::Real PlasmaInjector::z_rms

◆ z_shift

amrex::Real PlasmaInjector::z_shift = 0.0

initialize from an openPMD file

◆ zmax

amrex::Real PlasmaInjector::zmax

◆ zmin

amrex::Real PlasmaInjector::zmin

The documentation for this class was generated from the following files: