Loading source/adios2/toolkit/format/bp3/BP3Deserializer.tcc +38 −4 Original line number Diff line number Diff line Loading @@ -432,10 +432,30 @@ void BP3Deserializer::GetValueFromMetadata(core::Variable<T> &variable, const std::vector<size_t> &positions = itStep->second; // global values only read one block per step const size_t positionsSize = (variable.m_ShapeID == ShapeID::LocalValue) ? positions.size() : 1; const size_t blocksStart = (variable.m_ShapeID == ShapeID::GlobalArray) ? variable.m_Start.front() : 0; for (size_t b = 0; b < positionsSize; ++b) const size_t blocksCount = (variable.m_ShapeID == ShapeID::GlobalArray) ? variable.m_Count.front() : 1; if (m_DebugMode) { if (blocksStart + blocksCount > positions.size()) { throw std::invalid_argument( "ERROR: selection Start {" + std::to_string(blocksStart) + "} and Count {" + std::to_string(blocksCount) + "} (requested) is out of bounds of (available) Shape {" + std::to_string(positions.size()) + "} for relative step " + std::to_string(s) + " , when reading 1D global array variable " + variable.m_Name + ", in call to Get"); } } for (size_t b = blocksStart; b < blocksCount; ++b) { size_t localPosition = positions[b]; const Characteristics<T> characteristics = Loading Loading @@ -688,6 +708,12 @@ inline void BP3Deserializer::DefineVariableInIO<std::string>( subsetPosition); position = subsetPosition + subsetCharacteristics.EntryLength + 5; } if (variable->m_ShapeID == ShapeID::LocalValue) { variable->m_ShapeID = ShapeID::GlobalArray; variable->m_SingleValue = true; } /* Update variable's starting step, which equals to the min value in the sorted map minus one */ variable->m_StepsStart = Loading Loading @@ -736,7 +762,6 @@ void BP3Deserializer::DefineVariableInIO(const ElementIndexHeader &header, { variable = &io.DefineVariable<T>(variableName, {1}, {0}, {1}); variable->m_ShapeID = ShapeID::LocalValue; variable->m_SingleValue = true; break; } case (ShapeID::LocalArray): Loading Loading @@ -836,6 +861,15 @@ void BP3Deserializer::DefineVariableInIO(const ElementIndexHeader &header, subsetPosition); position = subsetPosition + subsetCharacteristics.EntryLength + 5; } if (variable->m_ShapeID == ShapeID::LocalValue) { variable->m_ShapeID = ShapeID::GlobalArray; // variable will be presented as a 1D global array, but contents exist // in metadata variable->m_SingleValue = true; } /* Update variable's starting step, which equals to the min value in the * sorted map minus one */ variable->m_StepsStart = Loading testing/adios2/engine/bp/TestBPWriteReadLocalVariables.cpp +13 −9 Original line number Diff line number Diff line Loading @@ -208,11 +208,12 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal1D) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values will be read as 1D GlobalArrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); EXPECT_EQ(var_RanksLocalValue.Max(), mpiSize - 1); Loading @@ -226,8 +227,9 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal1D) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; bpReader.Get(var_RanksLocalValueString, rankLocalValueDataString, Loading Loading @@ -581,10 +583,10 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D2x4) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values are read as 1D Global Arrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); Loading @@ -599,7 +601,7 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D2x4) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; Loading Loading @@ -961,11 +963,12 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D4x2) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values are read as 1D Global Arrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); EXPECT_EQ(var_RanksLocalValue.Max(), mpiSize - 1); Loading @@ -979,8 +982,9 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D4x2) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; bpReader.Get(var_RanksLocalValueString, rankLocalValueDataString, Loading Loading
source/adios2/toolkit/format/bp3/BP3Deserializer.tcc +38 −4 Original line number Diff line number Diff line Loading @@ -432,10 +432,30 @@ void BP3Deserializer::GetValueFromMetadata(core::Variable<T> &variable, const std::vector<size_t> &positions = itStep->second; // global values only read one block per step const size_t positionsSize = (variable.m_ShapeID == ShapeID::LocalValue) ? positions.size() : 1; const size_t blocksStart = (variable.m_ShapeID == ShapeID::GlobalArray) ? variable.m_Start.front() : 0; for (size_t b = 0; b < positionsSize; ++b) const size_t blocksCount = (variable.m_ShapeID == ShapeID::GlobalArray) ? variable.m_Count.front() : 1; if (m_DebugMode) { if (blocksStart + blocksCount > positions.size()) { throw std::invalid_argument( "ERROR: selection Start {" + std::to_string(blocksStart) + "} and Count {" + std::to_string(blocksCount) + "} (requested) is out of bounds of (available) Shape {" + std::to_string(positions.size()) + "} for relative step " + std::to_string(s) + " , when reading 1D global array variable " + variable.m_Name + ", in call to Get"); } } for (size_t b = blocksStart; b < blocksCount; ++b) { size_t localPosition = positions[b]; const Characteristics<T> characteristics = Loading Loading @@ -688,6 +708,12 @@ inline void BP3Deserializer::DefineVariableInIO<std::string>( subsetPosition); position = subsetPosition + subsetCharacteristics.EntryLength + 5; } if (variable->m_ShapeID == ShapeID::LocalValue) { variable->m_ShapeID = ShapeID::GlobalArray; variable->m_SingleValue = true; } /* Update variable's starting step, which equals to the min value in the sorted map minus one */ variable->m_StepsStart = Loading Loading @@ -736,7 +762,6 @@ void BP3Deserializer::DefineVariableInIO(const ElementIndexHeader &header, { variable = &io.DefineVariable<T>(variableName, {1}, {0}, {1}); variable->m_ShapeID = ShapeID::LocalValue; variable->m_SingleValue = true; break; } case (ShapeID::LocalArray): Loading Loading @@ -836,6 +861,15 @@ void BP3Deserializer::DefineVariableInIO(const ElementIndexHeader &header, subsetPosition); position = subsetPosition + subsetCharacteristics.EntryLength + 5; } if (variable->m_ShapeID == ShapeID::LocalValue) { variable->m_ShapeID = ShapeID::GlobalArray; // variable will be presented as a 1D global array, but contents exist // in metadata variable->m_SingleValue = true; } /* Update variable's starting step, which equals to the min value in the * sorted map minus one */ variable->m_StepsStart = Loading
testing/adios2/engine/bp/TestBPWriteReadLocalVariables.cpp +13 −9 Original line number Diff line number Diff line Loading @@ -208,11 +208,12 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal1D) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values will be read as 1D GlobalArrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); EXPECT_EQ(var_RanksLocalValue.Max(), mpiSize - 1); Loading @@ -226,8 +227,9 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal1D) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; bpReader.Get(var_RanksLocalValueString, rankLocalValueDataString, Loading Loading @@ -581,10 +583,10 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D2x4) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values are read as 1D Global Arrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); Loading @@ -599,7 +601,7 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D2x4) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; Loading Loading @@ -961,11 +963,12 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D4x2) EXPECT_EQ(stepsGlobalValueStringDataString, std::to_string(currentStep)); // Local value // Local values are read as 1D Global Arrays EXPECT_TRUE(var_RanksLocalValue); EXPECT_EQ(var_RanksLocalValue.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); EXPECT_EQ(var_RanksLocalValue.Min(), 0); EXPECT_EQ(var_RanksLocalValue.Max(), mpiSize - 1); Loading @@ -979,8 +982,9 @@ TEST_F(BPWriteReadLocalVariables, ADIOS2BPWriteReadLocal2D4x2) EXPECT_TRUE(var_RanksLocalValueString); EXPECT_EQ(var_RanksLocalValueString.ShapeID(), adios2::ShapeID::LocalValue); adios2::ShapeID::GlobalArray); EXPECT_EQ(var_RanksLocalValue.Steps(), NSteps); EXPECT_EQ(var_RanksLocalValue.Shape().size(), 1); EXPECT_EQ(var_RanksLocalValue.Shape()[0], mpiSize); std::vector<std::string> rankLocalValueDataString; bpReader.Get(var_RanksLocalValueString, rankLocalValueDataString, Loading