aboutsummaryrefslogtreecommitdiff
path: root/Source/Diagnostics/WarpXOpenPMD.cpp
diff options
context:
space:
mode:
authorGravatar David Grote <grote1@llnl.gov> 2022-08-03 13:34:11 -0700
committerGravatar GitHub <noreply@github.com> 2022-08-03 13:34:11 -0700
commit0a4d82fd5c514760871d11c8db037f560f07bc89 (patch)
tree0e322ae83a9aa4b71020a315ff91e4384e0cca6b /Source/Diagnostics/WarpXOpenPMD.cpp
parenta4c36c317403d2b8050524ba2a37d8d237b0df32 (diff)
downloadWarpX-0a4d82fd5c514760871d11c8db037f560f07bc89.tar.gz
WarpX-0a4d82fd5c514760871d11c8db037f560f07bc89.tar.zst
WarpX-0a4d82fd5c514760871d11c8db037f560f07bc89.zip
Implement output of scraped particles at domain boundaries (#3274)
* Implement scraping from all boundaries * Update input script * Output all particles to the same buffer * Dump different boundaries into different files * Avoid writing species that are not allocated * Improve documentation * Allow output of some boundaries only * Correct compilation error * Fixes and updates to BoundaryScraping * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Remi Lehe <remi.lehe@normalesup.org> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Diffstat (limited to 'Source/Diagnostics/WarpXOpenPMD.cpp')
-rw-r--r--Source/Diagnostics/WarpXOpenPMD.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/Source/Diagnostics/WarpXOpenPMD.cpp b/Source/Diagnostics/WarpXOpenPMD.cpp
index e45b9239d..ea93ca5d8 100644
--- a/Source/Diagnostics/WarpXOpenPMD.cpp
+++ b/Source/Diagnostics/WarpXOpenPMD.cpp
@@ -552,7 +552,8 @@ WarpXOpenPMDPlot::Init (openPMD::Access access, bool isBTD)
void
WarpXOpenPMDPlot::WriteOpenPMDParticles (const amrex::Vector<ParticleDiag>& particle_diags,
- const bool isBTD, const bool isLastBTDFlush, const amrex::Vector<int>& totalParticlesFlushedAlready)
+ const bool use_pinned_pc, const bool isBTD, const bool isLastBTDFlush,
+ const amrex::Vector<int>& totalParticlesFlushedAlready)
{
WARPX_PROFILE("WarpXOpenPMDPlot::WriteOpenPMDParticles()");
@@ -561,10 +562,11 @@ WarpXOpenPMDPlot::WriteOpenPMDParticles (const amrex::Vector<ParticleDiag>& part
WarpXParticleContainer* pc = particle_diags[i].getParticleContainer();
PinnedMemoryParticleContainer* pinned_pc = particle_diags[i].getPinnedParticleContainer();
PinnedMemoryParticleContainer tmp;
- if (! isBTD) {
- tmp = pc->make_alike<amrex::PinnedArenaAllocator>();
- } else {
+ if (isBTD || use_pinned_pc) {
+ if (!pinned_pc->isDefined()) continue; // Skip to the next particle container
tmp = pinned_pc->make_alike<amrex::PinnedArenaAllocator>();
+ } else {
+ tmp = pc->make_alike<amrex::PinnedArenaAllocator>();
}
// names of amrex::Real and int particle attributes in SoA data
amrex::Vector<std::string> real_names;
@@ -616,7 +618,9 @@ WarpXOpenPMDPlot::WriteOpenPMDParticles (const amrex::Vector<ParticleDiag>& part
GeometryFilter const geometry_filter(particle_diags[i].m_do_geom_filter,
particle_diags[i].m_diag_domain);
- if (! isBTD) {
+ if (isBTD || use_pinned_pc) {
+ tmp.copyParticles(*pinned_pc, true);
+ } else {
using SrcData = WarpXParticleContainer::ParticleTileType::ConstParticleTileDataType;
tmp.copyParticles(*pc,
[=] AMREX_GPU_HOST_DEVICE (const SrcData& src, int ip, const amrex::RandomEngine& engine)
@@ -625,8 +629,6 @@ WarpXOpenPMDPlot::WriteOpenPMDParticles (const amrex::Vector<ParticleDiag>& part
return random_filter(p, engine) * uniform_filter(p, engine)
* parser_filter(p, engine) * geometry_filter(p, engine);
}, true);
- } else if (isBTD) {
- tmp.copyParticles(*pinned_pc, true);
}
// real_names contains a list of all real particle attributes.