MCPcopy Create free account
hub / github.com/BLAST-WarpX/warpx / AddParticles

Method AddParticles

Source/Particles/ParticleCreation/AddParticles.cpp:194–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

192}
193
194void
195PhysicalParticleContainer::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) {

Callers

nothing calls this directly

Calls 2

sizeMethod · 0.80
doInjectionMethod · 0.80

Tested by

no test coverage detected