From ee3f3951245addea283ab3b2efb789e5d12522f2 Mon Sep 17 00:00:00 2001
From: "Dmitry Yu. Naumov" <github@naumov.de>
Date: Fri, 18 Sep 2015 18:24:32 +0000
Subject: [PATCH] [MaL] Move eigen solver compute call to solve().

---
 MathLib/LinAlg/Eigen/EigenLinearSolver.cpp | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
index e1bbcbc83fe..3c66f5cef42 100644
--- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
+++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
@@ -32,16 +32,17 @@ public:
     explicit EigenDirectLinearSolver(EigenMatrix::RawMatrixType &A) : _A(A)
     {
         INFO("-> initialize with the coefficient matrix");
-        _solver.compute(A);
-        if(_solver.info()!=Eigen::Success) {
-            ERR("Failed during Eigen linear solver initialization");
-            return;
-        }
     }
 
     void solve(EigenVector::RawVectorType &b, EigenVector::RawVectorType &x, EigenOption &/*opt*/) override
     {
         INFO("-> solve");
+        _solver.compute(_A);
+        if(_solver.info()!=Eigen::Success) {
+            ERR("Failed during Eigen linear solver initialization");
+            return;
+        }
+
         x = _solver.solve(b);
         if(_solver.info()!=Eigen::Success) {
             ERR("Failed during Eigen linear solve");
@@ -62,11 +63,6 @@ public:
     explicit EigenIterativeLinearSolver(EigenMatrix::RawMatrixType &A) : _A(A)
     {
         INFO("-> initialize with the coefficient matrix");
-        _solver.compute(A);
-        if(_solver.info()!=Eigen::Success) {
-            ERR("Failed during Eigen linear solver initialization");
-            return;
-        }
     }
 
     void solve(EigenVector::RawVectorType &b, EigenVector::RawVectorType &x, EigenOption &opt) override
@@ -74,6 +70,11 @@ public:
         INFO("-> solve");
         _solver.setTolerance(opt.error_tolerance);
         _solver.setMaxIterations(opt.max_iterations);
+        _solver.compute(_A);
+        if(_solver.info()!=Eigen::Success) {
+            ERR("Failed during Eigen linear solver initialization");
+            return;
+        }
         x = _solver.solveWithGuess(b, x);
         if(_solver.info()!=Eigen::Success) {
             ERR("Failed during Eigen linear solve");
-- 
GitLab