From e9fa62aafcd884caa4883e685e9807a211f41eeb Mon Sep 17 00:00:00 2001
From: Wenqing Wang <wenqing.wang@ufz.de>
Date: Thu, 29 Feb 2024 18:12:25 +0100
Subject: [PATCH] Changed the type of the first argument of
 setInitialConditionsConcrete

From std::vectory<double> to Eigen::VectorXd
---
 .../HydroMechanics/HydroMechanicsFEM-impl.h      | 16 +++-------------
 ProcessLib/HydroMechanics/HydroMechanicsFEM.h    |  2 +-
 ProcessLib/LocalAssemblerInterface.cpp           |  4 +++-
 ProcessLib/LocalAssemblerInterface.h             | 11 +++++------
 .../RichardsMechanicsFEM-impl.h                  |  7 ++-----
 .../RichardsMechanics/RichardsMechanicsFEM.h     |  2 +-
 ProcessLib/TH2M/TH2MFEM-impl.h                   |  6 ++----
 ProcessLib/TH2M/TH2MFEM.h                        |  2 +-
 .../ThermoHydroMechanicsFEM-impl.h               |  8 +++-----
 .../ThermoHydroMechanicsFEM.h                    |  2 +-
 .../ThermoRichardsFlowFEM-impl.h                 |  6 ++----
 .../ThermoRichardsFlow/ThermoRichardsFlowFEM.h   |  2 +-
 .../ThermoRichardsMechanicsFEM-impl.h            | 12 ++++--------
 .../ThermoRichardsMechanicsFEM.h                 |  2 +-
 14 files changed, 30 insertions(+), 52 deletions(-)

diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
index 25ef4318efd..d06402f925d 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
@@ -815,7 +815,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure,
           int DisplacementDim>
 void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
                                   ShapeFunctionPressure, DisplacementDim>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const use_monolithic_scheme,
                                  int const process_id)
@@ -835,20 +835,10 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
         auto const& medium =
             _process_data.media_map.getMedium(_element.getID());
 
-        int const displacement_offset =
-            use_monolithic_scheme ? displacement_index : 0;
-
+        auto const p = local_x.template segment<pressure_size>(pressure_index);
         auto const u =
-            Eigen::Map<typename ShapeMatricesTypeDisplacement::
-                           template VectorType<displacement_size> const>(
-                local_x.data() + displacement_offset, displacement_size);
-
-        int const pressure_offset = use_monolithic_scheme ? pressure_index : 0;
+            local_x.template segment<displacement_size>(displacement_index);
 
-        auto const p =
-            Eigen::Map<typename ShapeMatricesTypePressure::template VectorType<
-                pressure_size> const>(local_x.data() + pressure_offset,
-                                      pressure_size);
         auto const& identity2 = Invariants::identity2;
         const double dt = 0.0;
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
index c4920e366d1..047d144a308 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
@@ -276,7 +276,7 @@ public:
                                      double const t, double const dt,
                                      int const process_id) override;
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const use_monolithic_scheme,
                                       int const process_id) override;
diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp
index 83a8a2935cb..142e2ae6256 100644
--- a/ProcessLib/LocalAssemblerInterface.cpp
+++ b/ProcessLib/LocalAssemblerInterface.cpp
@@ -105,8 +105,10 @@ void LocalAssemblerInterface::setInitialConditions(
 {
     auto const indices = NumLib::getIndices(mesh_item_id, dof_table);
     auto const local_x = x.get(indices);
+    auto const local_x_eigen_map = MathLib::toVector(local_x);
 
-    setInitialConditionsConcrete(local_x, t, use_monolithic_scheme, process_id);
+    setInitialConditionsConcrete(local_x_eigen_map, t, use_monolithic_scheme,
+                                 process_id);
 }
 
 void LocalAssemblerInterface::initialize(
diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h
index 0cd1b913123..36c7621e96d 100644
--- a/ProcessLib/LocalAssemblerInterface.h
+++ b/ProcessLib/LocalAssemblerInterface.h
@@ -33,11 +33,10 @@ class LocalAssemblerInterface
 public:
     virtual ~LocalAssemblerInterface() = default;
 
-    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 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);
@@ -121,7 +120,7 @@ public:
 
 private:
     virtual void setInitialConditionsConcrete(
-        std::vector<double> const& /*local_x*/, double const /*t*/,
+        Eigen::VectorXd const& /*local_x*/, double const /*t*/,
         bool const /*use_monolithic_scheme*/, int const /*process_id*/)
     {
     }
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
index 57f6633df6b..fd36d170b1d 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
@@ -278,17 +278,14 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure,
           int DisplacementDim>
 void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
                                      ShapeFunctionPressure, DisplacementDim>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const /*use_monolithic_scheme*/,
                                  int const /*process_id*/)
 {
     assert(local_x.size() == pressure_size + displacement_size);
 
-    auto p_L =
-        Eigen::Map<typename ShapeMatricesTypePressure::template VectorType<
-            pressure_size> const>(local_x.data() + pressure_index,
-                                  pressure_size);
+    auto const p_L = local_x.template segment<pressure_size>(pressure_index);
 
     constexpr double dt = std::numeric_limits<double>::quiet_NaN();
     auto const& medium = _process_data.media_map.getMedium(_element.getID());
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
index 4befcbabdf9..91a46c88392 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
@@ -94,7 +94,7 @@ public:
         double const* values,
         int const integration_order) override;
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const use_monolithic_scheme,
                                       int const process_id) override;
diff --git a/ProcessLib/TH2M/TH2MFEM-impl.h b/ProcessLib/TH2M/TH2MFEM-impl.h
index aaed4f0659b..86153b84407 100644
--- a/ProcessLib/TH2M/TH2MFEM-impl.h
+++ b/ProcessLib/TH2M/TH2MFEM-impl.h
@@ -852,7 +852,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure,
           int DisplacementDim>
 void TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure,
                         DisplacementDim>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x_data,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const /*use_monolithic_scheme*/,
                                  int const /*process_id*/)
@@ -861,10 +861,8 @@ void TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure,
         gas_pressure_size + capillary_pressure_size + temperature_size +
         displacement_size;
 
-    assert(local_x_data.size() == matrix_size);
+    assert(local_x.size() == matrix_size);
 
-    auto const local_x = Eigen::Map<Eigen::VectorXd const>(local_x_data.data(),
-                                                           local_x_data.size());
     auto const capillary_pressure =
         local_x.template segment<capillary_pressure_size>(
             capillary_pressure_index);
diff --git a/ProcessLib/TH2M/TH2MFEM.h b/ProcessLib/TH2M/TH2MFEM.h
index 89ce5051405..05f1d58611a 100644
--- a/ProcessLib/TH2M/TH2MFEM.h
+++ b/ProcessLib/TH2M/TH2MFEM.h
@@ -95,7 +95,7 @@ private:
         double const* values,
         int const integration_order) override;
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x_data,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const /*use_monolithic_scheme*/,
                                       int const /*process_id*/) override;
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
index af2bb66c917..a48c330da71 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
@@ -176,7 +176,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure,
           int DisplacementDim>
 void ThermoHydroMechanicsLocalAssembler<
     ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const /*use_monolithic_scheme*/,
                                  int const /*process_id*/)
@@ -189,10 +189,8 @@ void ThermoHydroMechanicsLocalAssembler<
     // TODO: For staggered scheme, overload
     // LocalAssemblerInterface::setInitialConditions to enable local_x contains
     // the primary variables from all coupled processes.
-    auto const p =
-        Eigen::Map<typename ShapeMatricesTypePressure::template VectorType<
-            pressure_size> const>(local_x.data() + pressure_index,
-                                  pressure_size);
+    auto const p = local_x.template segment<pressure_size>(pressure_index);
+
     double const dt = 0.0;
 
     MPL::VariableArray vars;
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
index d82f3789201..aafb9fd37c8 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
@@ -151,7 +151,7 @@ public:
         }
     }
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const use_monolithic_scheme,
                                       int const process_id) override;
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
index 0cfedaccb57..eceb1e2bb03 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
@@ -109,16 +109,14 @@ std::size_t ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
 
 template <typename ShapeFunction, int GlobalDim>
 void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const /*use_monolithic_scheme*/,
                                  int const /*process_id*/)
 {
     assert(local_x.size() == temperature_size + pressure_size);
 
-    auto p_L = Eigen::Map<
-        typename ShapeMatricesType::template VectorType<pressure_size> const>(
-        local_x.data() + pressure_index, pressure_size);
+    auto const p_L = local_x.template segment<pressure_size>(pressure_index);
 
     auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     MPL::VariableArray variables;
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
index 2da0c458e10..b50029b06eb 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
@@ -63,7 +63,7 @@ public:
         double const* values,
         int const integration_order) override;
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const /*use_monolithic_scheme*/,
                                       int const /*process_id*/) override;
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
index 1cf8ab51c7c..b71cf10832a 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
@@ -86,7 +86,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunction,
 void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
                                            ShapeFunction, DisplacementDim,
                                            ConstitutiveTraits>::
-    setInitialConditionsConcrete(std::vector<double> const& local_x,
+    setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                  double const t,
                                  bool const /*use_monolithic_scheme*/,
                                  int const /*process_id*/)
@@ -94,13 +94,9 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
     assert(local_x.size() ==
            temperature_size + pressure_size + displacement_size);
 
-    auto const p_L = Eigen::Map<
-        typename ShapeMatricesType::template VectorType<pressure_size> const>(
-        local_x.data() + pressure_index, pressure_size);
-
-    auto const T = Eigen::Map<typename ShapeMatricesType::template VectorType<
-        temperature_size> const>(local_x.data() + temperature_index,
-                                 temperature_size);
+    auto const p_L = local_x.template segment<pressure_size>(pressure_index);
+    auto const T =
+        local_x.template segment<temperature_size>(temperature_index);
 
     constexpr double dt = std::numeric_limits<double>::quiet_NaN();
     auto const& medium =
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
index 5cf6556c248..4fe54313a35 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
@@ -87,7 +87,7 @@ public:
         ThermoRichardsMechanicsProcessData<DisplacementDim, ConstitutiveTraits>&
             process_data);
 
-    void setInitialConditionsConcrete(std::vector<double> const& local_x,
+    void setInitialConditionsConcrete(Eigen::VectorXd const& local_x,
                                       double const t,
                                       bool const use_monolithic_scheme,
                                       int const process_id) override;
-- 
GitLab