From cfaf2c9955bf8331855425c6de510b069a505d09 Mon Sep 17 00:00:00 2001
From: renchao_lu <renchao.lu@gmail.com>
Date: Tue, 22 Dec 2020 12:27:04 +0100
Subject: [PATCH] [PL] Pass x and x_prev to Process::setInitialConditions.

---
 ProcessLib/Process.cpp  | 14 ++++++++++++--
 ProcessLib/Process.h    |  7 +++++--
 ProcessLib/TimeLoop.cpp | 12 ++++--------
 3 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index 7ccc78408ed..e2c3f120ec9 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -108,9 +108,15 @@ void Process::initialize()
     initializeBoundaryConditions();
 }
 
-void Process::setInitialConditions(const int process_id, double const t,
-                                   GlobalVector& x)
+void Process::setInitialConditions(
+    std::vector<GlobalVector*>& process_solutions,
+    std::vector<GlobalVector*>& process_solutions_prev,
+    double const t,
+    int const process_id)
 {
+    auto& x = *process_solutions[process_id];
+    auto& x_prev = *process_solutions_prev[process_id];
+
     // getDOFTableOfProcess can be overloaded by the specific process.
     auto const& dof_table_of_process = getDOFTable(process_id);
 
@@ -163,6 +169,10 @@ void Process::setInitialConditions(const int process_id, double const t,
             }
         }
     }
+
+    MathLib::LinAlg::finalizeAssembly(x);
+    MathLib::LinAlg::copy(x, x_prev);  // pushState
+
     setInitialConditionsConcreteProcess(x, t, process_id);
 }
 
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 1b69f8c6f9c..6f0d5e29a63 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -82,8 +82,11 @@ public:
 
     void initialize();
 
-    void setInitialConditions(const int process_id, const double t,
-                              GlobalVector& x);
+    void setInitialConditions(
+        std::vector<GlobalVector*>& process_solutions,
+        std::vector<GlobalVector*>& process_solutions_prev,
+        double const t,
+        int const process_id);
 
     MathLib::MatrixSpecifications getMatrixSpecifications(
         const int process_id) const override;
diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp
index 37603ef2498..a354ccc4cbe 100644
--- a/ProcessLib/TimeLoop.cpp
+++ b/ProcessLib/TimeLoop.cpp
@@ -218,10 +218,7 @@ setInitialConditions(
 
     for (auto& process_data : per_process_data)
     {
-        auto& pcs = process_data->process;
         auto const process_id = process_data->process_id;
-        auto& time_disc = *process_data->time_disc;
-
         auto& ode_sys = *process_data->tdisc_ode_sys;
 
         // append a solution vector of suitable size
@@ -232,13 +229,12 @@ setInitialConditions(
             &NumLib::GlobalVectorProvider::provider.getVector(
                 ode_sys.getMatrixSpecifications(process_id)));
 
-        auto& x = *process_solutions[process_id];
-        auto& x_prev = *process_solutions_prev[process_id];
-        pcs.setInitialConditions(process_id, t0, x);
-        MathLib::LinAlg::finalizeAssembly(x);
+        auto& pcs = process_data->process;
+        pcs.setInitialConditions(process_solutions, process_solutions_prev, t0,
+                                 process_id);
 
+        auto& time_disc = *process_data->time_disc;
         time_disc.setInitialState(t0);     // push IC
-        MathLib::LinAlg::copy(x, x_prev);  // pushState
     }
 
     return {process_solutions, process_solutions_prev};
-- 
GitLab