From b562885a57e863ecddd9aa7f30bda99a77e3c5fc Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Sat, 14 Dec 2019 14:12:24 +0100
Subject: [PATCH] [PL] Use local_x in the assembly. Replace cpl_xs.

Drop coupled_xs in HT::assembleHeatTransportEq.
---
 .../ComponentTransportFEM.h                   | 30 ++++++++-----------
 ProcessLib/HT/StaggeredHTFEM-impl.h           | 24 ++++++---------
 ProcessLib/HT/StaggeredHTFEM.h                |  3 +-
 3 files changed, 23 insertions(+), 34 deletions(-)

diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
index 0c60bb9f159..8f461ad47a1 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
@@ -404,13 +404,13 @@ public:
     {
         if (process_id == hydraulic_process_id)
         {
-            assembleHydraulicEquation(t, dt, local_M_data, local_K_data,
-                                      local_b_data, coupled_xs);
+            assembleHydraulicEquation(t, dt, local_x, local_M_data,
+                                      local_K_data, local_b_data, coupled_xs);
         }
         else
         {
             // Go for assembling in an order of transport process id.
-            assembleComponentTransportEquation(t, dt, local_M_data,
+            assembleComponentTransportEquation(t, dt, local_x, local_M_data,
                                                local_K_data, local_b_data,
                                                coupled_xs, process_id);
         }
@@ -418,16 +418,15 @@ public:
 
     void assembleHydraulicEquation(double const t,
                                    double const dt,
+                                   Eigen::VectorXd const& local_x,
                                    std::vector<double>& local_M_data,
                                    std::vector<double>& local_K_data,
                                    std::vector<double>& local_b_data,
                                    LocalCoupledSolutions const& coupled_xs)
     {
-        auto local_p = Eigen::Map<const NodalVectorType>(
-            &coupled_xs.local_coupled_xs[pressure_index], pressure_size);
-        auto local_C = Eigen::Map<const NodalVectorType>(
-            &coupled_xs.local_coupled_xs[first_concentration_index],
-            concentration_size);
+        auto local_p = local_x.template segment<pressure_size>(pressure_index);
+        auto local_C = local_x.template segment<concentration_size>(
+            first_concentration_index);
         auto local_C0 = Eigen::Map<const NodalVectorType>(
             &coupled_xs.local_coupled_xs0[first_concentration_index],
             concentration_size);
@@ -530,18 +529,15 @@ public:
     }
 
     void assembleComponentTransportEquation(
-        double const t, double const dt, std::vector<double>& local_M_data,
-        std::vector<double>& local_K_data,
+        double const t, double const dt, Eigen::VectorXd const& local_x,
+        std::vector<double>& local_M_data, std::vector<double>& local_K_data,
         std::vector<double>& /*local_b_data*/,
         LocalCoupledSolutions const& coupled_xs, int const transport_process_id)
     {
-        auto local_C = Eigen::Map<const NodalVectorType>(
-            &coupled_xs.local_coupled_xs[first_concentration_index +
-                                         (transport_process_id - 1) *
-                                             concentration_size],
-            concentration_size);
-        auto local_p = Eigen::Map<const NodalVectorType>(
-            &coupled_xs.local_coupled_xs[pressure_index], pressure_size);
+        auto local_p = local_x.template segment<pressure_size>(pressure_index);
+        auto local_C = local_x.template segment<concentration_size>(
+            first_concentration_index +
+            (transport_process_id - 1) * concentration_size);
         auto local_p0 = Eigen::Map<const NodalVectorType>(
             &coupled_xs.local_coupled_xs0[pressure_index], pressure_size);
 
diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h
index 9e6c8e9f57d..06d557212e3 100644
--- a/ProcessLib/HT/StaggeredHTFEM-impl.h
+++ b/ProcessLib/HT/StaggeredHTFEM-impl.h
@@ -35,7 +35,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
     if (process_id == _heat_transport_process_id)
     {
         assembleHeatTransportEquation(t, local_x, local_M_data, local_K_data,
-                                      local_b_data, coupled_xs);
+                                      local_b_data);
         return;
     }
 
@@ -53,14 +53,12 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
                               std::vector<double>& local_b_data,
                               LocalCoupledSolutions const& coupled_xs)
 {
-    auto const local_p = Eigen::Map<
-        typename ShapeMatricesType::template VectorType<pressure_size> const>(
-        &coupled_xs.local_coupled_xs[pressure_index], pressure_size);
+    auto const local_p =
+        local_x.template segment<pressure_size>(pressure_index);
 
     auto const local_T1 =
-        Eigen::Map<typename ShapeMatricesType::template VectorType<
-            temperature_size> const>(
-            &coupled_xs.local_coupled_xs[temperature_index], temperature_size);
+        local_x.template segment<temperature_size>(temperature_index);
+
     auto const local_T0 =
         Eigen::Map<typename ShapeMatricesType::template VectorType<
             temperature_size> const>(
@@ -188,17 +186,13 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
                                   Eigen::VectorXd const& local_x,
                                   std::vector<double>& local_M_data,
                                   std::vector<double>& local_K_data,
-                                  std::vector<double>& /*local_b_data*/,
-                                  LocalCoupledSolutions const& coupled_xs)
+                                  std::vector<double>& /*local_b_data*/)
 {
-    auto const local_p = Eigen::Map<
-        typename ShapeMatricesType::template VectorType<pressure_size> const>(
-        &coupled_xs.local_coupled_xs[pressure_index], pressure_size);
+    auto const local_p =
+        local_x.template segment<pressure_size>(pressure_index);
 
     auto const local_T1 =
-        Eigen::Map<typename ShapeMatricesType::template VectorType<
-            temperature_size> const>(
-            &coupled_xs.local_coupled_xs[temperature_index], temperature_size);
+        local_x.template segment<temperature_size>(temperature_index);
 
     auto local_M = MathLib::createZeroedMatrix<LocalMatrixType>(
         local_M_data, temperature_size, temperature_size);
diff --git a/ProcessLib/HT/StaggeredHTFEM.h b/ProcessLib/HT/StaggeredHTFEM.h
index eb78700a2ab..7253962fd48 100644
--- a/ProcessLib/HT/StaggeredHTFEM.h
+++ b/ProcessLib/HT/StaggeredHTFEM.h
@@ -95,8 +95,7 @@ private:
                                        Eigen::VectorXd const& local_x,
                                        std::vector<double>& local_M_data,
                                        std::vector<double>& local_K_data,
-                                       std::vector<double>& local_b_data,
-                                       LocalCoupledSolutions const& coupled_xs);
+                                       std::vector<double>& local_b_data);
     const int _heat_transport_process_id;
     const int _hydraulic_process_id;
 };
-- 
GitLab