diff options
-rw-r--r-- | Source/Diagnostics/WarpXIO.cpp | 4 | ||||
-rw-r--r-- | Source/Diagnostics/WarpXOpenPMD.H | 5 | ||||
-rw-r--r-- | Source/Diagnostics/WarpXOpenPMD.cpp | 17 |
3 files changed, 19 insertions, 7 deletions
diff --git a/Source/Diagnostics/WarpXIO.cpp b/Source/Diagnostics/WarpXIO.cpp index 416969d7e..58fdccf22 100644 --- a/Source/Diagnostics/WarpXIO.cpp +++ b/Source/Diagnostics/WarpXIO.cpp @@ -540,14 +540,14 @@ WarpX::WriteOpenPMDFile () const #ifdef WARPX_USE_OPENPMD const auto step = istep[0]; + m_OpenPMDPlotWriter->SetStep(step); + Vector<std::string> varnames; // Name of the written fields Vector<MultiFab> mf_avg; // contains the averaged, cell-centered fields Vector<const MultiFab*> output_mf; // will point to the data to be written Vector<Geometry> output_geom; prepareFields(step, varnames, mf_avg, output_mf, output_geom); - - m_OpenPMDPlotWriter->SetStep(step); // fields: only dumped for coarse level m_OpenPMDPlotWriter->WriteOpenPMDFields( varnames, *output_mf[0], output_geom[0], step, t_new[0]); diff --git a/Source/Diagnostics/WarpXOpenPMD.H b/Source/Diagnostics/WarpXOpenPMD.H index bd18ec8c1..9ffcd0f37 100644 --- a/Source/Diagnostics/WarpXOpenPMD.H +++ b/Source/Diagnostics/WarpXOpenPMD.H @@ -88,6 +88,11 @@ public: ~WarpXOpenPMDPlot(); + /** Set Iteration Step for the series + * + * @note If an iteration has been written, then it will give a warning + * + */ void SetStep(int ts); void WriteOpenPMDParticles(const std::unique_ptr<MultiParticleContainer>&); diff --git a/Source/Diagnostics/WarpXOpenPMD.cpp b/Source/Diagnostics/WarpXOpenPMD.cpp index 6f76906e3..cacf6367d 100644 --- a/Source/Diagnostics/WarpXOpenPMD.cpp +++ b/Source/Diagnostics/WarpXOpenPMD.cpp @@ -16,7 +16,7 @@ #include <sstream> #include <tuple> #include <utility> - +#include <iostream> namespace detail { @@ -140,12 +140,19 @@ void WarpXOpenPMDPlot::GetFileName(std::string& filename) void WarpXOpenPMDPlot::SetStep(int ts) { - if (ts < 0) - return; + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(ts >= 0 , "openPMD iterations are unsigned"); + + if (m_CurrentStep >= ts) { + // note m_Series is reset in Init(), so using m_Series->iterations.contains(ts) is only able to check the + // last written step in m_Series's life time, but not other earlier written steps by other m_Series + std::string warnMsg = " Warning from openPMD writer: Already written iteration:"+std::to_string(ts); + std::cout<<warnMsg<<std::endl; + amrex::Warning(warnMsg); + } - m_CurrentStep = ts; + m_CurrentStep = ts; + Init(openPMD::AccessType::CREATE); - Init(openPMD::AccessType::CREATE); } void |