Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] openPMD: variableBased IterationEncoding #1909

Closed
wants to merge 11 commits into from
35 changes: 27 additions & 8 deletions Source/Diagnostics/WarpXOpenPMD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,9 +267,10 @@ void WarpXOpenPMDPlot::CloseStep (bool isBTD, bool isLastBTDFlush)
// close BTD file only when isLastBTDFlush is true
if (isBTD and !isLastBTDFlush) callClose = false;
if (callClose) {
if (m_Series)
m_Series->iterations[m_CurrentStep].close();

if (m_Series) {
auto iterations = m_Series->writeIterations();
iterations[m_CurrentStep].close();
}
// create a little helper file for ParaView 5.9+
if (amrex::ParallelDescriptor::IOProcessor())
{
Expand All @@ -295,23 +296,37 @@ WarpXOpenPMDPlot::Init (openPMD::Access access, bool isBTD)
std::string filepath = m_dirPrefix;
GetFileName(filepath);

std::string useSteps = R"(
ax3l marked this conversation as resolved.
Show resolved Hide resolved
{
"adios2": {
"engine": {
"type": "bp4",
"usesteps": true
}
}
}
)";
// close a previously open series before creating a new one
// see ADIOS1 limitation: https://github.com/openPMD/openPMD-api/pull/686
m_Series = nullptr;
if (m_OneFilePerTS)
m_Series = nullptr;
else if (m_Series != nullptr)
return;

if (amrex::ParallelDescriptor::NProcs() > 1) {
#if defined(AMREX_USE_MPI)
m_Series = std::make_unique<openPMD::Series>(
filepath, access,
amrex::ParallelDescriptor::Communicator()
amrex::ParallelDescriptor::Communicator(),
useSteps
);
m_MPISize = amrex::ParallelDescriptor::NProcs();
m_MPIRank = amrex::ParallelDescriptor::MyProc();
#else
amrex::Abort("openPMD-api not built with MPI support!");
#endif
} else {
m_Series = std::make_unique<openPMD::Series>(filepath, access);
m_Series = std::make_unique<openPMD::Series>(filepath, access, useSteps);
m_MPISize = 1;
m_MPIRank = 1;
}
Expand Down Expand Up @@ -430,7 +445,9 @@ WarpXOpenPMDPlot::DumpToFile (ParticleContainer* pc,

WarpXParticleCounter counter(pc);

openPMD::Iteration currIteration = m_Series->iterations[iteration];
openPMD::WriteIterations iterations = m_Series->writeIterations();
auto currIteration = iterations[iteration];

openPMD::ParticleSpecies currSpecies = currIteration.particles[name];
// meta data for ED-PIC extension
currSpecies.setAttribute( "particleShape", double( WarpX::noz ) );
Expand Down Expand Up @@ -811,7 +828,9 @@ WarpXOpenPMDPlot::WriteOpenPMDFields ( //const std::string& filename,
auto const dataset = openPMD::Dataset(datatype, global_size);

// meta data
auto series_iteration = m_Series->iterations[iteration];
openPMD::WriteIterations iterations = m_Series->writeIterations();
auto series_iteration = iterations[iteration];

auto meshes = series_iteration.meshes;
if( first_write_to_iteration ) {
series_iteration.setTime( time );
Expand Down