Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/particles/plasma/PlasmaParticleContainer.H
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,14 @@ public:
* \param[in] a_radius plasma radius. Only particles with x**2+y**2<a_radius**2 are injected
* \param[in] a_hollow_core_radius hollow core plasma radius.
* Only particles with x**2+y**2>a_hollow_core_radius**2 are injected
* \param[in] a_temperature_width Spatial extent of the temperature profile, assuming Gaussian shape.
*/
void InitParticles (
const amrex::RealVect& a_thermal_momentum_std,
const amrex::RealVect& a_thermal_momentum_mean,
const amrex::Real a_radius,
const amrex::Real a_hollow_core_radius);
const amrex::Real a_hollow_core_radius,
const amrex::Real a_temperature_width);

/** Initialize ADK prefactors of ionizable plasmas
*
Expand Down Expand Up @@ -265,6 +267,7 @@ public:
amrex::RealVect m_u_std {0,0,0}; /**< Thermal momentum in each direction normalized by m*c */
amrex::Real m_temperature_in_ev {0.}; /**< Temperature of the plasma in eV */
/** whether to add a neutralizing background of immobile particles of opposite charge */
amrex::Real m_temperature_width {std::numeric_limits<amrex::Real>::max()};
bool m_neutralize_background = true;

// general:
Expand Down
3 changes: 2 additions & 1 deletion src/particles/plasma/PlasmaParticleContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ PlasmaParticleContainer::ReadParameters ()
queryWithParser(pp, "u_mean", m_u_mean);
bool thermal_momentum_is_specified = queryWithParser(pp, "u_std", m_u_std);
bool temperature_is_specified = queryWithParser(pp, "temperature_in_ev", m_temperature_in_ev);
queryWithParser(pp, "temperature_width", m_temperature_width);
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
!(temperature_is_specified && thermal_momentum_is_specified),
"Please specify exlusively either a temperature or the thermal momentum");
Expand Down Expand Up @@ -280,7 +281,7 @@ PlasmaParticleContainer::InitData (const amrex::Vector<amrex::Geometry>& geom3d)
"to use the fine plasma patch feature");
}

InitParticles(m_u_std, m_u_mean, m_radius, m_hollow_core_radius);
InitParticles(m_u_std, m_u_mean, m_radius, m_hollow_core_radius, m_temperature_width);

if (m_insitu_period.isNonZero()) {
#ifdef HIPACE_USE_OPENPMD
Expand Down
6 changes: 5 additions & 1 deletion src/particles/plasma/PlasmaParticleContainerInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ PlasmaParticleContainer::
InitParticles (const amrex::RealVect& a_u_std,
const amrex::RealVect& a_u_mean,
const amrex::Real a_radius,
const amrex::Real a_hollow_core_radius)
const amrex::Real a_hollow_core_radius,
const amrex::Real a_temperature_width)
{
HIPACE_PROFILE("PlasmaParticleContainer::InitParticles()");
using namespace amrex::literals;
Expand Down Expand Up @@ -305,6 +306,9 @@ InitParticles (const amrex::RealVect& a_u_std,

amrex::Real u[3] = {0.,0.,0.};
ParticleUtil::get_gaussian_random_momentum(u, a_u_mean, a_u_std, engine);
u[0] *= std::exp(-(x*x+y*y)/a_temperature_width/a_temperature_width);
u[1] *= std::exp(-(x*x+y*y)/a_temperature_width/a_temperature_width);
u[2] *= std::exp(-(x*x+y*y)/a_temperature_width/a_temperature_width);

ptd.rdata(PlasmaIdx::ux)[pidx] = u[0];
ptd.rdata(PlasmaIdx::uy)[pidx] = u[1];
Expand Down
Loading