diff options
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 96 |
1 files changed, 64 insertions, 32 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index c5c44f9b6..e5cb281e7 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -552,10 +552,21 @@ PhysicalParticleContainer::AddGaussianBeam ( } // Add the temporary CPU vectors to the particle structure np = particle_z.size(); - AddNParticles(0,np, - particle_x.dataPtr(), particle_y.dataPtr(), particle_z.dataPtr(), - particle_ux.dataPtr(), particle_uy.dataPtr(), particle_uz.dataPtr(), - 1, particle_w.dataPtr(), 0, nullptr, 1); + amrex::Vector<ParticleReal> xp(particle_x.data(), particle_x.data() + np); + amrex::Vector<ParticleReal> yp(particle_y.data(), particle_y.data() + np); + amrex::Vector<ParticleReal> zp(particle_z.data(), particle_z.data() + np); + amrex::Vector<ParticleReal> uxp(particle_ux.data(), particle_ux.data() + np); + amrex::Vector<ParticleReal> uyp(particle_uy.data(), particle_uy.data() + np); + amrex::Vector<ParticleReal> uzp(particle_uz.data(), particle_uz.data() + np); + + amrex::Vector<amrex::Vector<ParticleReal>> attr; + amrex::Vector<ParticleReal> wp(particle_w.data(), particle_w.data() + np); + attr.push_back(wp); + + amrex::Vector<amrex::Vector<int>> attr_int; + + AddNParticles(0, np, xp, yp, zp, uxp, uyp, uzp, + 1, attr, 0, attr_int, 1); } void @@ -660,10 +671,21 @@ PhysicalParticleContainer::AddPlasmaFromFile(ParticleReal q_tot, } } // IO Processor auto const np = particle_z.size(); - AddNParticles(0, np, - particle_x.dataPtr(), particle_y.dataPtr(), particle_z.dataPtr(), - particle_ux.dataPtr(), particle_uy.dataPtr(), particle_uz.dataPtr(), - 1, particle_w.dataPtr(), 0, nullptr, 1); + amrex::Vector<ParticleReal> xp(particle_x.data(), particle_x.data() + np); + amrex::Vector<ParticleReal> yp(particle_y.data(), particle_y.data() + np); + amrex::Vector<ParticleReal> zp(particle_z.data(), particle_z.data() + np); + amrex::Vector<ParticleReal> uxp(particle_ux.data(), particle_ux.data() + np); + amrex::Vector<ParticleReal> uyp(particle_uy.data(), particle_uy.data() + np); + amrex::Vector<ParticleReal> uzp(particle_uz.data(), particle_uz.data() + np); + + amrex::Vector<amrex::Vector<ParticleReal>> attr; + amrex::Vector<ParticleReal> wp(particle_w.data(), particle_w.data() + np); + attr.push_back(wp); + + amrex::Vector<amrex::Vector<int>> attr_int; + + AddNParticles(0, np, xp, yp, zp, uxp, uyp, uzp, + 1, attr, 0, attr_int, 1); #endif // WARPX_USE_OPENPMD ignore_unused(q_tot, z_shift); @@ -822,14 +844,16 @@ PhysicalParticleContainer::AddParticles (int lev) plasma_injector->single_particle_u[1], plasma_injector->single_particle_u[2]); } - AddNParticles(lev, 1, - &(plasma_injector->single_particle_pos[0]), - &(plasma_injector->single_particle_pos[1]), - &(plasma_injector->single_particle_pos[2]), - &(plasma_injector->single_particle_u[0]), - &(plasma_injector->single_particle_u[1]), - &(plasma_injector->single_particle_u[2]), - 1, &(plasma_injector->single_particle_weight), 0, nullptr, 0); + amrex::Vector<ParticleReal> xp = {plasma_injector->single_particle_pos[0]}; + amrex::Vector<ParticleReal> yp = {plasma_injector->single_particle_pos[1]}; + amrex::Vector<ParticleReal> zp = {plasma_injector->single_particle_pos[2]}; + amrex::Vector<ParticleReal> uxp = {plasma_injector->single_particle_u[0]}; + amrex::Vector<ParticleReal> uyp = {plasma_injector->single_particle_u[1]}; + amrex::Vector<ParticleReal> uzp = {plasma_injector->single_particle_u[2]}; + amrex::Vector<amrex::Vector<ParticleReal>> attr = {{plasma_injector->single_particle_weight}}; + amrex::Vector<amrex::Vector<int>> attr_int; + AddNParticles(lev, 1, xp, yp, zp, uxp, uyp, uzp, + 1, attr, 0, attr_int, 0); return; } @@ -844,14 +868,17 @@ PhysicalParticleContainer::AddParticles (int lev) plasma_injector->multiple_particles_uz[i]); } } + amrex::Vector<amrex::Vector<ParticleReal>> attr; + attr.push_back(plasma_injector->multiple_particles_weight); + amrex::Vector<amrex::Vector<int>> attr_int; AddNParticles(lev, plasma_injector->multiple_particles_pos_x.size(), - plasma_injector->multiple_particles_pos_x.dataPtr(), - plasma_injector->multiple_particles_pos_y.dataPtr(), - plasma_injector->multiple_particles_pos_z.dataPtr(), - plasma_injector->multiple_particles_ux.dataPtr(), - plasma_injector->multiple_particles_uy.dataPtr(), - plasma_injector->multiple_particles_uz.dataPtr(), - 1, plasma_injector->multiple_particles_weight.dataPtr(), 0, nullptr, 0); + plasma_injector->multiple_particles_pos_x, + plasma_injector->multiple_particles_pos_y, + plasma_injector->multiple_particles_pos_z, + plasma_injector->multiple_particles_ux, + plasma_injector->multiple_particles_uy, + plasma_injector->multiple_particles_uz, + 1, attr, 0, attr_int, 0); return; } @@ -2409,17 +2436,22 @@ PhysicalParticleContainer::SplitParticles (int lev) // they are not re-split when entering a higher level // AddNParticles calls Redistribute, so that particles // in pctmp_split are in the proper grids and tiles + amrex::Vector<ParticleReal> xp(psplit_x.data(), psplit_x.data() + np_split_to_add); + amrex::Vector<ParticleReal> yp(psplit_y.data(), psplit_y.data() + np_split_to_add); + amrex::Vector<ParticleReal> zp(psplit_z.data(), psplit_z.data() + np_split_to_add); + amrex::Vector<ParticleReal> uxp(psplit_ux.data(), psplit_ux.data() + np_split_to_add); + amrex::Vector<ParticleReal> uyp(psplit_uy.data(), psplit_uy.data() + np_split_to_add); + amrex::Vector<ParticleReal> uzp(psplit_uz.data(), psplit_uz.data() + np_split_to_add); + amrex::Vector<ParticleReal> wp(psplit_w.data(), psplit_w.data() + np_split_to_add); + + amrex::Vector<amrex::Vector<ParticleReal>> attr; + attr.push_back(wp); + amrex::Vector<amrex::Vector<int>> attr_int; pctmp_split.AddNParticles(lev, np_split_to_add, - psplit_x.dataPtr(), - psplit_y.dataPtr(), - psplit_z.dataPtr(), - psplit_ux.dataPtr(), - psplit_uy.dataPtr(), - psplit_uz.dataPtr(), - 1, - psplit_w.dataPtr(), - 0, nullptr, + xp, yp, zp, uxp, uyp, uzp, + 1, attr, + 0, attr_int, 1, NoSplitParticleID); // Copy particles from tmp to current particle container addParticles(pctmp_split,1); |