From 17c2eaecd7bd969a9d6ef90e437608676ee0b6d0 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Fri, 17 May 2024 11:14:25 +0200
Subject: [PATCH] [PL/TRM] Use StrongType for Darcy velocity

---
 .../ConstitutiveCommon/DarcyLaw.cpp            | 10 ++++------
 .../ConstitutiveCommon/DarcyLaw.h              | 18 +++++++-----------
 .../TRMHeatStorageAndFlux.cpp                  |  4 ++--
 3 files changed, 13 insertions(+), 19 deletions(-)

diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
index a56725c47a4..5bc1527620d 100644
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
@@ -10,8 +10,6 @@
 
 #include "DarcyLaw.h"
 
-#include "MaterialLib/MPL/Utils/FormEigenTensor.h"
-
 namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
@@ -23,10 +21,10 @@ void DarcyLawModel<DisplacementDim>::eval(
     ThermoOsmosisData<DisplacementDim> const& th_osmosis_data,
     DarcyLawData<DisplacementDim>& out) const
 {
-    out.v_darcy = perm_data.Ki / mu_L_data.viscosity *
-                      (perm_data.k_rel *
-                       (p_cap_data.grad_p_cap + rho_L_data.rho_LR * b_)) +
-                  th_osmosis_data.seepage_velocity_contribution;
+    *out = perm_data.Ki / mu_L_data.viscosity *
+               (perm_data.k_rel *
+                (p_cap_data.grad_p_cap + rho_L_data.rho_LR * b_)) +
+           th_osmosis_data.seepage_velocity_contribution;
 }
 
 template struct DarcyLawModel<2>;
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
index b5c09bede41..faab1905057 100644
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
@@ -10,6 +10,7 @@
 
 #pragma once
 
+#include "BaseLib/StrongType.h"
 #include "LiquidDensity.h"
 #include "LiquidViscosity.h"
 #include "PermeabilityData.h"
@@ -19,18 +20,13 @@
 namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
-struct DarcyLawData
-{
-    Eigen::Vector<double, DisplacementDim> v_darcy;
-
-    static auto reflect()
-    {
-        using Self = DarcyLawData<DisplacementDim>;
+using DarcyLawData = BaseLib::StrongType<Eigen::Vector<double, DisplacementDim>,
+                                         struct DarcyLawDataTag>;
 
-        return ProcessLib::Reflection::reflectWithName("velocity",
-                                                       &Self::v_darcy);
-    }
-};
+constexpr std::string_view ioName(struct DarcyLawDataTag*)
+{
+    return "velocity";
+}
 
 template <int DisplacementDim>
 struct DarcyLawModel
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
index 0f81bea6959..c94735a61dd 100644
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
@@ -63,7 +63,7 @@ void TRMHeatStorageAndFluxModel<DisplacementDim>::eval(
 
     // Unit is J / m^2 / s / K. It's not a heat flux, but related.
     out.advective_heat_flux_contribution_to_K_liquid =
-        volumetric_heat_capacity_liquid * darcy_data.v_darcy;
+        volumetric_heat_capacity_liquid * darcy_data();
 
     //
     // temperature equation, pressure part
@@ -72,7 +72,7 @@ void TRMHeatStorageAndFluxModel<DisplacementDim>::eval(
                        mu_L_data.viscosity *
                        (perm.Ki.transpose() * T_data.grad_T);
     out.K_Tp_X_NTN = -volumetric_heat_capacity_liquid *
-                     darcy_data.v_darcy.dot(T_data.grad_T) / perm.k_rel *
+                     darcy_data().dot(T_data.grad_T) / perm.k_rel *
                      perm.dk_rel_dS_L * dS_L_data.dS_L_dp_cap;
 }
 
-- 
GitLab