From de613633baac4cac3ec713fb36a0bc05f7cb32b8 Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Tue, 18 Feb 2025 11:44:38 -0800 Subject: [PATCH] fix new bug in pure soa communication --- Src/Particle/AMReX_ParticleCommunication.H | 6 +++++- Src/Particle/AMReX_ParticleTile.H | 21 +++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Src/Particle/AMReX_ParticleCommunication.H b/Src/Particle/AMReX_ParticleCommunication.H index 147b74a68ff..07c7f571d95 100644 --- a/Src/Particle/AMReX_ParticleCommunication.H +++ b/Src/Particle/AMReX_ParticleCommunication.H @@ -244,7 +244,11 @@ struct ParticleCopyPlan int NStructInt = PC::ParticleContainerType::NStructInt; int num_real_comm_comp = 0; - for (int i = AMREX_SPACEDIM + NStructReal; i < real_comp_mask.size(); ++i) { + int comm_comps_start = 0; + if constexpr (!PC::ParticleType::is_soa_particle) { + comm_comps_start += AMREX_SPACEDIM + NStructReal; + } + for (int i = comm_comps_start; i < real_comp_mask.size(); ++i) { if (real_comp_mask[i]) {++num_real_comm_comp;} } diff --git a/Src/Particle/AMReX_ParticleTile.H b/Src/Particle/AMReX_ParticleTile.H index 7546ff8a216..ce4c84aaf5c 100644 --- a/Src/Particle/AMReX_ParticleTile.H +++ b/Src/Particle/AMReX_ParticleTile.H @@ -134,7 +134,10 @@ struct ParticleTileData memcpy(dst, m_idcpu + src_index, sizeof(uint64_t)); dst += sizeof(uint64_t); } - int array_start_index = AMREX_SPACEDIM + NStructReal; + int array_start_index = 0; + if constexpr (!ParticleType::is_soa_particle) { + array_start_index = AMREX_SPACEDIM + NStructReal; + } for (int i = 0; i < NAR; ++i) { if (comm_real[array_start_index + i]) @@ -143,7 +146,7 @@ struct ParticleTileData dst += sizeof(ParticleReal); } } - int runtime_start_index = AMREX_SPACEDIM + NStructReal + NAR; + int runtime_start_index = array_start_index + NAR; for (int i = 0; i < m_num_runtime_real; ++i) { if (comm_real[runtime_start_index + i]) @@ -185,7 +188,10 @@ struct ParticleTileData memcpy(m_idcpu + dst_index, src, sizeof(uint64_t)); src += sizeof(uint64_t); } - int array_start_index = AMREX_SPACEDIM + NStructReal; + int array_start_index = 0; + if constexpr (!ParticleType::is_soa_particle) { + array_start_index = AMREX_SPACEDIM + NStructReal; + } for (int i = 0; i < NAR; ++i) { if (comm_real[array_start_index + i]) @@ -194,7 +200,7 @@ struct ParticleTileData src += sizeof(ParticleReal); } } - int runtime_start_index = AMREX_SPACEDIM + NStructReal + NAR; + int runtime_start_index = array_start_index + NAR; for (int i = 0; i < m_num_runtime_real; ++i) { if (comm_real[runtime_start_index + i]) @@ -595,7 +601,10 @@ struct ConstParticleTileData memcpy(dst, m_idcpu + src_index, sizeof(uint64_t)); dst += sizeof(uint64_t); } - int array_start_index = AMREX_SPACEDIM + NStructReal; + int array_start_index = 0; + if constexpr (!ParticleType::is_soa_particle) { + array_start_index = AMREX_SPACEDIM + NStructReal; + } for (int i = 0; i < NArrayReal; ++i) { if (comm_real[array_start_index + i]) @@ -604,7 +613,7 @@ struct ConstParticleTileData dst += sizeof(ParticleReal); } } - int runtime_start_index = AMREX_SPACEDIM + NStructReal + NArrayReal; + int runtime_start_index = array_start_index + NArrayReal; for (int i = 0; i < m_num_runtime_real; ++i) { if (comm_real[runtime_start_index + i])