From 218331a1bb961f7f53cb69e55e8f8c62392e2418 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Mon, 21 Mar 2016 01:01:05 +0000
Subject: [PATCH] [MaL] ODE: Explicitly specify ColMajor for eigen.

---
 MathLib/ODE/OdeSolver.h        | 7 ++++---
 MathLib/ODE/OdeSolverFactory.h | 7 ++++---
 MathLib/ODE/OdeSolverTypes.h   | 5 +++--
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/MathLib/ODE/OdeSolver.h b/MathLib/ODE/OdeSolver.h
index ffaadf7b29f..2500f26e91c 100644
--- a/MathLib/ODE/OdeSolver.h
+++ b/MathLib/ODE/OdeSolver.h
@@ -40,8 +40,9 @@ public:
 
 	virtual void setIC(const double t0,
 	                   std::array<double, NumEquations> const& y0) = 0;
-	virtual void setIC(const double t0,
-	                   Eigen::Matrix<double, NumEquations, 1> const& y0) = 0;
+	virtual void setIC(
+	    const double t0,
+	    Eigen::Matrix<double, NumEquations, 1, Eigen::ColMajor> const& y0) = 0;
 
 	virtual void preSolve() = 0;
 	virtual void solve(const double t) = 0;
@@ -49,7 +50,7 @@ public:
 	virtual unsigned getNumEquations() const { return NumEquations; }
 	virtual MappedConstVector<NumEquations> getSolution() const = 0;
 	virtual double getTime() const = 0;
-	virtual Eigen::Matrix<double, NumEquations, 1> getYDot(
+	virtual Eigen::Matrix<double, NumEquations, 1, Eigen::ColMajor> getYDot(
 	    const double t, const MappedConstVector<NumEquations>& y) const = 0;
 
 	virtual ~OdeSolver() = default;
diff --git a/MathLib/ODE/OdeSolverFactory.h b/MathLib/ODE/OdeSolverFactory.h
index 3d4d9c1af64..435d8326003 100644
--- a/MathLib/ODE/OdeSolverFactory.h
+++ b/MathLib/ODE/OdeSolverFactory.h
@@ -163,7 +163,8 @@ public:
 	}
 
 	void setIC(const double t0,
-	           Eigen::Matrix<double, NumEquations, 1> const& y0) override
+	           Eigen::Matrix<double, NumEquations, 1, Eigen::ColMajor> const&
+	               y0) override
 	{
 		Implementation::setIC(t0, y0.data());
 	}
@@ -176,10 +177,10 @@ public:
 	}
 
 	double getTime() const override { return Implementation::getTime(); }
-	Eigen::Matrix<double, NumEquations, 1> getYDot(
+	Eigen::Matrix<double, NumEquations, 1, Eigen::ColMajor> getYDot(
 	    const double t, const MappedConstVector<NumEquations>& y) const override
 	{
-		Eigen::Matrix<double, NumEquations, 1> y_dot;
+		Eigen::Matrix<double, NumEquations, 1, Eigen::ColMajor> y_dot;
 		Implementation::getYDot(t, y.data(), y_dot.data());
 		return y_dot;
 	}
diff --git a/MathLib/ODE/OdeSolverTypes.h b/MathLib/ODE/OdeSolverTypes.h
index 15d8b31338a..7c441faf6da 100644
--- a/MathLib/ODE/OdeSolverTypes.h
+++ b/MathLib/ODE/OdeSolverTypes.h
@@ -15,10 +15,11 @@
 namespace MathLib
 {
 template <int M, int N>
-using MappedMatrix = Eigen::Map<Eigen::Matrix<double, M, N>>;
+using MappedMatrix = Eigen::Map<Eigen::Matrix<double, M, N, Eigen::ColMajor>>;
 
 template <int M, int N>
-using MappedConstMatrix = Eigen::Map<const Eigen::Matrix<double, M, N>>;
+using MappedConstMatrix =
+    Eigen::Map<const Eigen::Matrix<double, M, N, Eigen::ColMajor>>;
 
 template <int N>
 using MappedVector = MappedMatrix<N, 1>;
-- 
GitLab