diff --git a/Src/Particle/AMReX_Particle.H b/Src/Particle/AMReX_Particle.H index 818a5dbdf3e..618d4f185a9 100644 --- a/Src/Particle/AMReX_Particle.H +++ b/Src/Particle/AMReX_Particle.H @@ -188,6 +188,18 @@ struct ConstParticleCPUWrapper operator int () const noexcept { return static_cast(m_idata & 0x00FFFFFF); } }; +/** Set the idcpu value at once, based on a particle id and cpuid + * + * This can be used in initialization and assignments, + * to avoid writing twice into the same memory bank. + */ +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +std::uint64_t SetParticleIDandCPU (Long id, int cpu) noexcept{ + std::uint64_t idcpu = 0; + ParticleIDWrapper{idcpu} = id; + ParticleCPUWrapper{idcpu} = cpu; + return idcpu; +} template struct ParticleBase diff --git a/Src/Particle/AMReX_ParticleIO.H b/Src/Particle/AMReX_ParticleIO.H index c243a61d81d..22c0c5a35f9 100644 --- a/Src/Particle/AMReX_ParticleIO.H +++ b/Src/Particle/AMReX_ParticleIO.H @@ -1094,6 +1094,7 @@ ParticleContainer_impl