WarpX
Loading...
Searching...
No Matches
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 (int li) const
InjectorFluxgetInjectorFlux () const
InjectorMomentumgetInjectorMomentumDevice () const
InjectorMomentumgetInjectorMomentumHost () const
void prepare (amrex::BoxArray const &grids, amrex::DistributionMapping const &dmap, amrex::IntVect const &ngrow, std::function< amrex::Real(amrex::Real)> const &get_zlab)
void prepare (amrex::RealBox const &pbox, int moving_dir, int moving_sign, std::function< amrex::Real(amrex::Real)> const &get_zlab)
bool distributedInjectorDensity () const

Public Attributes

int num_particles_per_cell
amrex::Real num_particles_per_cell_real
amrex::Vector< int > num_particles_per_cell_each_dim
bool add_single_particle = false
amrex::Vector< amrex::ParticleRealsingle_particle_pos
amrex::Vector< amrex::ParticleRealsingle_particle_u
amrex::ParticleReal single_particle_weight
bool add_multiple_particles = false
amrex::Vector< amrex::ParticleRealmultiple_particles_pos_x
amrex::Vector< amrex::ParticleRealmultiple_particles_pos_y
amrex::Vector< amrex::ParticleRealmultiple_particles_pos_z
amrex::Vector< amrex::ParticleRealmultiple_particles_ux
amrex::Vector< amrex::ParticleRealmultiple_particles_uy
amrex::Vector< amrex::ParticleRealmultiple_particles_uz
amrex::Vector< amrex::ParticleRealmultiple_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
amrex::Real N_tot = 0.0
long npart
int do_symmetrize = 0
int symmetrization_order = 4
bool do_focusing = false
amrex::Real focal_distance
bool do_rotation = false
bool do_rotation_momenta = false
amrex::Real rotation_angle
amrex::Vector< amrex::Realrotation_axis
bool external_file = false
amrex::Real z_shift = 0.0
 initialize from an openPMD file
std::any m_openpmd_input_series
 additional z offset for particle positions
amrex::Real surface_flux_pos
amrex::Real flux_tmin = -1.
amrex::Real flux_tmax = -1.
int flux_normal_axis
int flux_direction
amrex::Real radial_numpercell_power
bool m_inject_from_eb = false
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
amrex::Geometry m_geom
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
bool inj_rho_distributed = false
bool inj_rho_prepared = false
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< 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

◆ distributedInjectorDensity()

bool PlasmaInjector::distributedInjectorDensity ( ) const
inlinenodiscard

◆ doFluxInjection()

bool PlasmaInjector::doFluxInjection ( ) const
inlinenodiscardnoexcept

◆ doInjection()

bool PlasmaInjector::doInjection ( ) const
inlinenodiscardnoexcept

◆ getInjectorDensity()

InjectorDensity * PlasmaInjector::getInjectorDensity ( int li) const
nodiscard

◆ getInjectorFlux()

InjectorFlux * PlasmaInjector::getInjectorFlux ( ) const
nodiscard

◆ getInjectorFluxPosition()

InjectorPosition * PlasmaInjector::getInjectorFluxPosition ( ) const
nodiscard

◆ getInjectorMomentumDevice()

InjectorMomentum * PlasmaInjector::getInjectorMomentumDevice ( ) const
nodiscard

◆ getInjectorMomentumHost()

InjectorMomentum * PlasmaInjector::getInjectorMomentumHost ( ) const
nodiscard

◆ getInjectorPosition()

InjectorPosition * PlasmaInjector::getInjectorPosition ( ) const
nodiscard

◆ getMomentum()

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

◆ insideBounds()

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

◆ 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
nodiscardnoexcept

◆ parseFlux()

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

◆ prepare() [1/2]

void PlasmaInjector::prepare ( amrex::BoxArray const & grids,
amrex::DistributionMapping const & dmap,
amrex::IntVect const & ngrow,
std::function< amrex::Real(amrex::Real)> const & get_zlab )

◆ prepare() [2/2]

void PlasmaInjector::prepare ( amrex::RealBox const & pbox,
int moving_dir,
int moving_sign,
std::function< amrex::Real(amrex::Real)> const & get_zlab )

◆ 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_rotation

bool PlasmaInjector::do_rotation = false

◆ do_rotation_momenta

bool PlasmaInjector::do_rotation_momenta = 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

◆ inj_rho_distributed

bool PlasmaInjector::inj_rho_distributed = false
protected

◆ inj_rho_prepared

bool PlasmaInjector::inj_rho_prepared = false
protected

◆ m_geom

amrex::Geometry PlasmaInjector::m_geom
protected

◆ m_inject_from_eb

bool PlasmaInjector::m_inject_from_eb = false

◆ m_openpmd_input_series

std::any 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

◆ N_tot

amrex::Real PlasmaInjector::N_tot = 0.0

◆ 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

◆ radial_numpercell_power

amrex::Real PlasmaInjector::radial_numpercell_power

◆ rotation_angle

amrex::Real PlasmaInjector::rotation_angle

◆ rotation_axis

amrex::Vector<amrex::Real> PlasmaInjector::rotation_axis

◆ 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

◆ 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: