aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/MultiParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Andrew Myers <atmyers2@gmail.com> 2020-02-03 12:47:04 -0800
committerGravatar Andrew Myers <atmyers2@gmail.com> 2020-02-03 12:47:04 -0800
commit0818458c82b7e7862773efa827a983585d7da79f (patch)
tree68d353aac9fb1621533c9e3a05769d9d3da684cc /Source/Particles/MultiParticleContainer.cpp
parente14fda9c76edcb63d5748f1202952f17bd90c078 (diff)
downloadWarpX-0818458c82b7e7862773efa827a983585d7da79f.tar.gz
WarpX-0818458c82b7e7862773efa827a983585d7da79f.tar.zst
WarpX-0818458c82b7e7862773efa827a983585d7da79f.zip
helper function for setting new particle IDs
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r--Source/Particles/MultiParticleContainer.cpp30
1 files changed, 6 insertions, 24 deletions
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp
index 45a23c56b..a4b6d0e36 100644
--- a/Source/Particles/MultiParticleContainer.cpp
+++ b/Source/Particles/MultiParticleContainer.cpp
@@ -642,14 +642,13 @@ void
MultiParticleContainer::doFieldIonization ()
{
BL_PROFILE("MPC::doFieldIonization");
+
// Loop over all species.
// Ionized particles in pc_source create particles in pc_product
- for (auto& pc_source : allcontainers){
-
- // Skip if not ionizable
+ for (auto& pc_source : allcontainers)
+ {
if (!pc_source->do_field_ionization){ continue; }
- // Get product species
auto& pc_product = allcontainers[pc_source->ionization_product];
SmartCopyFactory copy_factory(*pc_source, *pc_product);
@@ -661,7 +660,6 @@ MultiParticleContainer::doFieldIonization ()
for (int lev = 0; lev <= pc_source->finestLevel(); ++lev)
{
- // Enable tiling
MFItInfo info;
if (pc_source->do_tiling && Gpu::notInLaunchRegion()) {
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
@@ -686,30 +684,14 @@ MultiParticleContainer::doFieldIonization ()
dst_tile.resize(np_dst + np_src);
- auto num_filter = filterAndTransformParticles(dst_tile, src_tile, np_dst,
+ auto num_added = filterAndTransformParticles(dst_tile, src_tile, np_dst,
IonizationFilter,
IonizationTransformFunc(),
Copier);
- dst_tile.resize(np_dst + num_filter);
+ dst_tile.resize(np_dst + num_added);
- // Update NextID to include particles created in this function
- int pid;
-#ifdef _OPENMP
-#pragma omp critical (ionization_nextid)
-#endif
- {
- pid = Particle<0,0>::NextID();
- Particle<0,0>::NextID(pid+num_filter);
- }
- const int cpuid = ParallelDescriptor::MyProc();
- auto pp = dst_tile.GetArrayOfStructs()().data() + np_dst;
- amrex::For(num_filter, [=] AMREX_GPU_DEVICE (int ip) noexcept
- {
- auto& p = pp[ip];
- p.id() = pid+ip;
- p.cpu() = cpuid;
- });
+ setNewParticleIDs(dst_tile, np_dst, num_added);
}
}
}