From c34b8b0a6825aa6209f4212983380e768514d2bd Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Tue, 12 Sep 2023 20:51:47 +0200
Subject: [PATCH] [PL] Reduce constructor's argument list

Both time steps are created from the timestepper,
so this construction is moved inside the ProcessData.

This resolves the warning about the time step not being
passed by reference, are removes the unnecessary std::move
in the caller for the time step.
---
 ProcessLib/CreateProcessData.cpp | 14 ++++----------
 ProcessLib/ProcessData.h         |  9 ++++-----
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/ProcessLib/CreateProcessData.cpp b/ProcessLib/CreateProcessData.cpp
index cde92a31db7..921784342fa 100644
--- a/ProcessLib/CreateProcessData.cpp
+++ b/ProcessLib/CreateProcessData.cpp
@@ -30,9 +30,6 @@ static std::unique_ptr<ProcessData> makeProcessData(
 {
     using Tag = NumLib::NonlinearSolverTag;
 
-    NumLib::TimeStep previous_timestep(timestepper->begin());
-    NumLib::TimeStep current_timestep(previous_timestep);
-
     if (auto* nonlinear_solver_picard =
             dynamic_cast<NumLib::NonlinearSolver<Tag::Picard>*>(
                 &nonlinear_solver))
@@ -40,9 +37,8 @@ static std::unique_ptr<ProcessData> makeProcessData(
         nonlinear_solver_picard->compensateNonEquilibriumInitialResiduum(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
-            previous_timestep, current_timestep, std::move(timestepper),
-            Tag::Picard, *nonlinear_solver_picard, std::move(conv_crit),
-            std::move(time_disc), process_id, process);
+            std::move(timestepper), Tag::Picard, *nonlinear_solver_picard,
+            std::move(conv_crit), std::move(time_disc), process_id, process);
     }
     if (auto* nonlinear_solver_newton =
             dynamic_cast<NumLib::NonlinearSolver<Tag::Newton>*>(
@@ -51,7 +47,6 @@ static std::unique_ptr<ProcessData> makeProcessData(
         nonlinear_solver_newton->compensateNonEquilibriumInitialResiduum(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
-            std::move(previous_timestep), std::move(current_timestep),
             std::move(timestepper), Tag::Newton, *nonlinear_solver_newton,
             std::move(conv_crit), std::move(time_disc), process_id, process);
     }
@@ -60,9 +55,8 @@ static std::unique_ptr<ProcessData> makeProcessData(
             dynamic_cast<NumLib::PETScNonlinearSolver*>(&nonlinear_solver))
     {
         return std::make_unique<ProcessData>(
-            previous_timestep, current_timestep, std::move(timestepper),
-            Tag::Newton, *nonlinear_solver_petsc, std::move(conv_crit),
-            std::move(time_disc), process_id, process);
+            std::move(timestepper), Tag::Newton, *nonlinear_solver_petsc,
+            std::move(conv_crit), std::move(time_disc), process_id, process);
     }
 #endif  // USE_PETSC
 
diff --git a/ProcessLib/ProcessData.h b/ProcessLib/ProcessData.h
index f88d79228a8..876c0be9233 100644
--- a/ProcessLib/ProcessData.h
+++ b/ProcessLib/ProcessData.h
@@ -23,16 +23,15 @@ namespace ProcessLib
 struct ProcessData
 {
     ProcessData(
-        NumLib::TimeStep timestep_previous_, NumLib::TimeStep timestep_current_,
         std::unique_ptr<NumLib::TimeStepAlgorithm>&& timestep_algorithm_,
         NumLib::NonlinearSolverTag const nonlinear_solver_tag_,
         NumLib::NonlinearSolverBase& nonlinear_solver_,
         std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit_,
         std::unique_ptr<NumLib::TimeDiscretization>&& time_disc_,
         int const process_id_, Process& process_)
-        : timestep_previous(timestep_previous_),
-          timestep_current(timestep_current_),
-          timestep_algorithm(std::move(timestep_algorithm_)),
+        : timestep_algorithm(std::move(timestep_algorithm_)),
+          timestep_previous(timestep_algorithm->begin()),
+          timestep_current(timestep_previous),
           nonlinear_solver_tag(nonlinear_solver_tag_),
           nonlinear_solver(nonlinear_solver_),
           nonlinear_solver_status{true, 0},
@@ -47,9 +46,9 @@ struct ProcessData
     ProcessData& operator=(ProcessData const& pd) = delete;
     ProcessData& operator=(ProcessData&& pd) = delete;
 
+    std::unique_ptr<NumLib::TimeStepAlgorithm> timestep_algorithm;
     NumLib::TimeStep timestep_previous;
     NumLib::TimeStep timestep_current;
-    std::unique_ptr<NumLib::TimeStepAlgorithm> timestep_algorithm;
 
     //! Tag containing the missing type information necessary to cast the
     //! other members of this struct to their concrety types.
-- 
GitLab