From 08df86dc9736cee91892246716a070140263f19a Mon Sep 17 00:00:00 2001
From: Dominik Kern <dominik.kern1@ifgt.tu-freiberg.de>
Date: Fri, 23 Oct 2020 16:13:02 +0200
Subject: [PATCH] [PL] Pass process_id to setICs(), postNLS().

---
 .../HydroMechanics/HydroMechanicsFEM-impl.h    |  3 ++-
 ProcessLib/HydroMechanics/HydroMechanicsFEM.h  |  3 ++-
 .../HydroMechanics/HydroMechanicsProcess.cpp   |  2 +-
 ProcessLib/LocalAssemblerInterface.cpp         |  8 ++++----
 ProcessLib/LocalAssemblerInterface.h           | 18 +++++++++++-------
 ProcessLib/Process.cpp                         |  2 +-
 ProcessLib/Process.h                           |  3 ++-
 .../RichardsMechanicsFEM-impl.h                | 15 +++++++++------
 .../RichardsMechanics/RichardsMechanicsFEM.h   |  7 +++++--
 .../RichardsMechanicsProcess.cpp               | 12 ++++++++----
 .../RichardsMechanicsProcess.h                 |  5 +++--
 .../ThermoHydroMechanicsFEM-impl.h             |  3 ++-
 .../ThermoHydroMechanicsFEM.h                  |  3 ++-
 .../ThermoHydroMechanicsProcess.cpp            |  3 ++-
 .../ThermoMechanicalPhaseFieldProcess.cpp      |  2 +-
 15 files changed, 55 insertions(+), 34 deletions(-)

diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
index cbe46a99d58..599adeb2ea1 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
@@ -707,7 +707,8 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
     postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                 std::vector<double> const& /*local_xdot*/,
                                 double const t, double const dt,
-                                bool const use_monolithic_scheme)
+                                bool const use_monolithic_scheme,
+                                int const /*process_id*/)
 {
     const int displacement_offset =
         use_monolithic_scheme ? displacement_index : 0;
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
index 97b6be8a462..8c96155dcc3 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
@@ -198,7 +198,8 @@ public:
     void postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                      std::vector<double> const& local_xdot,
                                      double const t, double const dt,
-                                     bool const use_monolithic_scheme) override;
+                                     bool const use_monolithic_scheme,
+                                     int const process_id) override;
 
     Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix(
         const unsigned integration_point) const override
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index c839a59e380..30cd5821f6b 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -516,7 +516,7 @@ void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess(
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::postNonLinearSolver, _local_assemblers,
         pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt,
-        _use_monolithic_scheme);
+        _use_monolithic_scheme, process_id);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp
index 8823795742e..902c26fac05 100644
--- a/ProcessLib/LocalAssemblerInterface.cpp
+++ b/ProcessLib/LocalAssemblerInterface.cpp
@@ -83,12 +83,12 @@ void LocalAssemblerInterface::computeSecondaryVariable(
 void LocalAssemblerInterface::setInitialConditions(
     std::size_t const mesh_item_id,
     NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x,
-    double const t)
+    double const t, bool const use_monolithic_scheme, int const process_id)
 {
     auto const indices = NumLib::getIndices(mesh_item_id, dof_table);
     auto const local_x = x.get(indices);
 
-    setInitialConditionsConcrete(local_x, t);
+    setInitialConditionsConcrete(local_x, t, use_monolithic_scheme, process_id);
 }
 
 void LocalAssemblerInterface::initialize(
@@ -124,14 +124,14 @@ void LocalAssemblerInterface::postNonLinearSolver(
     std::size_t const mesh_item_id,
     NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x,
     GlobalVector const& xdot, double const t, double const dt,
-    bool const use_monolithic_scheme)
+    bool const use_monolithic_scheme, int const process_id)
 {
     auto const indices = NumLib::getIndices(mesh_item_id, dof_table);
     auto const local_x = x.get(indices);
     auto const local_xdot = xdot.get(indices);
 
     postNonLinearSolverConcrete(local_x, local_xdot, t, dt,
-                                use_monolithic_scheme);
+                                use_monolithic_scheme, process_id);
 }
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h
index b8506c38552..8148654e1c6 100644
--- a/ProcessLib/LocalAssemblerInterface.h
+++ b/ProcessLib/LocalAssemblerInterface.h
@@ -35,10 +35,11 @@ class LocalAssemblerInterface
 public:
     virtual ~LocalAssemblerInterface() = default;
 
-    virtual void setInitialConditions(
-        std::size_t const mesh_item_id,
-        NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x,
-        double const t);
+    void setInitialConditions(std::size_t const mesh_item_id,
+                              NumLib::LocalToGlobalIndexMap const& dof_table,
+                              GlobalVector const& x, double const t,
+                              bool const use_monolithic_scheme,
+                              int const process_id);
 
     virtual void initialize(std::size_t const mesh_item_id,
                             NumLib::LocalToGlobalIndexMap const& dof_table);
@@ -97,7 +98,8 @@ public:
                              NumLib::LocalToGlobalIndexMap const& dof_table,
                              GlobalVector const& x, GlobalVector const& xdot,
                              double const t, double const dt,
-                             bool const use_monolithic_scheme);
+                             bool const use_monolithic_scheme,
+                             int const process_id);
 
     virtual std::vector<double> interpolateNodalValuesToIntegrationPoints(
         std::vector<double> const& /*local_x*/)
@@ -127,7 +129,8 @@ public:
 
 private:
     virtual void setInitialConditionsConcrete(
-        std::vector<double> const& /*local_x*/, double const /*t*/)
+        std::vector<double> const& /*local_x*/, double const /*t*/,
+        bool const /*use_monolithic_scheme*/, int const /*process_id*/)
     {
     }
 
@@ -146,7 +149,8 @@ private:
     virtual void postNonLinearSolverConcrete(
         std::vector<double> const& /*local_x*/,
         std::vector<double> const& /*local_xdot*/, double const /*t*/,
-        double const /*dt*/, bool const /*use_monolithic_scheme*/)
+        double const /*dt*/, bool const /*use_monolithic_scheme*/,
+        int const /*process_id*/)
     {
     }
 
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index 37d98ac0314..f1fa776dfe3 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -163,7 +163,7 @@ void Process::setInitialConditions(const int process_id, double const t,
             }
         }
     }
-    setInitialConditionsConcreteProcess(x, t);
+    setInitialConditionsConcreteProcess(x, t, process_id);
 }
 
 MathLib::MatrixSpecifications Process::getMatrixSpecifications(
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index b0aa6267153..6e8e299bbf8 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -207,7 +207,8 @@ private:
     virtual void initializeBoundaryConditions();
 
     virtual void setInitialConditionsConcreteProcess(GlobalVector const& /*x*/,
-                                                     double const /*t*/)
+                                                     double const /*t*/,
+                                                     int const /*process_id*/)
     {
     }
 
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
index 2fbd9078e81..3bbc0390e82 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
@@ -181,11 +181,13 @@ std::size_t RichardsMechanicsLocalAssembler<
 
 template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure,
           typename IntegrationMethod, int DisplacementDim>
-void RichardsMechanicsLocalAssembler<
-    ShapeFunctionDisplacement, ShapeFunctionPressure, IntegrationMethod,
-    DisplacementDim>::setInitialConditionsConcrete(std::vector<double> const&
-                                                       local_x,
-                                                   double const t)
+void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
+                                     ShapeFunctionPressure, IntegrationMethod,
+                                     DisplacementDim>::
+    setInitialConditionsConcrete(std::vector<double> const& local_x,
+                                 double const t,
+                                 bool const /*use_monolithic_scheme*/,
+                                 int const /*process_id*/)
 {
     assert(local_x.size() == pressure_size + displacement_size);
 
@@ -1286,7 +1288,8 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
     postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                 std::vector<double> const& /*local_xdot*/,
                                 double const t, double const dt,
-                                bool const use_monolithic_scheme)
+                                bool const use_monolithic_scheme,
+                                int const /*process_id*/)
 {
     const int displacement_offset =
         use_monolithic_scheme ? displacement_index : 0;
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
index 51372b34145..9aba32ed18c 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
@@ -88,7 +88,9 @@ public:
         int const integration_order) override;
 
     void setInitialConditionsConcrete(std::vector<double> const& local_x,
-                                      double const t) override;
+                                      double const t,
+                                      bool const use_monolithic_scheme,
+                                      int const process_id) override;
 
     void assemble(double const t, double const dt,
                   std::vector<double> const& local_x,
@@ -165,7 +167,8 @@ public:
     void postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                      std::vector<double> const& local_xdot,
                                      double const t, double const dt,
-                                     bool const use_monolithic_scheme) override;
+                                     bool const use_monolithic_scheme,
+                                     int const process_id) override;
 
     Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix(
         const unsigned integration_point) const override
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
index 6a0003476dd..cdf6041c021 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
@@ -434,13 +434,17 @@ void RichardsMechanicsProcess<DisplacementDim>::initializeBoundaryConditions()
 template <int DisplacementDim>
 void RichardsMechanicsProcess<
     DisplacementDim>::setInitialConditionsConcreteProcess(GlobalVector const& x,
-                                                          double const t)
+                                                          double const t,
+                                                          int const process_id)
 {
     DBUG("SetInitialConditions RichardsMechanicsProcess.");
 
-    GlobalExecutor::executeMemberOnDereferenced(
+    ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
+
+    GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::setInitialConditions, _local_assemblers,
-        *_local_to_global_index_map, x, t);
+        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
+        _use_monolithic_scheme, process_id);
 }
 
 template <int DisplacementDim>
@@ -570,7 +574,7 @@ void RichardsMechanicsProcess<DisplacementDim>::
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::postNonLinearSolver, _local_assemblers,
         pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt,
-        _use_monolithic_scheme);
+        _use_monolithic_scheme, process_id);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
index f69e2b4b10e..cd00a20502b 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
@@ -73,8 +73,9 @@ private:
 
     void initializeBoundaryConditions() override;
 
-    void setInitialConditionsConcreteProcess(
-        GlobalVector const& x, double const t) override;
+    void setInitialConditionsConcreteProcess(GlobalVector const& x,
+                                             double const t,
+                                             int const process_id) override;
 
     void assembleConcreteProcess(const double t, double const dt,
                                  std::vector<GlobalVector*> const& x,
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
index 2afd830502f..63d37731d73 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
@@ -564,7 +564,8 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
     postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                 std::vector<double> const& /*local_xdot*/,
                                 double const t, double const dt,
-                                bool const use_monolithic_scheme)
+                                bool const use_monolithic_scheme,
+                                int const /*process_id*/)
 {
     const int displacement_offset =
         use_monolithic_scheme ? displacement_index : 0;
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
index 06aeb75f36f..ffc7be2d013 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
@@ -129,7 +129,8 @@ public:
     void postNonLinearSolverConcrete(std::vector<double> const& local_x,
                                      std::vector<double> const& local_xdot,
                                      double const t, double const dt,
-                                     bool const use_monolithic_scheme) override;
+                                     bool const use_monolithic_scheme,
+                                     int const process_id) override;
 
     Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix(
         const unsigned integration_point) const override
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
index 78264e80a53..36b187f69db 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
@@ -371,7 +371,8 @@ void ThermoHydroMechanicsProcess<DisplacementDim>::
     // Calculate strain, stress or other internal variables of mechanics.
     GlobalExecutor::executeMemberOnDereferenced(
         &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers,
-        getDOFTable(process_id), x, xdot, t, dt, _use_monolithic_scheme);
+        getDOFTable(process_id), x, xdot, t, dt, _use_monolithic_scheme,
+        process_id);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
index 4a047507ff9..be8b63c9ecb 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
@@ -315,7 +315,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers,
         pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt,
-        use_monolithic_scheme);
+        use_monolithic_scheme, process_id);
 }
 
 template class ThermoMechanicalPhaseFieldProcess<2>;
-- 
GitLab