aboutsummaryrefslogtreecommitdiff
path: root/Source/Initialization/PlasmaInjector.cpp
diff options
context:
space:
mode:
authorGravatar David Grote <grote1@llnl.gov> 2021-02-25 14:36:25 -0800
committerGravatar GitHub <noreply@github.com> 2021-02-25 14:36:25 -0800
commit6e4affcb49e8d067f29c34afdce3ad494e3290b2 (patch)
tree3e2e79cdc1be43020b618a73803df4bbbc819016 /Source/Initialization/PlasmaInjector.cpp
parentcefec517b2c0fdfc955ac86cff12a6f42964276c (diff)
downloadWarpX-6e4affcb49e8d067f29c34afdce3ad494e3290b2.tar.gz
WarpX-6e4affcb49e8d067f29c34afdce3ad494e3290b2.tar.zst
WarpX-6e4affcb49e8d067f29c34afdce3ad494e3290b2.zip
Add multiple particles source (#1718)
* Added multiple particles injection source * Added documentation for MultipleParticles
Diffstat (limited to 'Source/Initialization/PlasmaInjector.cpp')
-rw-r--r--Source/Initialization/PlasmaInjector.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/Source/Initialization/PlasmaInjector.cpp b/Source/Initialization/PlasmaInjector.cpp
index 50e7a5b68..e3cbd4aee 100644
--- a/Source/Initialization/PlasmaInjector.cpp
+++ b/Source/Initialization/PlasmaInjector.cpp
@@ -151,6 +151,27 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
getWithParser(pp, "single_particle_weight", single_particle_weight);
add_single_particle = true;
return;
+ } else if (part_pos_s == "multipleparticles") {
+ pp.getarr("multiple_particles_pos_x", multiple_particles_pos_x);
+ pp.getarr("multiple_particles_pos_y", multiple_particles_pos_y);
+ pp.getarr("multiple_particles_pos_z", multiple_particles_pos_z);
+ pp.getarr("multiple_particles_vel_x", multiple_particles_vel_x);
+ pp.getarr("multiple_particles_vel_y", multiple_particles_vel_y);
+ pp.getarr("multiple_particles_vel_z", multiple_particles_vel_z);
+ pp.getarr("multiple_particles_weight", multiple_particles_weight);
+ AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
+ (multiple_particles_pos_x.size() == multiple_particles_pos_y.size() &
+ multiple_particles_pos_x.size() == multiple_particles_pos_z.size() &
+ multiple_particles_pos_x.size() == multiple_particles_vel_x.size() &
+ multiple_particles_pos_x.size() == multiple_particles_vel_y.size() &
+ multiple_particles_pos_x.size() == multiple_particles_vel_z.size() &
+ multiple_particles_pos_x.size() == multiple_particles_weight.size()),
+ "Error: The multiple particles source quantities must all have the same number of elements");
+ for (auto& vx : multiple_particles_vel_x) { vx *= PhysConst::c; }
+ for (auto& vy : multiple_particles_vel_y) { vy *= PhysConst::c; }
+ for (auto& vz : multiple_particles_vel_z) { vz *= PhysConst::c; }
+ add_multiple_particles = true;
+ return;
} else if (part_pos_s == "gaussian_beam") {
getWithParser(pp, "x_m", x_m);
getWithParser(pp, "y_m", y_m);