23#include "openPMD/IterationEncoding.hpp"
24#include "openPMD/Mesh.hpp"
25#include "openPMD/ParticleSpecies.hpp"
26#include "openPMD/Streaming.hpp"
27#include "openPMD/auxiliary/Variant.hpp"
28#include "openPMD/backend/Attributable.hpp"
29#include "openPMD/backend/Container.hpp"
45 enum class CloseStatus
55 namespace BeginStepTypes
67 using BeginStep = std::variant<
72 namespace BeginStepTypes
74 template <
typename T,
typename... Args>
75 constexpr auto make(Args &&...args) -> BeginStep
77 return BeginStep{
T{std::forward<Args>(args)...}};
113 CloseStatus m_closed = CloseStatus::Open;
121 bool allow_reopening_implicitly =
false;
145class Iteration :
public Attributable
147 template <
typename T,
typename T_key,
typename T_container>
148 friend class Container;
151 template <
typename T>
152 friend T &internal::makeOwning(
T &self, Series);
153 friend class Writable;
154 friend class StatefulIterator;
155 friend class StatefulSnapshotsContainer;
158 Iteration(Iteration
const &) =
default;
159 Iteration(Iteration &&) =
default;
160 Iteration &operator=(Iteration
const &) =
default;
161 Iteration &operator=(Iteration &&) =
default;
163 using IterationIndex_t = uint64_t;
170 template <
typename T>
179 template <
typename T>
187 template <
typename T>
196 template <
typename T>
197 Iteration &
setDt(
T newDt);
225 Iteration &
close(
bool flush =
true);
268 [[deprecated(
"This attribute is no longer set by the openPMD-api.")]]
bool
271 Container<Mesh> meshes{};
272 Container<ParticleSpecies> particles{};
274 virtual ~Iteration() =
default;
280 std::shared_ptr<Data_t> m_iterationData;
282 inline Data_t
const &get()
const
284 return *m_iterationData;
289 return *m_iterationData;
292 inline std::shared_ptr<Data_t> getShared()
294 return m_iterationData;
297 inline void setData(std::shared_ptr<Data_t> data)
299 m_iterationData = std::move(data);
300 Attributable::setData(m_iterationData);
328 void reread(std::string
const &path);
331 std::string
const &filePath,
332 std::string
const &groupPath,
335 std::string
const &groupPath, internal::BeginStep
const &beginStep);
336 void read_impl(std::string
const &groupPath);
337 void readMeshes(std::string
const &meshesPath);
338 void readParticles(std::string
const &particlesPath);
345 struct BeginStepStatus
347 using AvailableIterations_t = std::vector<IterationIndex_t>;
354 AvailableIterations_t iterationsInOpenedStep;
368 inline operator std::tuple<AdvanceStatus &, AvailableIterations_t &>()
370 return std::tuple<AdvanceStatus &, AvailableIterations_t &>{
371 stepStatus, iterationsInOpenedStep};
382 BeginStepStatus beginStep(
bool reread);
389 static BeginStepStatus
390 beginStep(std::optional<Iteration> thisObject, Series &series,
bool reread);
424 virtual void linkHierarchy(Writable &w);
431 void runDeferredParseAccess();
462class IndexedIteration :
public Iteration
464 friend class StatefulIterator;
465 friend class LegacyIteratorAdaptor;
468 using index_t = Iteration::IterationIndex_t;
469 index_t
const iterationIndex;
471 inline IndexedIteration(std::pair<index_t const, Iteration> pair)
472 : Iteration(std::move(pair.second)), iterationIndex(pair.first)
476 template <
typename Iteration_t>
477 IndexedIteration(Iteration_t &&it, index_t index)
478 : Iteration(std::forward<Iteration_t>(it)), iterationIndex(index)
T readFloatingpoint(std::string const &key) const
Retrieve the value of a floating point Attribute of user-defined precision with ensured type-safety.
Definition Attributable.hpp:658
Iteration & setTimeUnitSI(double newTimeUnitSI)
Set the conversion factor to convert time and dt to seconds.
Definition Iteration.cpp:89
bool parsed() const
Has the iteration been parsed yet?
Definition Iteration.cpp:202
double timeUnitSI() const
Definition Iteration.cpp:84
Iteration & setTime(T newTime)
Set the global reference time for this iteration.
Definition Iteration.cpp:63
bool closedByWriter() const
Has the iteration been closed by the writer?
Definition Iteration.cpp:216
T time() const
Definition Iteration.hpp:441
bool closed() const
Has the iteration been closed?
Definition Iteration.cpp:183
T dt() const
Definition Iteration.hpp:453
Iteration & open()
Open an iteration.
Definition Iteration.cpp:146
Iteration & close(bool flush=true)
Close an iteration.
Definition Iteration.cpp:97
Iteration & setDt(T newDt)
Set the time step used to reach this iteration.
Definition Iteration.cpp:74
Definition Attributable.hpp:107
Definition Iteration.hpp:102
StepStatus m_stepStatus
Whether a step is currently active for this iteration.
Definition Iteration.hpp:130
std::optional< DeferredParseAccess > m_deferredParseAccess
Information on a parsing request that has not yet been executed.
Definition Iteration.hpp:136
Public definitions of openPMD-api.
Definition Date.cpp:29
StepStatus
Used in step-based mode (i.e.
Definition Streaming.hpp:57
AdvanceStatus
In step-based mode (i.e.
Definition Streaming.hpp:32
@ T
time
Definition UnitDimension.hpp:41
Definition Iteration.hpp:62
Definition Iteration.hpp:60
Definition Iteration.hpp:58
Definition Iteration.hpp:82
uint64_t iteration
The iteration index as accessed by the user in series.iterations[i].
Definition Iteration.hpp:92
std::string path
The group path within /data containing this iteration.
Definition Iteration.hpp:88
bool fileBased
If this iteration is part of a Series with file-based layout.
Definition Iteration.hpp:97
Parameters recursively passed through the openPMD hierarchy when flushing.
Definition AbstractIOHandler.hpp:106