aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ilian Kara-Mostefa <95044023+IlianCS@users.noreply.github.com> 2023-08-14 13:57:59 -0700
committerGravatar GitHub <noreply@github.com> 2023-08-14 13:57:59 -0700
commit1b58d52a8ab84ccfce1a992c5d5d65f2aea97a0e (patch)
tree0c17310c7ac45cf26b80eac983824c7c19081e02
parent721181539fb4f074d11b878e448202178bee87b2 (diff)
downloadWarpX-1b58d52a8ab84ccfce1a992c5d5d65f2aea97a0e.tar.gz
WarpX-1b58d52a8ab84ccfce1a992c5d5d65f2aea97a0e.tar.zst
WarpX-1b58d52a8ab84ccfce1a992c5d5d65f2aea97a0e.zip
t_lab optionally imposed for externally loaded species in the boosted frame (#4153)
* added guidelines * added impose t_lab from file as an option * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * removed unused comment * fixed unconsistent variable type * removed space * rearranged code changes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-rw-r--r--Docs/source/usage/parameters.rst1
-rw-r--r--Source/Particles/PhysicalParticleContainer.H7
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp12
3 files changed, 15 insertions, 5 deletions
diff --git a/Docs/source/usage/parameters.rst b/Docs/source/usage/parameters.rst
index 87c2ca16f..6522d1b72 100644
--- a/Docs/source/usage/parameters.rst
+++ b/Docs/source/usage/parameters.rst
@@ -717,6 +717,7 @@ Particle initialization
``<species_name>.charge`` (`double`) optional (default is read from openPMD file) when set this will be the charge of the physical particle represented by the injected macroparticles.
``<species_name>.mass`` (`double`) optional (default is read from openPMD file) when set this will be the charge of the physical particle represented by the injected macroparticles.
``<species_name>.z_shift`` (`double`) optional (default is no shift) when set this value will be added to the longitudinal, ``z``, position of the particles.
+ ``<species_name>.impose_t_lab_from_file`` (`bool`) optional (default is false) only read if warpx.gamma_boost > 1., it allows to set t_lab for the Lorentz Transform as being the time stored in the openPMD file.
Warning: ``q_tot!=0`` is not supported with the ``external_file`` injection style. If a value is provided, it is ignored and no re-scaling is done.
The external file must include the species ``openPMD::Record`` labeled ``position`` and ``momentum`` (`double` arrays), with dimensionality and units set via ``openPMD::setUnitDimension`` and ``setUnitSI``.
If the external file also contains ``openPMD::Records`` for ``mass`` and ``charge`` (constant `double` scalars) then the species will use these, unless overwritten in the input file (see ``<species_name>.mass``, ``<species_name>.charge`` or ``<species_name>.species_type``).
diff --git a/Source/Particles/PhysicalParticleContainer.H b/Source/Particles/PhysicalParticleContainer.H
index 08682c581..8e3bfdb86 100644
--- a/Source/Particles/PhysicalParticleContainer.H
+++ b/Source/Particles/PhysicalParticleContainer.H
@@ -200,7 +200,7 @@ public:
void MapParticletoBoostedFrame (amrex::ParticleReal& x, amrex::ParticleReal& y, amrex::ParticleReal& z,
amrex::ParticleReal& ux, amrex::ParticleReal& uy, amrex::ParticleReal& uz,
- amrex::ParticleReal t_lab = 0._prt);
+ amrex::Real t_lab = 0._prt);
void AddGaussianBeam (
const amrex::Real x_m, const amrex::Real y_m, const amrex::Real z_m,
@@ -226,7 +226,7 @@ public:
amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uy,
amrex::Gpu::HostVector<amrex::ParticleReal>& particle_uz,
amrex::Gpu::HostVector<amrex::ParticleReal>& particle_w,
- amrex::ParticleReal t_lab= 0._prt);
+ amrex::Real t_lab= 0._prt);
/**
* \brief Default initialize runtime attributes in a tile. This routine does not initialize the
@@ -359,6 +359,9 @@ protected:
bool do_backward_propagation = false;
bool m_rz_random_theta = true;
+ // Impose t_lab from the openPMD file for externally loaded species
+ bool impose_t_lab_from_file = false;
+
Resampling m_resampler;
// Inject particles during the whole simulation
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp
index e5cb281e7..7fd85833e 100644
--- a/Source/Particles/PhysicalParticleContainer.cpp
+++ b/Source/Particles/PhysicalParticleContainer.cpp
@@ -393,7 +393,7 @@ void PhysicalParticleContainer::InitData ()
}
void PhysicalParticleContainer::MapParticletoBoostedFrame (
- ParticleReal& x, ParticleReal& y, ParticleReal& z, ParticleReal& ux, ParticleReal& uy, ParticleReal& uz, ParticleReal t_lab)
+ ParticleReal& x, ParticleReal& y, ParticleReal& z, ParticleReal& ux, ParticleReal& uy, ParticleReal& uz, Real t_lab)
{
// Map the particles from the lab frame to the boosted frame.
// This boosts the particle to the lab frame and calculates
@@ -592,7 +592,13 @@ PhysicalParticleContainer::AddPlasmaFromFile(ParticleReal q_tot,
// assumption asserts: see PlasmaInjector
openPMD::Iteration it = series->iterations.begin()->second;
- double const t_lab = it.time<double>() * it.timeUnitSI();
+ const ParmParse pp_species_name(species_name);
+ pp_species_name.query("impose_t_lab_from_file", impose_t_lab_from_file);
+ double t_lab = 0._prt;
+ if (impose_t_lab_from_file) {
+ // Impose t_lab as being the time stored in the openPMD file
+ t_lab = it.time<double>() * it.timeUnitSI();
+ }
std::string const ps_name = it.particles.begin()->first;
openPMD::ParticleSpecies ps = it.particles.begin()->second;
@@ -816,7 +822,7 @@ PhysicalParticleContainer::CheckAndAddParticle (
Gpu::HostVector<ParticleReal>& particle_uy,
Gpu::HostVector<ParticleReal>& particle_uz,
Gpu::HostVector<ParticleReal>& particle_w,
- ParticleReal t_lab)
+ Real t_lab)
{
if (WarpX::gamma_boost > 1.) {
MapParticletoBoostedFrame(x, y, z, ux, uy, uz, t_lab);