23 #include "openPMD/config.hpp"
24 #include "openPMD/auxiliary/Export.hpp"
25 #include "openPMD/IO/AbstractIOHandler.hpp"
27 #if openPMD_HAVE_ADIOS1 && openPMD_HAVE_MPI
28 # include "openPMD/IO/AbstractIOHandlerImpl.hpp"
30 # include <adios_read.h>
36 #if openPMD_HAVE_ADIOS1
37 # include <unordered_map>
38 # include <unordered_set>
44 #if openPMD_HAVE_ADIOS1 && openPMD_HAVE_MPI
45 class OPENPMDAPI_EXPORT ParallelADIOS1IOHandlerImpl :
public AbstractIOHandlerImpl
48 ParallelADIOS1IOHandlerImpl(AbstractIOHandler*, MPI_Comm);
49 virtual ~ParallelADIOS1IOHandlerImpl();
53 std::future< void > flush()
override;
55 void createFile(Writable*, Parameter< Operation::CREATE_FILE >
const&)
override;
56 void createPath(Writable*, Parameter< Operation::CREATE_PATH >
const&)
override;
57 void createDataset(Writable*, Parameter< Operation::CREATE_DATASET >
const&)
override;
58 void extendDataset(Writable*, Parameter< Operation::EXTEND_DATASET >
const&)
override;
59 void openFile(Writable*, Parameter< Operation::OPEN_FILE >
const&)
override;
60 void closeFile(Writable*, Parameter< Operation::CLOSE_FILE >
const&)
override;
61 void availableChunks(Writable*, Parameter< Operation::AVAILABLE_CHUNKS > &)
override;
62 void openPath(Writable*, Parameter< Operation::OPEN_PATH >
const&)
override;
63 void openDataset(Writable*, Parameter< Operation::OPEN_DATASET > &)
override;
64 void deleteFile(Writable*, Parameter< Operation::DELETE_FILE >
const&)
override;
65 void deletePath(Writable*, Parameter< Operation::DELETE_PATH >
const&)
override;
66 void deleteDataset(Writable*, Parameter< Operation::DELETE_DATASET >
const&)
override;
67 void deleteAttribute(Writable*, Parameter< Operation::DELETE_ATT >
const&)
override;
68 void writeDataset(Writable*, Parameter< Operation::WRITE_DATASET >
const&)
override;
69 void writeAttribute(Writable*, Parameter< Operation::WRITE_ATT >
const&)
override;
70 void readDataset(Writable*, Parameter< Operation::READ_DATASET > &)
override;
71 void readAttribute(Writable*, Parameter< Operation::READ_ATT > &)
override;
72 void listPaths(Writable*, Parameter< Operation::LIST_PATHS > &)
override;
73 void listDatasets(Writable*, Parameter< Operation::LIST_DATASETS > &)
override;
74 void listAttributes(Writable*, Parameter< Operation::LIST_ATTS > &)
override;
76 virtual int64_t open_write(Writable *);
77 virtual ADIOS_FILE* open_read(std::string
const & name);
79 void close(ADIOS_FILE*);
80 int64_t initialize_group(std::string
const& name);
81 void flush_attribute(int64_t group, std::string
const& name, Attribute
const&);
84 ADIOS_READ_METHOD m_readMethod;
85 std::unordered_map< Writable*, std::shared_ptr< std::string > > m_filePaths;
86 std::unordered_map< std::shared_ptr< std::string >, int64_t > m_groups;
87 std::unordered_map< std::shared_ptr< std::string >,
bool > m_existsOnDisk;
88 std::unordered_map< std::shared_ptr< std::string >, int64_t > m_openWriteFileHandles;
89 std::unordered_map< std::shared_ptr< std::string >, ADIOS_FILE* > m_openReadFileHandles;
90 std::unordered_map< ADIOS_FILE*, std::vector< ADIOS_SELECTION* > > m_scheduledReads;
91 std::unordered_map< int64_t, std::unordered_map< std::string, Attribute > > m_attributeWrites;
96 int64_t GetFileHandle(Writable*);