Skip to content

Commit 67c9aa2

Browse files
authored
Remove particles that are initialized in the EB (#4585)
1 parent 94ae119 commit 67c9aa2

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

Source/Particles/PhysicalParticleContainer.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
#include "Utils/WarpXAlgorithmSelection.H"
4040
#include "Utils/WarpXConst.H"
4141
#include "Utils/WarpXProfilerWrapper.H"
42+
#ifdef AMREX_USE_EB
43+
# include "EmbeddedBoundary/ParticleBoundaryProcess.H"
44+
# include "EmbeddedBoundary/ParticleScraper.H"
45+
#endif
4246
#include "WarpX.H"
4347

4448
#include <ablastr/warn_manager/WarnManager.H>
@@ -1428,6 +1432,12 @@ PhysicalParticleContainer::AddPlasma (PlasmaInjector const& plasma_injector, int
14281432
}
14291433
}
14301434

1435+
// Remove particles that are inside the embedded boundaries
1436+
#ifdef AMREX_USE_EB
1437+
auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB();
1438+
scrapeParticles( *this, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb());
1439+
#endif
1440+
14311441
// The function that calls this is responsible for redistributing particles.
14321442
}
14331443

@@ -1920,6 +1930,12 @@ PhysicalParticleContainer::AddPlasmaFlux (PlasmaInjector const& plasma_injector,
19201930
}
19211931
}
19221932

1933+
// Remove particles that are inside the embedded boundaries
1934+
#ifdef AMREX_USE_EB
1935+
auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB();
1936+
scrapeParticles(tmp_pc, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb());
1937+
#endif
1938+
19231939
// Redistribute the new particles that were added to the temporary container.
19241940
// (This eliminates invalid particles, and makes sure that particles
19251941
// are in the right tile.)

Source/Particles/WarpXParticleContainer.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@
6060
#include <AMReX_ParticleUtil.H>
6161
#include <AMReX_Random.H>
6262
#include <AMReX_Utility.H>
63-
63+
#ifdef AMREX_USE_EB
64+
# include "EmbeddedBoundary/ParticleBoundaryProcess.H"
65+
# include "EmbeddedBoundary/ParticleScraper.H"
66+
#endif
6467

6568
#ifdef AMREX_USE_OMP
6669
# include <omp.h>
@@ -293,6 +296,12 @@ WarpXParticleContainer::AddNParticles (int /*lev*/, long n,
293296
);
294297
}
295298

299+
// Remove particles that are inside the embedded boundaries
300+
#ifdef AMREX_USE_EB
301+
auto & distance_to_eb = WarpX::GetInstance().GetDistanceToEB();
302+
scrapeParticles( *this, amrex::GetVecOfConstPtrs(distance_to_eb), ParticleBoundaryProcess::Absorb());
303+
#endif
304+
296305
Redistribute();
297306
}
298307

Source/WarpX.H

+3-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ public:
132132
MacroscopicProperties& GetMacroscopicProperties () { return *m_macroscopic_properties; }
133133
HybridPICModel& GetHybridPICModel () { return *m_hybrid_pic_model; }
134134
MultiDiagnostics& GetMultiDiags () {return *multi_diags;}
135-
135+
#ifdef AMREX_USE_EB
136+
amrex::Vector<std::unique_ptr<amrex::MultiFab> >& GetDistanceToEB () {return m_distance_to_eb;}
137+
#endif
136138
ParticleBoundaryBuffer& GetParticleBoundaryBuffer () { return *m_particle_boundary_buffer; }
137139

138140
static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom,

0 commit comments

Comments
 (0)