From 2b91f85a2c05309a071ec47a5755e49bc9d54d83 Mon Sep 17 00:00:00 2001 From: William F Godoy <williamfgc@yahoo.com> Date: Mon, 5 Jun 2017 17:13:47 -0400 Subject: [PATCH] BP file output now compatible with bpdump --- source/adios2/core/IO.h | 2 +- source/adios2/core/VariableBase.cpp | 4 +-- .../adios2/toolkit/format/bp1/BP1Writer.cpp | 36 +++++++++++++------ source/adios2/toolkit/format/bp1/BP1Writer.h | 5 ++- .../adios2/toolkit/format/bp1/BP1Writer.tcc | 22 +++--------- .../toolkit/interop/adios1/ADIOS1Common.h | 2 +- 6 files changed, 36 insertions(+), 35 deletions(-) diff --git a/source/adios2/core/IO.h b/source/adios2/core/IO.h index 215dbbfd9..87df704d8 100644 --- a/source/adios2/core/IO.h +++ b/source/adios2/core/IO.h @@ -42,7 +42,7 @@ public: /** from ADIOS class passed to Engine created with Open * if no new communicator is passed */ - MPI_Comm m_MPIComm = MPI_COMM_SELF; + MPI_Comm m_MPIComm; /** true: extra exceptions checks */ const bool m_DebugMode = false; diff --git a/source/adios2/core/VariableBase.cpp b/source/adios2/core/VariableBase.cpp index 40632a61e..db50a21db 100644 --- a/source/adios2/core/VariableBase.cpp +++ b/source/adios2/core/VariableBase.cpp @@ -112,8 +112,8 @@ void VariableBase::SetMemorySelection(const SelectionBoundingBox &selection) } } - ConvertUint64VectorToSizetVector(selection.m_Count, m_MemoryCount); - ConvertUint64VectorToSizetVector(selection.m_Start, m_MemoryStart); + m_MemoryCount = selection.m_Count; + m_MemoryStart = selection.m_Start; } void VariableBase::SetStepSelection(const unsigned int startStep, diff --git a/source/adios2/toolkit/format/bp1/BP1Writer.cpp b/source/adios2/toolkit/format/bp1/BP1Writer.cpp index 34639d7fb..daaf29b8c 100644 --- a/source/adios2/toolkit/format/bp1/BP1Writer.cpp +++ b/source/adios2/toolkit/format/bp1/BP1Writer.cpp @@ -248,14 +248,19 @@ void BP1Writer::WriteDimensionsRecord(const Dims localDimensions, void BP1Writer::WriteDimensionsRecord(const Dims localDimensions, const Dims globalDimensions, const Dims offsets, - const unsigned int skip, std::vector<char> &buffer, - size_t &position) noexcept + size_t &position, + const bool isCharacteristic) noexcept { - auto lf_WriteFlaggedDim = [](std::vector<char> &buffer, size_t &position, - const size_t dimension) { - constexpr char no = 'n'; - CopyToBuffer(buffer, position, &no); + auto lf_CopyDimension = [](std::vector<char> &buffer, size_t &position, + const size_t dimension, + const bool isCharacteristic) { + if (!isCharacteristic) + { + constexpr char no = 'n'; + CopyToBuffer(buffer, position, &no); + } + CopyToBuffer(buffer, position, reinterpret_cast<const uint64_t *>(&dimension)); }; @@ -263,19 +268,28 @@ void BP1Writer::WriteDimensionsRecord(const Dims localDimensions, // BODY Starts here if (offsets.empty()) { + unsigned int globalBoundsSkip = 18; + if (isCharacteristic) + { + globalBoundsSkip = 16; + } + for (const auto &localDimension : localDimensions) { - lf_WriteFlaggedDim(buffer, position, localDimension); - position += skip; + lf_CopyDimension(buffer, position, localDimension, + isCharacteristic); + position += globalBoundsSkip; } } else { for (unsigned int d = 0; d < localDimensions.size(); ++d) { - lf_WriteFlaggedDim(buffer, position, localDimensions[d]); - lf_WriteFlaggedDim(buffer, position, globalDimensions[d]); - lf_WriteFlaggedDim(buffer, position, offsets[d]); + lf_CopyDimension(buffer, position, localDimensions[d], + isCharacteristic); + lf_CopyDimension(buffer, position, globalDimensions[d], + isCharacteristic); + lf_CopyDimension(buffer, position, offsets[d], isCharacteristic); } } } diff --git a/source/adios2/toolkit/format/bp1/BP1Writer.h b/source/adios2/toolkit/format/bp1/BP1Writer.h index d3caf67f3..d193753c1 100644 --- a/source/adios2/toolkit/format/bp1/BP1Writer.h +++ b/source/adios2/toolkit/format/bp1/BP1Writer.h @@ -186,9 +186,8 @@ private: /** Overloaded version for data buffer */ void WriteDimensionsRecord(const Dims localDimensions, const Dims globalDimensions, const Dims offsets, - const unsigned int skip, - std::vector<char> &buffer, - size_t &position) noexcept; + std::vector<char> &buffer, size_t &position, + const bool isCharacteristic = false) noexcept; /** Writes min max */ template <class T> diff --git a/source/adios2/toolkit/format/bp1/BP1Writer.tcc b/source/adios2/toolkit/format/bp1/BP1Writer.tcc index 31eac673a..eef815c26 100644 --- a/source/adios2/toolkit/format/bp1/BP1Writer.tcc +++ b/source/adios2/toolkit/format/bp1/BP1Writer.tcc @@ -175,16 +175,15 @@ void BP1Writer::WriteVariableMetadataInData( CopyToBuffer(buffer, position, &dimensionsLength); // length WriteDimensionsRecord(variable.m_Count, variable.m_Shape, variable.m_Start, - 18, buffer, position); + buffer, position); // CHARACTERISTICS - // FIX WriteVariableCharacteristics(variable, stats, buffer, position); // Back to varLength including payload size - // remove its own size (8) from length + // not need to remove its own size (8) from length from bpdump const uint64_t varLength = - position - varLengthPosition + variable.PayLoadSize() - 8; + position - varLengthPosition + variable.PayLoadSize(); size_t backPosition = varLengthPosition; CopyToBuffer(buffer, backPosition, &varLength); @@ -301,10 +300,6 @@ void BP1Writer::WriteCharacteristicRecord(const uint8_t characteristicID, { const std::uint8_t id = characteristicID; CopyToBuffer(buffer, position, &id); - - const std::uint16_t lengthOfCharacteristic = sizeof(T); - CopyToBuffer(buffer, position, &lengthOfCharacteristic); - CopyToBuffer(buffer, position, &value); ++characteristicsCounter; } @@ -372,25 +367,18 @@ void BP1Writer::WriteVariableCharacteristics( // DIMENSIONS uint8_t characteristicID = characteristic_dimensions; CopyToBuffer(buffer, position, &characteristicID); - const uint8_t dimensions = variable.m_Count.size(); - - // 24 = 3 local, global, offset x 8 bytes/each - const int16_t lengthOfDimensionsCharacteristic = 24 * dimensions + 3; - CopyToBuffer(buffer, position, &lengthOfDimensionsCharacteristic); + const uint8_t dimensions = variable.m_Count.size(); CopyToBuffer(buffer, position, &dimensions); // count const uint16_t dimensionsLength = 24 * dimensions; CopyToBuffer(buffer, position, &dimensionsLength); // length WriteDimensionsRecord(variable.m_Count, variable.m_Shape, variable.m_Start, - 16, buffer, position); + buffer, position, true); // isCharacteristic = true ++characteristicsCounter; // VALUE for SCALAR or STAT min, max for ARRAY WriteBoundsRecord(variable.m_SingleValue, stats, characteristicsCounter, buffer, position); - // TIME INDEX - WriteCharacteristicRecord(characteristic_time_index, characteristicsCounter, - stats.TimeIndex, buffer, position); // END OF CHARACTERISTICS // Back to characteristics count and length diff --git a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h index 05327d92b..c5e2297f4 100644 --- a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h +++ b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h @@ -73,7 +73,7 @@ public: void Close(); private: - MPI_Comm m_MPIComm = MPI_COMM_SELF; + MPI_Comm m_MPIComm; const bool m_DebugMode = false; void Init(); -- GitLab