aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp96
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);