From a3a36402d26264df034bf3b5908c33b7ea294d76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Corentin=20Thom=C3=A9e?= <corentin.thomee@student.uliege.be>
Date: Mon, 11 Mar 2024 09:14:56 +0100
Subject: [PATCH] Compute the solver only once to get massive speed boost

---
 hspm/src/hspm.cpp   |  2 ++
 hspm/src/hspm.h     |  2 +-
 hspm/src/solver.cpp | 15 ++-------------
 3 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/hspm/src/hspm.cpp b/hspm/src/hspm.cpp
index bd7be9c..55bc9e8 100644
--- a/hspm/src/hspm.cpp
+++ b/hspm/src/hspm.cpp
@@ -7,6 +7,8 @@ void HSPM::initHSPM()
     */
     
     this->computeConstantInfluenceCoeffs();
+    solver.compute(A_n);
+    
     this->blVel = Eigen::VectorXd::Zero(N);
     this->U = Eigen::VectorXd::Zero(N);
     this->V = Eigen::VectorXd::Zero(N);
diff --git a/hspm/src/hspm.h b/hspm/src/hspm.h
index ee2507a..d1e206b 100644
--- a/hspm/src/hspm.h
+++ b/hspm/src/hspm.h
@@ -73,7 +73,7 @@ public:
     Eigen::VectorXd U_wake;
     Eigen::VectorXd V_wake;
 private:
-    
+    Eigen::PartialPivLU<Eigen::MatrixXd> solver;
 };
 
 #endif
\ No newline at end of file
diff --git a/hspm/src/solver.cpp b/hspm/src/solver.cpp
index cbfe722..0eea992 100644
--- a/hspm/src/solver.cpp
+++ b/hspm/src/solver.cpp
@@ -28,19 +28,8 @@ void HSPM::solve()
     c += blVel;
 
     // Solve using Eigen's solver
-    Eigen::PartialPivLU<Eigen::MatrixXd> solver1;
-    //solver1.setTolerance(IT_SOLVER_TOLERANCE);
-    s1 = solver1.compute(A_n).solve(b);
-
-    Eigen::PartialPivLU<Eigen::MatrixXd> solver2;
-    //solver2.setTolerance(IT_SOLVER_TOLERANCE);
-    s2 = solver2.compute(A_n).solve(c);
-
-    // Check if the solver converged
-    //if (solver2.info() != Eigen::Success || solver1.info() != Eigen::Success) {
-    //    std::cout << "Iterative solver failed !" << std::endl;
-    //    exit(-1);
-    //}
+    s1 = solver.solve(b);
+    s2 = solver.solve(c);
 
     // q = s1*tau + s2
     // We need Kutta for tau
-- 
GitLab