From 941cfc5e6c1ef67c801d0e3551d9e79f5eed9ca8 Mon Sep 17 00:00:00 2001 From: Junmin Gu Date: Fri, 3 Nov 2023 07:35:10 -0700 Subject: [PATCH] added code for storing particle ids in a seperate function --- .../openPMD-api/AMReX_PlotFileUtilOPENPMD.H | 6 ++++++ .../AMReX_PlotFileUtilOPENPMD_PTLImpl.H | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD.H b/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD.H index ae60918b218..ecab3011521 100644 --- a/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD.H +++ b/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD.H @@ -365,6 +365,12 @@ namespace amrex openPMD::ParticleSpecies& currSpecies, unsigned long long offset) const; + template + void + SaveSpecieId(PIt& pti, + openPMD::ParticleSpecies& currSpecies, + unsigned long long offset) const; + template void StoreAoS_Int(PIt& pti, diff --git a/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD_PTLImpl.H b/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD_PTLImpl.H index f9827c238b1..e8c93f45b54 100644 --- a/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD_PTLImpl.H +++ b/Src/Extern/openPMD-api/AMReX_PlotFileUtilOPENPMD_PTLImpl.H @@ -426,7 +426,25 @@ namespace amrex std::string const positionComponent = positionComponents[currDim]; currSpecies["position"][positionComponent].storeChunk(curr, {offset + GetGrandOffset()}, {numParticleOnTile64}); } + } + SaveSpecieId(pti, currSpecies, offset); + } + template + void + AMReX_openPMDWriter::SaveSpecieId(PIt& pti, + openPMD::ParticleSpecies& currSpecies, + unsigned long long offset) const + { + BL_PROFILE("amrex::openpmd_api::SaveSpecieId"); + auto const numParticleOnTile = pti.numParticles(); + uint64_t const numParticleOnTile64 = static_cast( numParticleOnTile ); + + // get position and particle ID from aos + // note: this implementation iterates the AoS 4x... + // if we flush late as we do now, we can also copy out the data in one go + const auto& aos = pti.GetArrayOfStructs(); // size = numParticlesOnTile + { // save particle ID after converting it to a globally unique ID std::shared_ptr< uint64_t > ids(new uint64_t[numParticleOnTile], [](uint64_t const *p){ delete[] p; }