From 3c761b7e24e2275cdd4192464bea30bda3aaa7de Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Wed, 17 Mar 2021 16:09:03 +0100
Subject: [PATCH] [PL/TimeLoop] Use the vector of ids of xdot GlobalVector's.

---
 ProcessLib/TimeLoop.cpp | 12 ++++++++++--
 ProcessLib/TimeLoop.h   |  4 ----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp
index eab386ff538..e6388e06607 100644
--- a/ProcessLib/TimeLoop.cpp
+++ b/ProcessLib/TimeLoop.cpp
@@ -705,12 +705,17 @@ NumLib::NonlinearSolverStatus TimeLoop::solveUncoupledEquationSystems(
     const double t, const double dt, const std::size_t timestep_id)
 {
     NumLib::NonlinearSolverStatus nonlinear_solver_status;
+
+    _xdot_vector_ids.resize(_per_process_data.size());
+    std::size_t cnt = 0;
+
     for (auto& process_data : _per_process_data)
     {
         auto const process_id = process_data->process_id;
         nonlinear_solver_status = solveMonolithicProcess(
             t, dt, timestep_id, *process_data, _process_solutions,
-            _process_solutions_prev, *_output, _xdot_id);
+            _process_solutions_prev, *_output, _xdot_vector_ids[cnt]);
+        cnt++;
 
         process_data->nonlinear_solver_status = nonlinear_solver_status;
         if (!nonlinear_solver_status.error_norms_met)
@@ -765,6 +770,8 @@ TimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
         // TODO(wenqing): use process name
         coupling_iteration_converged = true;
         int const last_process_id = _per_process_data.size() - 1;
+        _xdot_vector_ids.resize(_per_process_data.size());
+        std::size_t cnt = 0;
         for (auto& process_data : _per_process_data)
         {
             auto const process_id = process_data->process_id;
@@ -783,7 +790,8 @@ TimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
 
             nonlinear_solver_status = solveOneTimeStepOneProcess(
                 _process_solutions, _process_solutions_prev, timestep_id, t, dt,
-                *process_data, *_output, _xdot_id);
+                *process_data, *_output, _xdot_vector_ids[cnt]);
+            cnt++;
             process_data->nonlinear_solver_status = nonlinear_solver_status;
 
             INFO(
diff --git a/ProcessLib/TimeLoop.h b/ProcessLib/TimeLoop.h
index 0992c4c1a8b..5431b5cd956 100644
--- a/ProcessLib/TimeLoop.h
+++ b/ProcessLib/TimeLoop.h
@@ -131,9 +131,5 @@ private:
     /// provider for reuse, needed in postTimestepForAllProcesses
     /// the length of the vector is the size of _per_process_data
     std::vector<std::size_t> _xdot_vector_ids;
-
-    // store the id of the global xdot vector in the global vector provider for
-    // reuse; needed in solveOneTimeStepOneProcess
-    std::size_t _xdot_id = 0;
 };
 }  // namespace ProcessLib
-- 
GitLab