From 74c93ecd92c6db9e28b7311086befd76a7958012 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Thu, 4 Mar 2021 14:24:05 +0100
Subject: [PATCH] [NL/ODESolver/Picard] Store ids to reuse the xdot vectors.

---
 NumLib/ODESolver/TimeDiscretizedODESystem.cpp | 4 +++-
 NumLib/ODESolver/TimeDiscretizedODESystem.h   | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp
index 52c135787d6..ba09c983b15 100644
--- a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp
+++ b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp
@@ -220,9 +220,11 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear,
     auto const dt = _time_disc.getCurrentTimeIncrement();
     auto const& x_curr = *x_new_timestep[process_id];
     std::vector<GlobalVector*> xdot(x_new_timestep.size());
+    _xdot_ids.resize(x_new_timestep.size());
+
     for (std::size_t i = 0; i < xdot.size(); i++)
     {
-        xdot[i] = &NumLib::GlobalVectorProvider::provider.getVector();
+        xdot[i] = &NumLib::GlobalVectorProvider::provider.getVector(_xdot_ids[i]);
         _time_disc.getXdot(*x_new_timestep[i], *x_prev[i], *xdot[i]);
     }
 
diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.h b/NumLib/ODESolver/TimeDiscretizedODESystem.h
index 0264082d0e1..53f83ef522d 100644
--- a/NumLib/ODESolver/TimeDiscretizedODESystem.h
+++ b/NumLib/ODESolver/TimeDiscretizedODESystem.h
@@ -239,6 +239,7 @@ private:
     std::size_t _M_id = 0u;  //!< ID of the \c _M matrix.
     std::size_t _K_id = 0u;  //!< ID of the \c _K matrix.
     std::size_t _b_id = 0u;  //!< ID of the \c _b vector.
+    mutable std::vector<std::size_t> _xdot_ids;
 };
 
 //! @}
-- 
GitLab