diff options
author | 2020-02-03 12:47:04 -0800 | |
---|---|---|
committer | 2020-02-03 12:47:04 -0800 | |
commit | 0818458c82b7e7862773efa827a983585d7da79f (patch) | |
tree | 68d353aac9fb1621533c9e3a05769d9d3da684cc /Source/Particles/MultiParticleContainer.cpp | |
parent | e14fda9c76edcb63d5748f1202952f17bd90c078 (diff) | |
download | WarpX-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.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); } } } |