diff options
author | 2022-08-03 13:34:11 -0700 | |
---|---|---|
committer | 2022-08-03 13:34:11 -0700 | |
commit | 0a4d82fd5c514760871d11c8db037f560f07bc89 (patch) | |
tree | 0e322ae83a9aa4b71020a315ff91e4384e0cca6b /Source/Diagnostics/WarpXOpenPMD.cpp | |
parent | a4c36c317403d2b8050524ba2a37d8d237b0df32 (diff) | |
download | WarpX-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.cpp | 16 |
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. |