diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp index 42d3c98b3c274466284a67ada5a18db7cc1e1924..1b37fcd4ad5581694ba47edc4d12ed58c7781090 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp @@ -23,11 +23,16 @@ void PermeabilityModel<DisplacementDim>::eval( LiquidViscosityData const& mu_L_data, TransportPorosityData const& transport_poro_data, TotalStressData<DisplacementDim> const& total_stress_data, + StrainData<DisplacementDim> const& eps_data, EquivalentPlasticStrainData const& equiv_plast_strain_data, PermeabilityData<DisplacementDim>& out) const { namespace MPL = MaterialPropertyLib; + static constexpr int kelvin_vector_size = + MathLib::KelvinVector::kelvin_vector_dimensions(DisplacementDim); + using Invariants = MathLib::KelvinVector::Invariants<kelvin_vector_size>; + auto const& medium = media_data.medium; MPL::VariableArray variables; @@ -57,6 +62,8 @@ void PermeabilityModel<DisplacementDim>::eval( variables.equivalent_plastic_strain = equiv_plast_strain_data.equivalent_plastic_strain; + variables.volumetric_strain = Invariants::trace(eps_data.eps); + auto const K_intrinsic = MPL::formEigenTensor<DisplacementDim>( medium.property(MPL::PropertyType::permeability) .value(variables, x_t.x, x_t.t, x_t.dt)); diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h index 545a67b8fb83e6a0871a7eff5aaa1f39292f886d..43a90efb3fa3caa5328c5511e2c8493d019f1306 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h @@ -28,6 +28,7 @@ struct PermeabilityModel LiquidViscosityData const& mu_L_data, TransportPorosityData const& transport_poro_data, TotalStressData<DisplacementDim> const& total_stress_data, + StrainData<DisplacementDim> const& eps_data, EquivalentPlasticStrainData const& equiv_plast_strain_data, PermeabilityData<DisplacementDim>& out) const; }; diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/ConstitutiveSetting.cpp index 8f50910fe4f1a2790f4ea00a7b0420e0e1963390..fba26c23873e93db484f3c08ee15d27b986d7d83 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/ConstitutiveSetting.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/ConstitutiveSetting.cpp @@ -127,8 +127,8 @@ void ConstitutiveSetting<DisplacementDim>::eval( assertEvalArgsUnique(models.perm_model); models.perm_model.eval(x_t, media_data, S_L_data, p_cap_data, T_data, mu_L_data, state.transport_poro_data, - state.total_stress_data, tmp.equiv_plast_strain_data, - perm_data); + state.total_stress_data, state.eps_data, + tmp.equiv_plast_strain_data, perm_data); assertEvalArgsUnique(models.th_osmosis_model); models.th_osmosis_model.eval(x_t, media_data, T_data, rho_L_data, diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveStress_StrainTemperature/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveStress_StrainTemperature/ConstitutiveSetting.cpp index 48d162a4f5555caec88e00f15ba1a3665b0deda4..cba97f7d3ccd030daa35d55c34ba90f9128c3ce0 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveStress_StrainTemperature/ConstitutiveSetting.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveStress_StrainTemperature/ConstitutiveSetting.cpp @@ -149,8 +149,8 @@ void ConstitutiveSetting<DisplacementDim>::eval( assertEvalArgsUnique(models.perm_model); models.perm_model.eval(x_t, media_data, S_L_data, p_cap_data, T_data, mu_L_data, state.transport_poro_data, - cd.total_stress_data, tmp.equiv_plast_strain_data, - perm_data); + cd.total_stress_data, state.eps_data, + tmp.equiv_plast_strain_data, perm_data); assertEvalArgsUnique(models.th_osmosis_model); models.th_osmosis_model.eval(x_t, media_data, T_data, rho_L_data, diff --git a/Tests/Data/ThermoRichardsMechanics/MFront/ThermoPoroElasticity/uniaxial_isothermal_drainage_imbibition_extended_mfront_model.prj b/Tests/Data/ThermoRichardsMechanics/MFront/ThermoPoroElasticity/uniaxial_isothermal_drainage_imbibition_extended_mfront_model.prj index 4687b388bc523a2daae139d36649395e7d91aa23..ce1d13ba14caff9433b2432829b6ce7656825f50 100644 --- a/Tests/Data/ThermoRichardsMechanics/MFront/ThermoPoroElasticity/uniaxial_isothermal_drainage_imbibition_extended_mfront_model.prj +++ b/Tests/Data/ThermoRichardsMechanics/MFront/ThermoPoroElasticity/uniaxial_isothermal_drainage_imbibition_extended_mfront_model.prj @@ -129,8 +129,12 @@ </property> <property> <name>permeability</name> - <type>Constant</type> - <value>2e-20</value> + <type>Function</type> + <value> + <!-- If volumetric strain is not set by OGS, it will be NaN. + Hence, the entire expression will be NaN and OGS will fail. --> + <expression>2e-20 + volumetric_strain - volumetric_strain</expression> + </value> </property> <property> <name>porosity</name>