From aa7ecc9d1c2c8ed8f65bc16fdba7d163726438f1 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Thu, 4 Mar 2021 14:24:40 +0100 Subject: [PATCH] [NL/ODESolver/Newton] 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 ba09c983b15..c17197fbb51 100644 --- a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp +++ b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp @@ -84,9 +84,11 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, auto const dxdot_dx = _time_disc.getNewXWeight(); 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 53f83ef522d..a2b9ffe1f72 100644 --- a/NumLib/ODESolver/TimeDiscretizedODESystem.h +++ b/NumLib/ODESolver/TimeDiscretizedODESystem.h @@ -148,6 +148,7 @@ private: //! ID of the vector storing xdot in intermediate computations. mutable std::size_t _xdot_id = 0u; + mutable std::vector<std::size_t> _xdot_ids; }; /*! Time discretized first order implicit quasi-linear ODE; -- GitLab