From 63c3ec5cdd1aedd0e89cd56a0741bfff132e54b9 Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Thu, 13 Feb 2025 12:05:41 -0800 Subject: [PATCH 1/2] Fix optional component communication for pure SoA particles --- Src/Particle/AMReX_ParticleContainer.H | 20 +++++--------------- Src/Particle/AMReX_ParticleContainerI.H | 14 +++++++++++++- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Src/Particle/AMReX_ParticleContainer.H b/Src/Particle/AMReX_ParticleContainer.H index ab1157c286..9b260d4568 100644 --- a/Src/Particle/AMReX_ParticleContainer.H +++ b/Src/Particle/AMReX_ParticleContainer.H @@ -199,9 +199,7 @@ public: //! of a level hierarchy. Must be properly initialized later. ParticleContainer_impl () : - ParticleContainerBase(), - h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true), - h_redistribute_int_comp(2 + NStructInt + NArrayInt, true) + ParticleContainerBase() { Initialize (); } @@ -215,9 +213,7 @@ public: //! ParticleContainer_impl (ParGDBBase* gdb) : - ParticleContainerBase(gdb), - h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true), - h_redistribute_int_comp(2 + NStructInt + NArrayInt, true) + ParticleContainerBase(gdb) { Initialize (); ParticleContainer_impl::reserveData(); @@ -235,9 +231,7 @@ public: const DistributionMapping & dmap, const BoxArray & ba) : - ParticleContainerBase(geom, dmap, ba), - h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true), - h_redistribute_int_comp(2 + NStructInt + NArrayInt, true) + ParticleContainerBase(geom, dmap, ba) { Initialize (); ParticleContainer_impl::reserveData(); @@ -258,9 +252,7 @@ public: const Vector & ba, const Vector & rr) : - ParticleContainerBase(geom, dmap, ba, rr), - h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true), - h_redistribute_int_comp(2 + NStructInt + NArrayInt, true) + ParticleContainerBase(geom, dmap, ba, rr) { Initialize (); ParticleContainer_impl::reserveData(); @@ -280,9 +272,7 @@ public: const Vector & ba, const Vector & rr) : - ParticleContainerBase(geom, dmap, ba, rr), - h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true), - h_redistribute_int_comp(2 + NStructInt + NArrayInt, true) + ParticleContainerBase(geom, dmap, ba, rr) { Initialize (); ParticleContainer_impl::reserveData(); diff --git a/Src/Particle/AMReX_ParticleContainerI.H b/Src/Particle/AMReX_ParticleContainerI.H index 7c003f8b3f..263f62be18 100644 --- a/Src/Particle/AMReX_ParticleContainerI.H +++ b/Src/Particle/AMReX_ParticleContainerI.H @@ -16,7 +16,10 @@ void ParticleContainer_impl::SetParticleSize () { num_real_comm_comps = 0; - int comm_comps_start = AMREX_SPACEDIM + NStructReal; + int comm_comps_start = 0; + if constexpr (!ParticleType::is_soa_particle) { + comm_comps_start += AMREX_SPACEDIM + NStructReal; + } for (int i = comm_comps_start; i < comm_comps_start + NumRealComps(); ++i) { if (h_redistribute_real_comp[i]) {++num_real_comm_comps;} } @@ -45,6 +48,15 @@ ParticleContainer_impl Date: Thu, 13 Feb 2025 12:45:01 -0800 Subject: [PATCH 2/2] fix redistribute for new vector size --- Src/Particle/AMReX_ParticleContainerI.H | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Src/Particle/AMReX_ParticleContainerI.H b/Src/Particle/AMReX_ParticleContainerI.H index 263f62be18..7b200bedb7 100644 --- a/Src/Particle/AMReX_ParticleContainerI.H +++ b/Src/Particle/AMReX_ParticleContainerI.H @@ -1754,7 +1754,10 @@ ParticleContainer_impl >& not_ours, ptile.push_back(p); } - int array_comp_start = AMREX_SPACEDIM + NStructReal; + int array_comp_start = 0; + if constexpr (!ParticleType::is_soa_particle) { + array_comp_start = AMREX_SPACEDIM + NStructReal; + } for (int comp = 0; comp < NumRealComps(); ++comp) { if (h_redistribute_real_comp[array_comp_start + comp]) { ParticleReal rdata; @@ -2357,7 +2366,10 @@ RedistributeMPI (std::map >& not_ours, host_int_attribs[lev][ind].resize(NumIntComps()); // add the real... - int array_comp_start = AMREX_SPACEDIM + NStructReal; + int array_comp_start = 0; + if constexpr (!ParticleType::is_soa_particle) { + array_comp_start = AMREX_SPACEDIM + NStructReal; + } for (int comp = 0; comp < NumRealComps(); ++comp) { if (h_redistribute_real_comp[array_comp_start + comp]) { Real rdata;