From c2f22c203483a26803babb741cfee6542507cfa3 Mon Sep 17 00:00:00 2001
From: "Godoy, William F" <williamfgc@yahoo.com>
Date: Fri, 28 Jun 2019 20:31:16 -0400
Subject: [PATCH] Exposes IsReverseDims in BlockInfo

---
 bindings/CXX11/adios2/cxx11/Engine.tcc                    | 1 +
 bindings/CXX11/adios2/cxx11/Variable.h                    | 2 ++
 bindings/CXX11/adios2/cxx11/Variable.tcc                  | 1 +
 source/adios2/core/Variable.h                             | 1 +
 source/adios2/toolkit/format/bp3/BP3Deserializer.tcc      | 1 +
 source/adios2/toolkit/format/bp4/BP4Deserializer.tcc      | 1 +
 testing/adios2/bindings/fortran/TestF2C_BPReadFBlocks.cpp | 2 ++
 testing/adios2/engine/bp/TestBPWriteReadBlockInfo.cpp     | 2 ++
 8 files changed, 11 insertions(+)

diff --git a/bindings/CXX11/adios2/cxx11/Engine.tcc b/bindings/CXX11/adios2/cxx11/Engine.tcc
index 06e649238..024f38dd0 100644
--- a/bindings/CXX11/adios2/cxx11/Engine.tcc
+++ b/bindings/CXX11/adios2/cxx11/Engine.tcc
@@ -41,6 +41,7 @@ ToBlocksInfo(const std::vector<typename core::Variable<
         blockInfo.Start = coreBlockInfo.Start;
         blockInfo.Count = coreBlockInfo.Count;
         blockInfo.IsValue = coreBlockInfo.IsValue;
+        blockInfo.IsReverseDims = coreBlockInfo.IsReverseDims;
         if (blockInfo.IsValue)
         {
             blockInfo.Value = coreBlockInfo.Value;
diff --git a/bindings/CXX11/adios2/cxx11/Variable.h b/bindings/CXX11/adios2/cxx11/Variable.h
index 425ab0033..aec1f15dc 100644
--- a/bindings/CXX11/adios2/cxx11/Variable.h
+++ b/bindings/CXX11/adios2/cxx11/Variable.h
@@ -348,6 +348,8 @@ public:
         size_t Step = 0;
         /** reference to internal block data (used by inline Engine) */
         const T *Data() const;
+        /** true: Dims were swapped from column-major, false: not swapped */
+        bool IsReverseDims = false;
 
         // allow Engine to set m_Info
         friend class Engine;
diff --git a/bindings/CXX11/adios2/cxx11/Variable.tcc b/bindings/CXX11/adios2/cxx11/Variable.tcc
index fe8a0f1c2..ef01d9818 100644
--- a/bindings/CXX11/adios2/cxx11/Variable.tcc
+++ b/bindings/CXX11/adios2/cxx11/Variable.tcc
@@ -37,6 +37,7 @@ ToBlocksInfo(const std::vector<typename core::Variable<
         typename Variable<T>::Info blockInfo;
         blockInfo.Start = coreBlockInfo.Start;
         blockInfo.Count = coreBlockInfo.Count;
+        blockInfo.IsReverseDims = coreBlockInfo.IsReverseDims;
         blockInfo.IsValue = coreBlockInfo.IsValue;
         if (blockInfo.IsValue)
         {
diff --git a/source/adios2/core/Variable.h b/source/adios2/core/Variable.h
index 36dd50d7e..67c541272 100644
--- a/source/adios2/core/Variable.h
+++ b/source/adios2/core/Variable.h
@@ -101,6 +101,7 @@ public:
         std::vector<T> BufferV;
         SelectionType Selection = SelectionType::BoundingBox;
         bool IsValue = false;
+        bool IsReverseDims = false;
     };
 
     /** use for multiblock info */
diff --git a/source/adios2/toolkit/format/bp3/BP3Deserializer.tcc b/source/adios2/toolkit/format/bp3/BP3Deserializer.tcc
index ae5192177..3a6d638d6 100644
--- a/source/adios2/toolkit/format/bp3/BP3Deserializer.tcc
+++ b/source/adios2/toolkit/format/bp3/BP3Deserializer.tcc
@@ -1086,6 +1086,7 @@ std::vector<typename core::Variable<T>::Info> BP3Deserializer::BlocksInfoCommon(
         blockInfo.Shape = blockCharacteristics.Shape;
         blockInfo.Start = blockCharacteristics.Start;
         blockInfo.Count = blockCharacteristics.Count;
+        blockInfo.IsReverseDims = m_ReverseDimensions;
 
         if (m_ReverseDimensions)
         {
diff --git a/source/adios2/toolkit/format/bp4/BP4Deserializer.tcc b/source/adios2/toolkit/format/bp4/BP4Deserializer.tcc
index 3947ec976..8e1794877 100644
--- a/source/adios2/toolkit/format/bp4/BP4Deserializer.tcc
+++ b/source/adios2/toolkit/format/bp4/BP4Deserializer.tcc
@@ -1147,6 +1147,7 @@ std::vector<typename core::Variable<T>::Info> BP4Deserializer::BlocksInfoCommon(
         blockInfo.Shape = blockCharacteristics.Shape;
         blockInfo.Start = blockCharacteristics.Start;
         blockInfo.Count = blockCharacteristics.Count;
+        blockInfo.IsReverseDims = m_ReverseDimensions;
 
         if (m_ReverseDimensions)
         {
diff --git a/testing/adios2/bindings/fortran/TestF2C_BPReadFBlocks.cpp b/testing/adios2/bindings/fortran/TestF2C_BPReadFBlocks.cpp
index edc8a7771..75fb4cb19 100644
--- a/testing/adios2/bindings/fortran/TestF2C_BPReadFBlocks.cpp
+++ b/testing/adios2/bindings/fortran/TestF2C_BPReadFBlocks.cpp
@@ -62,6 +62,7 @@ TEST_F(BPReadFBlocks, FHeatMap2D)
 
                     EXPECT_EQ(r32Blocks[i].Start[1], 0);
                     EXPECT_EQ(r32Blocks[i].Count[1], var_r32.Shape()[1]);
+                    EXPECT_TRUE(r32Blocks[i].IsReverseDims);
                 }
             }
         }
@@ -113,6 +114,7 @@ TEST_F(BPReadFBlocks, FHeatMap3D)
 
                     EXPECT_EQ(r32Blocks[i].Start[2], 0);
                     EXPECT_EQ(r32Blocks[i].Count[2], var_r32.Shape()[2]);
+                    EXPECT_EQ(r32Blocks[i].IsReverseDims, true);
                 }
             }
         }
diff --git a/testing/adios2/engine/bp/TestBPWriteReadBlockInfo.cpp b/testing/adios2/engine/bp/TestBPWriteReadBlockInfo.cpp
index 4043e17f5..4e533f544 100644
--- a/testing/adios2/engine/bp/TestBPWriteReadBlockInfo.cpp
+++ b/testing/adios2/engine/bp/TestBPWriteReadBlockInfo.cpp
@@ -42,6 +42,7 @@ void CheckAllStepsBlockInfo1D(
             EXPECT_EQ(allStepsBlocksInfo[s][b].Start[0], b * Nx);
             EXPECT_EQ(allStepsBlocksInfo[s][b].Count[0], Nx);
             EXPECT_EQ(allStepsBlocksInfo[s][b].Step, s);
+            EXPECT_FALSE(allStepsBlocksInfo[s][b].IsReverseDims);
         }
     }
 }
@@ -64,6 +65,7 @@ void CheckAllStepsBlockInfo2D(
             EXPECT_EQ(allStepsBlocksInfo[s][b].Count[0], Ny);
             EXPECT_EQ(allStepsBlocksInfo[s][b].Count[1], Nx);
             EXPECT_EQ(allStepsBlocksInfo[s][b].Step, s);
+            EXPECT_FALSE(allStepsBlocksInfo[s][b].IsReverseDims);
         }
     }
 }
-- 
GitLab