diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp index ad47eadd1f87d55a640bae6bc14d13c994dbd1d2..cb7494151c2f9fd83c4dafc70cf529415ab68ab5 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp +++ b/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp @@ -17,12 +17,17 @@ namespace ProcessLib::ThermoRichardsMechanics template <int DisplacementDim> void PermeabilityModel<DisplacementDim>::eval( SpaceTimeData const& x_t, MediaData const& media_data, - SaturationData const& S_L_data, + SolidCompressibilityData const& solid_compressibility_data, + SaturationData const& S_L_data, BishopsData const& bishops_data, + BishopsData const& bishops_data_prev, + CapillaryPressureData<DisplacementDim> const& p_cap_data, TemperatureData<DisplacementDim> const& T_data, PorosityData const& poro_data, LiquidViscosityData const& mu_L_data, PorosityData& transport_poro_data, PorosityData const& transport_poro_data_prev, SolidMechanicsDataStateless<DisplacementDim> const& s_mech_data, + StrainData<DisplacementDim> const& eps_data, + StrainData<DisplacementDim> const& eps_prev_data, PermeabilityData<DisplacementDim>& out) const { namespace MPL = MaterialPropertyLib; @@ -32,14 +37,35 @@ void PermeabilityModel<DisplacementDim>::eval( MPL::VariableArray variables; variables.liquid_saturation = S_L_data.S_L; variables.temperature = T_data.T; + variables.capillary_pressure = p_cap_data.p_cap; MPL::VariableArray variables_prev; if (medium.hasProperty(MPL::PropertyType::transport_porosity)) { + static constexpr int kelvin_vector_size = + MathLib::KelvinVector::kelvin_vector_dimensions(DisplacementDim); + using Invariants = + MathLib::KelvinVector::Invariants<kelvin_vector_size>; // Used in // MaterialLib/MPL/Properties/PermeabilityOrthotropicPowerLaw.cpp variables_prev.transport_porosity = transport_poro_data_prev.phi; + // Used in + // MaterialLib/MPL/Properties/TransportPorosityFromMassBalance.cpp + variables.grain_compressibility = solid_compressibility_data.beta_SR; + // Set volumetric strain rate for the general case without swelling. + variables.volumetric_strain = Invariants::trace(eps_data.eps); + variables_prev.volumetric_strain = Invariants::trace(eps_prev_data.eps); + variables.effective_pore_pressure = + -bishops_data.chi_S_L * p_cap_data.p_cap; + variables.porosity = poro_data.phi; + + // Used in MaterialLib/MPL/Properties/PorosityFromMassBalance.cpp + // and MaterialLib/MPL/Properties/TransportPorosityFromMassBalance.cpp + variables_prev.effective_pore_pressure = + -bishops_data_prev.chi_S_L * + (p_cap_data.p_cap - p_cap_data.p_cap_dot * x_t.dt); + transport_poro_data.phi = medium.property(MPL::PropertyType::transport_porosity) .template value<double>(variables, variables_prev, x_t.x, x_t.t, diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h b/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h index c1cd17a2aba29b1c5b2a937729a1d20a73c51586..e3a252b373d9d19a731bb92623ed1928454253fd 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h +++ b/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h @@ -28,7 +28,10 @@ template <int DisplacementDim> struct PermeabilityModel { void eval(SpaceTimeData const& x_t, MediaData const& media_data, - SaturationData const& S_L_data, + SolidCompressibilityData const& solid_compressibility_data, + SaturationData const& S_L_data, BishopsData const& bishops_data, + BishopsData const& bishops_data_prev, + CapillaryPressureData<DisplacementDim> const& p_cap_data, TemperatureData<DisplacementDim> const& T_data, PorosityData const& poro_data, LiquidViscosityData const& mu_L_data, @@ -36,6 +39,8 @@ struct PermeabilityModel PorosityData& transport_poro_data, PorosityData const& transport_poro_data_prev, SolidMechanicsDataStateless<DisplacementDim> const& s_mech_data, + StrainData<DisplacementDim> const& eps_data, + StrainData<DisplacementDim> const& eps_prev_data, PermeabilityData<DisplacementDim>& out) const; }; diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp index 02cbc5946611f2cc20159e5c70cf550d900df2b9..3439ae15cc3ae22223a199269ea5f05ba2d34969 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp @@ -125,10 +125,14 @@ void ConstitutiveSetting<DisplacementDim>::eval( models.mu_L_model.eval(x_t, media_data, T_data, mu_L_data); - models.perm_model.eval(x_t, media_data, S_L_data, T_data, poro_data, - mu_L_data, state.transport_poro_data, - prev_state.transport_poro_data, s_mech_data, - perm_data); + models.perm_model.eval( + x_t, media_data, solid_compressibility_data, S_L_data, bishops_data, + bishops_data_prev, p_cap_data, T_data, poro_data, mu_L_data, + state.transport_poro_data, prev_state.transport_poro_data, s_mech_data, + state.eps_data, + StrainData<DisplacementDim>{ + eps_prev_arg} /* TODO why not eqU.eps_prev? */, + perm_data); models.th_osmosis_model.eval(x_t, media_data, T_data, rho_L_data, cd.th_osmosis_data);