aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/Diagnostics/WarpXIO.cpp4
-rw-r--r--Source/Diagnostics/WarpXOpenPMD.H5
-rw-r--r--Source/Diagnostics/WarpXOpenPMD.cpp17
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