| 192 | } |
| 193 | |
| 194 | void |
| 195 | PhysicalParticleContainer::AddParticles (int lev) |
| 196 | { |
| 197 | ABLASTR_PROFILE("PhysicalParticleContainer::AddParticles()"); |
| 198 | |
| 199 | for (auto const& plasma_injector : plasma_injectors) { |
| 200 | |
| 201 | if (plasma_injector->add_single_particle) { |
| 202 | if (WarpX::gamma_boost > 1.) { |
| 203 | MapParticletoBoostedFrame(plasma_injector->single_particle_pos[0], |
| 204 | plasma_injector->single_particle_pos[1], |
| 205 | plasma_injector->single_particle_pos[2], |
| 206 | plasma_injector->single_particle_u[0], |
| 207 | plasma_injector->single_particle_u[1], |
| 208 | plasma_injector->single_particle_u[2]); |
| 209 | } |
| 210 | const amrex::Vector<ParticleReal> xp = {plasma_injector->single_particle_pos[0]}; |
| 211 | const amrex::Vector<ParticleReal> yp = {plasma_injector->single_particle_pos[1]}; |
| 212 | const amrex::Vector<ParticleReal> zp = {plasma_injector->single_particle_pos[2]}; |
| 213 | const amrex::Vector<ParticleReal> uxp = {plasma_injector->single_particle_u[0]}; |
| 214 | const amrex::Vector<ParticleReal> uyp = {plasma_injector->single_particle_u[1]}; |
| 215 | const amrex::Vector<ParticleReal> uzp = {plasma_injector->single_particle_u[2]}; |
| 216 | const amrex::Vector<amrex::Vector<ParticleReal>> attr = {{plasma_injector->single_particle_weight}}; |
| 217 | const amrex::Vector<amrex::Vector<int>> attr_int; |
| 218 | AddNParticles(lev, 1, xp, yp, zp, uxp, uyp, uzp, |
| 219 | 1, attr, 0, attr_int, 0); |
| 220 | return; |
| 221 | } |
| 222 | |
| 223 | if (plasma_injector->add_multiple_particles) { |
| 224 | if (WarpX::gamma_boost > 1.) { |
| 225 | for (int i=0 ; i < plasma_injector->multiple_particles_pos_x.size() ; i++) { |
| 226 | MapParticletoBoostedFrame(plasma_injector->multiple_particles_pos_x[i], |
| 227 | plasma_injector->multiple_particles_pos_y[i], |
| 228 | plasma_injector->multiple_particles_pos_z[i], |
| 229 | plasma_injector->multiple_particles_ux[i], |
| 230 | plasma_injector->multiple_particles_uy[i], |
| 231 | plasma_injector->multiple_particles_uz[i]); |
| 232 | } |
| 233 | } |
| 234 | amrex::Vector<amrex::Vector<ParticleReal>> attr; |
| 235 | attr.push_back(plasma_injector->multiple_particles_weight); |
| 236 | const amrex::Vector<amrex::Vector<int>> attr_int; |
| 237 | AddNParticles(lev, static_cast<int>(plasma_injector->multiple_particles_pos_x.size()), |
| 238 | plasma_injector->multiple_particles_pos_x, |
| 239 | plasma_injector->multiple_particles_pos_y, |
| 240 | plasma_injector->multiple_particles_pos_z, |
| 241 | plasma_injector->multiple_particles_ux, |
| 242 | plasma_injector->multiple_particles_uy, |
| 243 | plasma_injector->multiple_particles_uz, |
| 244 | 1, attr, 0, attr_int, 0); |
| 245 | } |
| 246 | |
| 247 | if (plasma_injector->gaussian_beam) { |
| 248 | AddGaussianBeam(*plasma_injector); |
| 249 | } |
| 250 | |
| 251 | if (plasma_injector->external_file) { |
nothing calls this directly
no test coverage detected