From b430d1e175068e0a186f31ace0bbc732fd6da883 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Buchwald?= <joerg.buchwald@ufz.de>
Date: Thu, 22 Apr 2021 19:13:34 +0200
Subject: [PATCH] add Saturation to EffectiveThermalConductivityPorosityMixing
 property

---
 ...fectiveThermalConductivityPorosityMixing.cpp | 13 +++++++++----
 ...fectiveThermalConductivityPorosityMixing.cpp | 17 ++++-------------
 2 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/MaterialLib/MPL/Properties/EffectiveThermalConductivityPorosityMixing.cpp b/MaterialLib/MPL/Properties/EffectiveThermalConductivityPorosityMixing.cpp
index f057bd4cfd3..55002fe42b5 100644
--- a/MaterialLib/MPL/Properties/EffectiveThermalConductivityPorosityMixing.cpp
+++ b/MaterialLib/MPL/Properties/EffectiveThermalConductivityPorosityMixing.cpp
@@ -58,10 +58,12 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<1>::value(
     auto const solid_thermal_conductivity = solid_phase.property(
                         MaterialPropertyLib::PropertyType::thermal_conductivity)
                     .template value<double>(variable_array, pos, t, dt);
+    auto const S_L = std::get<double>(
+        variable_array[static_cast<int>(Variable::liquid_saturation)]);
 
     double const effective_thermal_conductivity =
         (1.0 - porosity) * solid_thermal_conductivity +
-        porosity * liquid_thermal_conductivity;
+        porosity * liquid_thermal_conductivity * S_L;
     return effective_thermal_conductivity;
 }
 template <>
@@ -76,7 +78,7 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<1>::dValue(
     auto const porosity = medium->property(
                         MaterialPropertyLib::PropertyType::porosity)
                     .template value<double>(variable_array, pos, t, dt);
-    auto const liquid_thermal_conductivity =
+   auto const liquid_thermal_conductivity =
         liquid_phase
             .property(MaterialPropertyLib::PropertyType::thermal_conductivity)
             .template value<double>(variable_array, pos, t, dt);
@@ -100,6 +102,7 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<1>::dValue(
         dporosity * liquid_thermal_conductivity +
         porosity * dliquid_thermal_conductivity;
     return deffective_thermal_conductivity;
+
 }
 //
 // For 2D and 3D problems
@@ -144,6 +147,8 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<GlobalDim>::value(
         solid_phase
             .property(MaterialPropertyLib::PropertyType::thermal_conductivity)
             .value(variable_array, pos, t, dt));
+    auto const S_L = std::get<double>(
+        variable_array[static_cast<int>(Variable::liquid_saturation)]);
 
     // Local coordinate transformation is only applied for the case that the
     // initial solid thermal conductivity is given with orthotropic assumption.
@@ -158,7 +163,7 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<GlobalDim>::value(
         effective_thermal_conductivity =
             (1.0 - porosity) * solid_thermal_conductivity +
             porosity * liquid_thermal_conductivity *
-                Eigen::Matrix<double, GlobalDim, GlobalDim>::Identity();
+                Eigen::Matrix<double, GlobalDim, GlobalDim>::Identity() * S_L;
     return effective_thermal_conductivity;
 }
 
@@ -194,7 +199,7 @@ PropertyDataType EffectiveThermalConductivityPorosityMixing<GlobalDim>::dValue(
                 .template dValue<double>(variable_array, variable, pos, t, dt);
     auto dsolid_thermal_conductivity =
         formEigenTensor<GlobalDim>(solid_phase
-                    .property(
+                   .property(
                         MaterialPropertyLib::PropertyType::thermal_conductivity)
                     .dValue(variable_array, variable, pos, t, dt));
 
diff --git a/Tests/MaterialLib/TestEffectiveThermalConductivityPorosityMixing.cpp b/Tests/MaterialLib/TestEffectiveThermalConductivityPorosityMixing.cpp
index aeab218c143..c670fc51853 100644
--- a/Tests/MaterialLib/TestEffectiveThermalConductivityPorosityMixing.cpp
+++ b/Tests/MaterialLib/TestEffectiveThermalConductivityPorosityMixing.cpp
@@ -59,14 +59,12 @@ TEST(MaterialPropertyLib, EffectiveThermalConductivityPorosityMixing)
     double const time = std::numeric_limits<double>::quiet_NaN();
     double const dt = std::numeric_limits<double>::quiet_NaN();
 
+    variable_array[static_cast<int>(
+        MaterialPropertyLib::Variable::liquid_saturation)] = 1.0;
     auto const eff_th_cond = MaterialPropertyLib::formEigenTensor<3>(
             medium->property(MaterialPropertyLib::PropertyType::thermal_conductivity)
                 .value(variable_array, pos, time, dt));
-    auto const deff_th_cond = MaterialPropertyLib::formEigenTensor<3>(
-        medium->property(MaterialPropertyLib::PropertyType::thermal_conductivity)
-                .dValue(variable_array, MaterialPropertyLib::Variable::phase_pressure, pos, time, dt));
     ASSERT_NEAR(eff_th_cond.trace(), 2.481, 1.e-10);
-    ASSERT_NEAR(deff_th_cond.trace(), 0.0, 1.e-10);
 }
 
 TEST(MaterialPropertyLib, EffectiveThermalConductivityPorosityMixingRot90deg)
@@ -116,20 +114,13 @@ TEST(MaterialPropertyLib, EffectiveThermalConductivityPorosityMixingRot90deg)
     double const time = std::numeric_limits<double>::quiet_NaN();
     double const dt = std::numeric_limits<double>::quiet_NaN();
 
+    variable_array[static_cast<int>(
+        MaterialPropertyLib::Variable::liquid_saturation)] = 1.0;
     auto const eff_th_cond = MaterialPropertyLib::formEigenTensor<3>(
         medium
             ->property(MaterialPropertyLib::PropertyType::thermal_conductivity)
             .value(variable_array, pos, time, dt));
-    auto const deff_th_cond = MaterialPropertyLib::formEigenTensor<3>(
-        medium
-            ->property(MaterialPropertyLib::PropertyType::thermal_conductivity)
-            .dValue(variable_array,
-                    MaterialPropertyLib::Variable::phase_pressure,
-                    pos,
-                    time,
-                    dt));
     ASSERT_NEAR(eff_th_cond(0, 0), 0.467280, 1.e-10);
     ASSERT_NEAR(eff_th_cond(1, 1), 0.7832, 1.e-10);
     ASSERT_NEAR(eff_th_cond(2, 2), 0.81224, 1.e-10);
-    ASSERT_NEAR(deff_th_cond.trace(), 0.0, 1.e-10);
 }
-- 
GitLab