9#ifndef WARPX_INJECTOR_DENSITY_H_
10#define WARPX_INJECTOR_DENSITY_H_
89 const double z_start =
p[0];
90 const double ramp_up =
p[1];
91 const double plateau =
p[2];
92 const double ramp_down =
p[3];
93 const double rc =
p[4];
94 const double n0 =
p[5];
100 if ((z-z_start)>=0 and
101 (z-z_start)<ramp_up ) {
103 }
else if ((z-z_start)>=ramp_up and
104 (z-z_start)< ramp_up+plateau ) {
106 }
else if ((z-z_start)>=ramp_up+plateau and
107 (z-z_start)< ramp_up+plateau+ramp_down) {
108 n = 0.5*(1.+std::cos(
MathConst::pi*((z-z_start)-ramp_up-plateau)/ramp_down));
113 n *= n0*(1.+4.*(x*x+y*y)/(kp*kp*rc*rc*rc*rc));
117 amrex::Abort(
"InjectorDensityPredefined: how did we get here?");
161#if (AMREX_SPACEDIM < 3)
164#if (AMREX_SPACEDIM == 1)
166#elif defined(WARPX_DIM_RZ)
168#elif defined(WARPX_DIM_XZ)
213 object(t,a_file_name,a_geom,a_distributed)
253 return object.parser.getDensity(x,y,z);
257 return object.constant.getDensity(x,y,z);
261 return object.predefined.getDensity(x,y,z);
265 return object.fromfile.getDensity(x,y,z);
290 :
fromfile(a_file_name, a_geom, a_distributed) {}
297#if defined(AMREX_USE_OMP) && !defined(AMREX_USE_GPU)
#define AMREX_GPU_HOST_DEVICE
Definition ExternalField.H:183
constexpr auto c
vacuum speed of light [m/s]
Definition constant.H:153
constexpr auto epsilon_0
vacuum permittivity: dielectric permittivity of vacuum [F/m]
Definition constant.H:156
constexpr auto m_e
electron mass [kg]
Definition constant.H:165
constexpr auto q_e
elementary charge [C]
Definition constant.H:162
constexpr auto pi
ratio of a circle's circumference to its diameter
Definition constant.H:29
__host__ __device__ void ignore_unused(const Ts &...)
void Abort(const std::string &msg)
Companion class for ExternalFieldReader.
Definition ExternalField.H:84
Definition InjectorDensity.H:33
InjectorDensityConstant(amrex::Real a_rho) noexcept
Definition InjectorDensity.H:34
amrex::Real m_rho
Definition InjectorDensity.H:45
AMREX_GPU_HOST_DEVICE amrex::Real getDensity(amrex::Real, amrex::Real, amrex::Real) const noexcept
Definition InjectorDensity.H:39
Definition InjectorDensity.H:305
void operator()(InjectorDensity *p) const
Definition InjectorDensity.H:306
Definition InjectorDensity.H:130
ExternalFieldReader * m_external_field_reader
Definition InjectorDensity.H:177
bool distributed() const
Definition InjectorDensity.cpp:194
AMREX_GPU_HOST_DEVICE amrex::Real getDensity(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorDensity.H:159
void prepare(amrex::BoxArray const &grids, amrex::DistributionMapping const &dmap, amrex::IntVect const &ngrow, std::function< amrex::Real(amrex::Real)> const &get_zlab)
Definition InjectorDensity.cpp:167
void clear()
Definition InjectorDensity.cpp:161
InjectorDensityFromFile(std::string const &a_file_name, amrex::Geometry const &a_geom, bool a_distributed)
Definition InjectorDensity.cpp:152
ExternalFieldView m_external_field_view
Definition InjectorDensity.H:176
Definition InjectorDensity.H:190
amrex::Vector< InjectorDensity * > inj_rho_omp
Definition InjectorDensity.H:299
~InjectorDensity()=default
Type type
Definition InjectorDensity.H:277
InjectorDensity(InjectorDensityPredefined *t, std::string const &a_species_name)
Definition InjectorDensity.H:204
InjectorDensity(InjectorDensityFromFile *t, std::string const &a_file_name, amrex::Geometry const &a_geom, bool a_distributed)
Definition InjectorDensity.H:210
Type
Definition InjectorDensity.H:276
@ parser
Definition InjectorDensity.H:276
@ constant
Definition InjectorDensity.H:276
@ predefined
Definition InjectorDensity.H:276
@ fromfile
Definition InjectorDensity.H:276
void operator=(InjectorDensity const &)=delete
AMREX_GPU_HOST_DEVICE amrex::Real getDensity(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorDensity.H:247
InjectorDensity(InjectorDensityConstant *t, amrex::Real a_rho)
Definition InjectorDensity.H:192
std::unique_ptr< void, amrex::DataDeleter > inj_rho_data
Definition InjectorDensity.H:298
Object object
Definition InjectorDensity.H:296
void prepare(amrex::BoxArray const &grids, amrex::DistributionMapping const &dmap, amrex::IntVect const &ngrow, std::function< amrex::Real(amrex::Real)> const &get_zlab)
Definition InjectorDensity.cpp:46
InjectorDensity(InjectorDensityParser *t, amrex::ParserExecutor< 3 > const &a_parser)
Definition InjectorDensity.H:198
bool needPreparation() const
Definition InjectorDensity.cpp:101
InjectorDensity(InjectorDensity const &)=delete
void clear()
Definition InjectorDensity.cpp:23
bool distributed() const
Definition InjectorDensity.cpp:110
InjectorDensity(InjectorDensity &&)=delete
Definition InjectorDensity.H:50
InjectorDensityParser(amrex::ParserExecutor< 3 > const &a_parser) noexcept
Definition InjectorDensity.H:51
amrex::ParserExecutor< 3 > m_parser
Definition InjectorDensity.H:62
AMREX_GPU_HOST_DEVICE amrex::Real getDensity(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorDensity.H:57
Definition InjectorDensity.H:67
Profile profile
Definition InjectorDensity.H:124
InjectorDensityPredefined(std::string const &a_species_name)
Definition InjectorDensity.cpp:119
Profile
Definition InjectorDensity.H:123
@ parabolic_channel
Definition InjectorDensity.H:123
@ null
Definition InjectorDensity.H:123
amrex::GpuArray< amrex::Real, 6 > p
Definition InjectorDensity.H:125
void clear()
Definition InjectorDensity.cpp:148
AMREX_GPU_HOST_DEVICE amrex::Real getDensity(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorDensity.H:75
Definition InjectorDensity.H:281
InjectorDensityConstant constant
Definition InjectorDensity.H:291
Object(InjectorDensityParser *, amrex::ParserExecutor< 3 > const &a_parser) noexcept
Definition InjectorDensity.H:284
InjectorDensityPredefined predefined
Definition InjectorDensity.H:293
InjectorDensityFromFile fromfile
Definition InjectorDensity.H:294
Object(InjectorDensityFromFile *, std::string const &a_file_name, amrex::Geometry const &a_geom, bool a_distributed)
Definition InjectorDensity.H:288
Object(InjectorDensityPredefined *, std::string const &a_species_name)
Definition InjectorDensity.H:286
InjectorDensityParser parser
Definition InjectorDensity.H:292
Object(InjectorDensityConstant *, amrex::Real a_rho) noexcept
Definition InjectorDensity.H:282