diff --git a/source/adios2/toolkit/transportman/TransportMan.cpp b/source/adios2/toolkit/transportman/TransportMan.cpp index ce5b5ded7dbbaf6a6ef5491e6c42a7070c8b8716..7e1a8cae16b69fcb166dd5819e79798cdeecb2bd 100644 --- a/source/adios2/toolkit/transportman/TransportMan.cpp +++ b/source/adios2/toolkit/transportman/TransportMan.cpp @@ -93,8 +93,9 @@ std::vector<std::string> TransportMan::GetFilesBaseNames( throw std::invalid_argument( "ERROR: two IO AddTransport of the same type can't " "have the same name : " + - name + ", use Name=value parameter, in " - "call to Open"); + name + + ", use Name=value parameter, in " + "call to Open"); } } itType->second.insert(name); @@ -154,7 +155,7 @@ void TransportMan::WriteFiles(const char *buffer, const size_t size, } } -size_t TransportMan::GetFileSize(const size_t transportIndex) +size_t TransportMan::GetFileSize(const size_t transportIndex) const { auto itTransport = m_Transports.find(transportIndex); CheckFile(itTransport, ", in call to GetFileSize with index " + diff --git a/source/adios2/toolkit/transportman/TransportMan.h b/source/adios2/toolkit/transportman/TransportMan.h index 022271ab656043fe6b9a8f70a39d623497fb6388..a305236a7191576159dc55904bd9edf26ef54173 100644 --- a/source/adios2/toolkit/transportman/TransportMan.h +++ b/source/adios2/toolkit/transportman/TransportMan.h @@ -101,7 +101,7 @@ public: void WriteFiles(const char *buffer, const size_t size, const int transportIndex = -1); - size_t GetFileSize(const size_t transportIndex = 0); + size_t GetFileSize(const size_t transportIndex = 0) const; /** * Read contents from a single file and assign it to buffer diff --git a/source/utils/bpls2/BPLS2.cpp b/source/utils/bpls2/BPLS2.cpp index b18b0212c3e3694d3d16ed717fd68d4a7bba5226..1151fdacd3936b891090e957c7dbfd53f1d62f91 100644 --- a/source/utils/bpls2/BPLS2.cpp +++ b/source/utils/bpls2/BPLS2.cpp @@ -10,6 +10,7 @@ #include "BPLS2.h" +#include <iomanip> #include <iostream> #include "adios2/ADIOSMPICommOnly.h" @@ -97,8 +98,8 @@ void BPLS2::ProcessParameters() const std::cout << "\n"; std::cout << "Found --help , -h option, discarding others\n"; std::cout << "Rerun without --help , -h option\n"; + throw std::invalid_argument(""); } - return; } if (m_FileName.empty()) @@ -118,8 +119,9 @@ void BPLS2::PrintUsage() const noexcept std::cout << "-l , --long Print variables and attributes metadata\n"; std::cout << " information, no overhead\n"; std::cout << "-a , --attributes List attributes metadata\n"; - - std::cout << "Example: bpls2 -lav bpfile\n"; + std::cout << "-v , --verbose Added file information\n"; + std::cout << "\n"; + std::cout << "Example: bpls2 -lav bpfile" << std::endl; } void BPLS2::PrintExamples() const noexcept {} @@ -183,34 +185,75 @@ 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(); + auto lf_PrintVerboseHeader = [](const BPFileReader &bpFileReader, + const size_t variablesSize, + const size_t attributesSize) { - 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: " + std::cout << " groups: " << metadataSet.DataPGCount << "\n"; + std::cout << " variables: " << variablesSize << "\n"; + std::cout << " attributes: " << attributesSize << "\n"; + std::cout << " meshes: TODO\n"; + std::cout << " 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) + 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"; + std::cout << " endianness: " << endianness << "\n"; + std::cout << " statistics: Min / Max / Avg / Std_dev\n" << std::endl; + }; + + auto lf_PrintVariables = + [&](const std::map<std::string, std::string> &variablesMap) { + + // get maximum sizes + size_t maxTypeSize = 0; + size_t maxNameSize = 0; + for (const auto &variablePair : variablesMap) + { + const size_t nameSize = variablePair.first.size(); + if (nameSize > maxNameSize) + { + maxNameSize = nameSize; + } + + const size_t typeSize = variablePair.second.size(); + if (typeSize > maxTypeSize) + { + maxTypeSize = typeSize; + } + } + + for (const auto &variablePair : variablesMap) + { + std::cout << " "; + std::cout << std::left << std::setw(maxTypeSize) + << variablePair.second << " "; + std::cout << std::left << std::setw(maxNameSize) + << variablePair.first << std::endl; + } + }; + + 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) + { + lf_PrintVerboseHeader(bpFileReader, variablesMap.size(), 0); } + + lf_PrintVariables(variablesMap); } } // end namespace utils diff --git a/source/utils/bpls2/main.cpp b/source/utils/bpls2/main.cpp index f1315b81cf648bbadfe4efb960050a20f4229b66..383080ad0e23f6b2f6f7069c43ec5fbddc126579 100644 --- a/source/utils/bpls2/main.cpp +++ b/source/utils/bpls2/main.cpp @@ -25,7 +25,6 @@ int main(int argc, char *argv[]) } catch (std::exception &e) { - std::cout << "bpls2 Caught an Exception\n"; std::cout << e.what() << "\n"; }