From 09fc44a69d2a7e64605921c6b167cd7b9d7a0dad Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Tue, 30 Jan 2024 17:52:09 -0800 Subject: [PATCH] Add helper function for setting id and cpu simultaneously. (#3733) Also sneaking in a small ignore_unused fix. Close #3731. Co-authored-by: Axel Huebl --- Src/Particle/AMReX_Particle.H | 12 ++++++++++++ Src/Particle/AMReX_ParticleIO.H | 1 + 2 files changed, 13 insertions(+) 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