From 093d939d75601e9f1390c6e87d0764399bef7d02 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Tue, 9 Aug 2022 12:09:17 +0200
Subject: [PATCH] [PL] Transposition of ip data in a std::vector

---
 ProcessLib/Utils/TransposeInPlace.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/ProcessLib/Utils/TransposeInPlace.h b/ProcessLib/Utils/TransposeInPlace.h
index 163ebf9713f..6b8b338ef5a 100644
--- a/ProcessLib/Utils/TransposeInPlace.h
+++ b/ProcessLib/Utils/TransposeInPlace.h
@@ -37,4 +37,32 @@ std::vector<double> transposeInPlace(
     return result;
 }
 
+template <int Components>
+void transposeInPlace(std::vector<double>& values)
+{
+    MathLib::toMatrix<
+        Eigen::Matrix<double, Eigen::Dynamic, Components, Eigen::RowMajor>>(
+        values, values.size() / Components, Components) =
+        MathLib::toMatrix<
+            Eigen::Matrix<double, Components, Eigen::Dynamic, Eigen::RowMajor>>(
+            values, Components, values.size() / Components)
+            .transpose()
+            .eval();
+}
+
+inline void transposeInPlace(std::vector<double>& values,
+                             unsigned const num_components)
+{
+    MathLib::toMatrix<
+        Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
+        values, values.size() / num_components, num_components) =
+        MathLib::toMatrix<Eigen::Matrix<double,
+                                        Eigen::Dynamic,
+                                        Eigen::Dynamic,
+                                        Eigen::RowMajor>>(
+            values, num_components, values.size() / num_components)
+            .transpose()
+            .eval();
+}
+
 }  // namespace ProcessLib
-- 
GitLab