From a4956b407b442c02ea3b50f7ac199072fbc264bf Mon Sep 17 00:00:00 2001 From: roelof-groenewald Date: Fri, 5 Apr 2024 16:42:23 -0700 Subject: [PATCH 1/7] Fix out of bounds access to `distance_to_eb` --- Source/Particles/WarpXParticleContainer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index fd1bc7917ab..fd7780904c6 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -295,13 +295,17 @@ WarpXParticleContainer::AddNParticles (int /*lev*/, long n, ); } + // Move particles to their appropriate tiles + Redistribute(); + // Remove particles that are inside the embedded boundaries #ifdef AMREX_USE_EB auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB(); scrapeParticles( *this, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb()); #endif - Redistribute(); + // Call (local) redistribute again to remove particles with invalid ids + Redistribute(0, -1, 0, 1, 1); } /* \brief Current Deposition for thread thread_num From c39bd46492ff6e513e1c66f147144c8c0a239bef Mon Sep 17 00:00:00 2001 From: Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com> Date: Fri, 5 Apr 2024 17:13:49 -0700 Subject: [PATCH 2/7] Fix clang-tidy error --- Source/Particles/WarpXParticleContainer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index fd7780904c6..b6d1bad66cb 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -305,7 +305,7 @@ WarpXParticleContainer::AddNParticles (int /*lev*/, long n, #endif // Call (local) redistribute again to remove particles with invalid ids - Redistribute(0, -1, 0, 1, 1); + Redistribute(0, -1, 0, true, true); } /* \brief Current Deposition for thread thread_num From 235e90db952959545b1d4b8d957998f8b9249029 Mon Sep 17 00:00:00 2001 From: roelof-groenewald Date: Fri, 5 Apr 2024 18:12:30 -0700 Subject: [PATCH 3/7] specify level for redistribute and set `nGrow=1` --- Source/Particles/WarpXParticleContainer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index b6d1bad66cb..eab6aa7a8f5 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -158,7 +158,7 @@ WarpXParticleContainer::AllocData () } void -WarpXParticleContainer::AddNParticles (int /*lev*/, long n, +WarpXParticleContainer::AddNParticles (int lev, long n, amrex::Vector const & x, amrex::Vector const & y, amrex::Vector const & z, @@ -305,7 +305,7 @@ WarpXParticleContainer::AddNParticles (int /*lev*/, long n, #endif // Call (local) redistribute again to remove particles with invalid ids - Redistribute(0, -1, 0, true, true); + Redistribute(lev, lev, 1, true, true); } /* \brief Current Deposition for thread thread_num From 43782987d43dbc5064ea60929accd030f6843db5 Mon Sep 17 00:00:00 2001 From: Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com> Date: Fri, 5 Apr 2024 22:03:36 -0700 Subject: [PATCH 4/7] Set `local=0` in order to avoid unnecessary communication in the second `Redistribute` call. --- Source/Particles/WarpXParticleContainer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index eab6aa7a8f5..3c29d1f7133 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -305,7 +305,7 @@ WarpXParticleContainer::AddNParticles (int lev, long n, #endif // Call (local) redistribute again to remove particles with invalid ids - Redistribute(lev, lev, 1, true, true); + Redistribute(lev, lev, 0, 0, true); } /* \brief Current Deposition for thread thread_num From aee6b342352e86bf0d856b3c906b879359f3f4ec Mon Sep 17 00:00:00 2001 From: Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com> Date: Sat, 6 Apr 2024 10:51:02 -0700 Subject: [PATCH 5/7] Switch `local` back to `1`. --- Source/Particles/WarpXParticleContainer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 3c29d1f7133..6d3b0b1ff5f 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -305,7 +305,7 @@ WarpXParticleContainer::AddNParticles (int lev, long n, #endif // Call (local) redistribute again to remove particles with invalid ids - Redistribute(lev, lev, 0, 0, true); + Redistribute(lev, lev, 0, 1, true); } /* \brief Current Deposition for thread thread_num From 53185129844930f8e9c3eb07f96c1e5673a07651 Mon Sep 17 00:00:00 2001 From: roelof-groenewald Date: Tue, 9 Apr 2024 16:47:51 -0700 Subject: [PATCH 6/7] move second redistribute inside EB-only block --- Source/Particles/WarpXParticleContainer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 6d3b0b1ff5f..9a534cd9b2e 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -302,10 +302,9 @@ WarpXParticleContainer::AddNParticles (int lev, long n, #ifdef AMREX_USE_EB auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB(); scrapeParticles( *this, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb()); -#endif - // Call (local) redistribute again to remove particles with invalid ids Redistribute(lev, lev, 0, 1, true); +#endif } /* \brief Current Deposition for thread thread_num From 68fa761b60a0183f361cc220b993e36f2c86d8f5 Mon Sep 17 00:00:00 2001 From: roelof-groenewald Date: Tue, 9 Apr 2024 17:09:07 -0700 Subject: [PATCH 7/7] do not use `lev` since particles are anyway deposited on level 0 --- Source/Particles/WarpXParticleContainer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 9a534cd9b2e..ddbfda57c71 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -158,7 +158,7 @@ WarpXParticleContainer::AllocData () } void -WarpXParticleContainer::AddNParticles (int lev, long n, +WarpXParticleContainer::AddNParticles (int /*lev*/, long n, amrex::Vector const & x, amrex::Vector const & y, amrex::Vector const & z, @@ -303,7 +303,7 @@ WarpXParticleContainer::AddNParticles (int lev, long n, auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB(); scrapeParticles( *this, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb()); // Call (local) redistribute again to remove particles with invalid ids - Redistribute(lev, lev, 0, 1, true); + Redistribute(0, -1, 0, 1, true); #endif }