aboutsummaryrefslogtreecommitdiff
path: root/Source/Diagnostics/WarpXOpenPMD.cpp
diff options
context:
space:
mode:
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.