23#include "openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp"
24#include "openPMD/IO/ADIOS/ADIOS2PreloadAttributes.hpp"
25#include "openPMD/IO/ADIOS/ADIOS2PreloadVariables.hpp"
26#include "openPMD/IO/AbstractIOHandler.hpp"
27#include "openPMD/IO/IOTask.hpp"
28#include "openPMD/IO/InvalidatableFile.hpp"
29#include "openPMD/config.hpp"
32#if openPMD_HAVE_ADIOS2
47#if openPMD_HAVE_ADIOS2
48namespace openPMD::detail
57 explicit BufferedAction() =
default;
58 virtual ~BufferedAction() =
default;
60 BufferedAction(BufferedAction
const &other) =
delete;
61 BufferedAction(BufferedAction &&other) =
default;
63 BufferedAction &operator=(BufferedAction
const &other) =
delete;
64 BufferedAction &operator=(BufferedAction &&other) =
default;
73 std::optional<size_t> stepSelection;
85 adios2::Engine &engine,
86 std::string
const &fileName,
87 std::optional<size_t> stepSelection,
90 static constexpr char const *errorMsg =
"ADIOS2: readDataset()";
103 template <
typename T>
106 template <
int n,
typename... Params>
107 static void call(Params &&...);
116 Datatype dtype = Datatype::UNDEFINED;
123 virtual void *update() = 0;
130 adios2::detail::Span<T> span;
132 UpdateSpan(adios2::detail::Span<T>);
134 void *update()
override;
144 friend struct BufferedGet;
145 friend struct BufferedPut;
146 friend struct RunUniquePtrPut;
147 friend struct WriteDataset;
149 using UseGroupTable = adios_defs::UseGroupTable;
150 using FlushTarget = adios_defs::FlushTarget;
153 ADIOS2File(ADIOS2File
const &) =
delete;
182 adios2::ADIOS &m_ADIOS;
188 std::vector<std::unique_ptr<BufferedAction>>
m_buffer;
219 std::set<std::string> uncommittedAttributes;
231 bool optimizeAttributesStreaming =
false;
234 ParsePreference parsePreference = ParsePreference::UpFront;
236 using AttributeMap_t = std::map<std::string, adios2::Params>;
241 adios_defs::OpenFileAs);
251 UseGroupTable detectGroupTable();
253 adios2::Engine &getEngine();
255 template <
typename BA>
256 void enqueue(BA &&ba)
258 enqueue<BA>(std::forward<BA>(ba),
m_buffer);
261 template <
typename BA>
262 void enqueue(BA &&ba,
decltype(
m_buffer) &buffer)
264 using BA_ =
typename std::remove_reference<BA>::type;
266 std::unique_ptr<BufferedAction>(
new BA_(std::forward<BA>(ba))));
269 template <
typename... Args>
270 void flush(Args &&...args);
272 struct ADIOS2FlushParams
278 FlushTarget flushTarget = FlushTarget::Disk;
280 ADIOS2FlushParams(
FlushLevel level_in) : level(level_in)
283 ADIOS2FlushParams(
FlushLevel level_in, FlushTarget flushTarget_in)
284 : level(level_in), flushTarget(flushTarget_in)
307 std::function<
void(ADIOS2File &, adios2::Engine &)>
const
310 bool flushUnconditionally);
332 std::vector<std::string>
333 availableAttributesPrefixed(std::string
const &prefix);
335 AttributeMap_t
const &availableVariables();
337 std::vector<std::string>
338 availableVariablesPrefixed(std::string
const &prefix);
408 size_t currentStep();
409 void setStepSelection(std::optional<size_t>);
410 [[nodiscard]] std::optional<size_t>
const &stepSelection()
const;
420 [[nodiscard]] detail::AdiosVariables
const &variables()
const
424 [[nodiscard]] detail::AdiosVariables &variables()
430 ADIOS2IOHandlerImpl *m_impl;
431 std::optional<adios2::Engine> m_engine;
436 std::optional<size_t> m_stepSelection;
437 std::optional<size_t> m_max_steps_bp5 = std::make_optional<size_t>(100);
451 AdiosAttributes m_attributes;
452 AdiosVariables m_variables;
454 std::set<Writable *> m_pathsMarkedAsActive;
460 bool initializedDefaults =
false;
464 bool finalized =
false;
466 UseGroupTable useGroupTable()
const;
471 void configure_IO_Read();
472 void configure_IO_Write();
475template <
typename... Args>
476void ADIOS2File::flush(Args &&...args)
482 catch (error::ReadError
const &)
Definition ADIOS2IOHandler.hpp:100
Unique Pointer class that uses a dynamic destructor type.
Definition UniquePtr.hpp:86
Layer to mirror structure of logical data and persistent data in file.
Definition Writable.hpp:76
Definition ADIOS2File.hpp:143
AdvanceStatus advance(AdvanceMode mode)
Begin or end an ADIOS step.
Definition ADIOS2File.cpp:1184
void finalize()
Implementation of destructor, will only run once.
Definition ADIOS2File.cpp:230
std::map< unsigned, std::unique_ptr< I_UpdateSpan > > m_updateSpans
The base pointer of an ADIOS2 span might change after reallocations.
Definition ADIOS2File.hpp:212
std::vector< std::unique_ptr< BufferedAction > > m_buffer
The default queue for deferred actions.
Definition ADIOS2File.hpp:188
std::vector< std::unique_ptr< BufferedAction > > m_alreadyEnqueued
This contains deferred actions that have already been enqueued into ADIOS2, but not yet performed in ...
Definition ADIOS2File.hpp:202
std::vector< BufferedUniquePtrPut > m_uniquePtrPuts
When receiving a unique_ptr, we know that the buffer is ours and ours alone.
Definition ADIOS2File.hpp:195
std::string m_IOName
ADIOS requires giving names to instances of adios2::IO.
Definition ADIOS2File.hpp:181
void flush_impl(ADIOS2FlushParams flushParams, std::function< void(ADIOS2File &, adios2::Engine &)> const &performPutGets, bool writeLatePuts, bool flushUnconditionally)
Flush deferred IO actions.
Definition ADIOS2File.cpp:979
std::string m_file
The full path to the file created on disk, including the containing directory and the file extension,...
Definition ADIOS2File.hpp:162
StreamStatus
Definition ADIOS2File.hpp:369
@ ReadWithoutStream
File is not written is streaming fashion.
Definition ADIOS2File.hpp:398
@ StreamOver
Stream has ended.
Definition ADIOS2File.hpp:381
@ DuringStep
A step is currently active.
Definition ADIOS2File.hpp:373
@ OutsideOfStep
A stream is active, but no step.
Definition ADIOS2File.hpp:377
@ Undecided
The stream status of a file-based engine will be decided upon opening the engine if in read mode.
Definition ADIOS2File.hpp:404
Public definitions of openPMD-api.
Definition Date.cpp:29
AdvanceMode
In step-based mode (i.e.
Definition Streaming.hpp:46
AdvanceStatus
In step-based mode (i.e.
Definition Streaming.hpp:32
FlushLevel
Determine what items should be flushed upon Series::flush()
Definition AbstractIOHandler.hpp:55
Datatype
Concrete datatype of an object available at runtime.
Definition Datatype.hpp:51
Wrapper around a shared pointer to:
Definition InvalidatableFile.hpp:44
Typesafe description of all required arguments for a specified Operation.
Definition IOTask.hpp:148
Definition ADIOS2File.hpp:273
Definition ADIOS2PreloadAttributes.hpp:152
Definition ADIOS2PreloadVariables.hpp:36
Definition ADIOS2File.hpp:70
Definition ADIOS2File.hpp:94
Definition ADIOS2File.hpp:111
Definition ADIOS2File.hpp:79
Definition ADIOS2File.hpp:122
Definition ADIOS2File.hpp:102