diff options
author | 2021-02-25 14:36:25 -0800 | |
---|---|---|
committer | 2021-02-25 14:36:25 -0800 | |
commit | 6e4affcb49e8d067f29c34afdce3ad494e3290b2 (patch) | |
tree | 3e2e79cdc1be43020b618a73803df4bbbc819016 /Source/Initialization/PlasmaInjector.cpp | |
parent | cefec517b2c0fdfc955ac86cff12a6f42964276c (diff) | |
download | WarpX-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.cpp | 21 |
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); |