diff --git a/source/adios2/engine/bp/BPFileReader.h b/source/adios2/engine/bp/BPFileReader.h index 4c123500ec1c589382a6a4065897d5e76a6630c1..9a2427de15c267276d9383fd557ccc7fe7f9ea9d 100644 --- a/source/adios2/engine/bp/BPFileReader.h +++ b/source/adios2/engine/bp/BPFileReader.h @@ -19,9 +19,16 @@ namespace adios2 { +namespace utils +{ +class BPLS2; +} + class BPFileReader : public Engine { + friend class utils::BPLS2; + public: /** * Unique constructor diff --git a/source/utils/bpls2/BPLS2.cpp b/source/utils/bpls2/BPLS2.cpp index 00e87201acfcd9e72760dfe8f76cf4ccd57da5b6..b18b0212c3e3694d3d16ed717fd68d4a7bba5226 100644 --- a/source/utils/bpls2/BPLS2.cpp +++ b/source/utils/bpls2/BPLS2.cpp @@ -12,6 +12,11 @@ #include <iostream> +#include "adios2/ADIOSMPICommOnly.h" +#include "adios2/core/ADIOS.h" +#include "adios2/core/IO.h" +#include "adios2/engine/bp/BPFileReader.h" + namespace adios2 { namespace utils @@ -31,6 +36,7 @@ void BPLS2::Run() { ParseArguments(); ProcessParameters(); + ProcessTransport(); } // PRIVATE @@ -175,5 +181,37 @@ void BPLS2::SetParameters(const std::string argument, const bool isLong) } } +void BPLS2::ProcessTransport() const +{ + ADIOS adios(true); + IO &io = adios.DeclareIO("bpls2"); + BPFileReader bpFileReader(io, m_FileName, Mode::Read, io.m_MPIComm); + const auto variablesMap = io.GetAvailableVariables(); + // const auto attributesMap = io.GetAvailableAttributes(); + + if (m_Parameters.count("verbose") == 1) + { + const auto &metadataSet = bpFileReader.m_BP3Deserializer.m_MetadataSet; + std::cout << "File info:\n"; + std::cout << " groups: " << metadataSet.DataPGCount << "\n"; + std::cout << " variables: " << variablesMap.size() << "\n"; + std::cout << " attributes: TODO\n"; + std::cout << " meshes: TODO\n"; + std::cout << " time steps: " << metadataSet.TimeStep << "\n"; + std::cout << " file size: " + << bpFileReader.m_FileManager.GetFileSize(0) << " bytes\n"; + + const auto &minifooter = bpFileReader.m_BP3Deserializer.m_Minifooter; + std::cout << " bp version: " << std::to_string(minifooter.Version) + << "\n"; + std::string endianness("Little Endian"); + if (!minifooter.IsLittleEndian) + { + endianness = "Big Endian"; + } + std::cout << " Endianness: " << endianness << "\n"; + } +} + } // end namespace utils } // end namespace adios2 diff --git a/source/utils/bpls2/BPLS2.h b/source/utils/bpls2/BPLS2.h index 37b2e67a2aa6ba3422dfff7f2e9402904439c697..f925437977db6097b2a4d8db7758d3a4356db456 100644 --- a/source/utils/bpls2/BPLS2.h +++ b/source/utils/bpls2/BPLS2.h @@ -38,6 +38,8 @@ private: void PrintUsage() const noexcept final; void PrintExamples() const noexcept final; void SetParameters(const std::string argument, const bool isLong) final; + + void ProcessTransport() const; }; } // end namespace utils diff --git a/source/utils/bpls2/main.cpp b/source/utils/bpls2/main.cpp index c9fe8694b8cf396b85a130e0c677c1e95a615bb7..f1315b81cf648bbadfe4efb960050a20f4229b66 100644 --- a/source/utils/bpls2/main.cpp +++ b/source/utils/bpls2/main.cpp @@ -11,10 +11,13 @@ #include <iostream> #include <stdexcept> +#include "adios2/ADIOSMPI.h" #include "utils/bpls2/BPLS2.h" int main(int argc, char *argv[]) { + MPI_Init(&argc, &argv); + try { adios2::utils::BPLS2 bpls2(argc, argv); @@ -25,4 +28,6 @@ int main(int argc, char *argv[]) std::cout << "bpls2 Caught an Exception\n"; std::cout << e.what() << "\n"; } + + MPI_Finalize(); }