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