diff options
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r-- | Source/Particles/MultiParticleContainer.cpp | 30 |
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); } } } |