From e780c8570301a18b98fcb374636a32e2ca9484fb Mon Sep 17 00:00:00 2001
From: Jason Wang <w4g@ornl.gov>
Date: Fri, 25 Feb 2022 13:41:06 -0500
Subject: [PATCH] fix BP5 NdCopy dimensions for column major read

---
 .../toolkit/format/bp5/BP5Deserializer.cpp    | 44 ++++++++-----------
 1 file changed, 19 insertions(+), 25 deletions(-)

diff --git a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp
index e331a3ee94..b4d5e79296 100644
--- a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp
+++ b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp
@@ -1230,31 +1230,25 @@ void BP5Deserializer::FinalizeGets(std::vector<ReadRequest> Requests)
                             GlobalDimensions[i] = RankSize[i];
                         }
                     }
-                    helper::NdCopy(
-                        IncomingData,
-                        adios2::Dims(RankOffset, RankOffset + DimCount),
-                        adios2::Dims(RankSize, RankSize + DimCount),
-                        true /* m_WriterIsRowMajor */,
-                        false /*WriterIsLittleEndian*/, (char *)Req.Data,
-                        adios2::Dims(SelOffset, SelOffset + DimCount),
-                        adios2::Dims(SelSize, SelSize + DimCount),
-                        true /*m_ReaderIsRowMajor */,
-                        false /*m_ReaderIsLittleEndian*/, ElementSize);
-
-                    // if (m_ReaderIsRowMajor)
-                    // {
-                    //     ExtractSelectionFromPartialRM(
-                    //         ElementSize, DimCount, GlobalDimensions,
-                    //         RankOffset, RankSize, SelOffset, SelSize,
-                    //         IncomingData, (char *)Req.Data, Req.MemSpace);
-                    // }
-                    // else
-                    // {
-                    //     ExtractSelectionFromPartialCM(
-                    //         ElementSize, DimCount, GlobalDimensions,
-                    //         RankOffset, RankSize, SelOffset, SelSize,
-                    //         IncomingData, (char *)Req.Data, Req.MemSpace);
-                    // }
+
+                    auto inStart =
+                        adios2::Dims(RankOffset, RankOffset + DimCount);
+                    auto inCount = adios2::Dims(RankSize, RankSize + DimCount);
+                    auto outStart =
+                        adios2::Dims(SelOffset, SelOffset + DimCount);
+                    auto outCount = adios2::Dims(SelSize, SelSize + DimCount);
+
+                    if (!m_ReaderIsRowMajor)
+                    {
+                        std::reverse(inStart.begin(), inStart.end());
+                        std::reverse(inCount.begin(), inCount.end());
+                        std::reverse(outStart.begin(), outStart.end());
+                        std::reverse(outCount.begin(), outCount.end());
+                    }
+
+                    helper::NdCopy(IncomingData, inStart, inCount, true, true,
+                                   (char *)Req.Data, outStart, outCount, true,
+                                   true, ElementSize);
                 }
             }
         }