diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp index 1f9066b8ba781bd23ee439e9f8077730763b3bf3..42ce02a497959aa42574792c1ae9445be1fb2e47 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.cpp @@ -17,17 +17,12 @@ namespace ProcessLib::ThermoRichardsMechanics template <int DisplacementDim> void PermeabilityModel<DisplacementDim>::eval( SpaceTimeData const& x_t, MediaData const& media_data, - SolidCompressibilityData const& solid_compressibility_data, - SaturationData const& S_L_data, BishopsData const& bishops_data, - BishopsData const& bishops_data_prev, + SaturationData const& S_L_data, CapillaryPressureData<DisplacementDim> const& p_cap_data, TemperatureData<DisplacementDim> const& T_data, - PorosityData const& poro_data, LiquidViscosityData const& mu_L_data, - TransportPorosityData& transport_poro_data, - TransportPorosityData const& transport_poro_data_prev, + LiquidViscosityData const& mu_L_data, + TransportPorosityData const& transport_poro_data, TotalStressData<DisplacementDim> const& total_stress_data, - StrainData<DisplacementDim> const& eps_data, - StrainData<DisplacementDim> const& eps_prev_data, EquivalentPlasticStrainData const& equiv_plast_strain_data, PermeabilityData<DisplacementDim>& out) const { @@ -39,44 +34,7 @@ void PermeabilityModel<DisplacementDim>::eval( 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, - x_t.dt); - variables.transport_porosity = transport_poro_data.phi; - } - else - { - variables.transport_porosity = poro_data.phi; - } + variables.transport_porosity = transport_poro_data.phi; out.k_rel = medium.property(MPL::PropertyType::relative_permeability) .template value<double>(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 a1aeba9997539d7cfa9e4adbbbad216e631e778c..176482a9989caa307f8c61cbfa2c27d6048b9ea0 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h @@ -13,8 +13,8 @@ #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EquivalentPlasticStrainData.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h" -#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TotalStressData.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h" namespace ProcessLib::ThermoRichardsMechanics { @@ -22,19 +22,12 @@ template <int DisplacementDim> struct PermeabilityModel { void eval(SpaceTimeData const& x_t, MediaData const& media_data, - SolidCompressibilityData const& solid_compressibility_data, - SaturationData const& S_L_data, BishopsData const& bishops_data, - BishopsData const& bishops_data_prev, + SaturationData const& S_L_data, CapillaryPressureData<DisplacementDim> const& p_cap_data, TemperatureData<DisplacementDim> const& T_data, - PorosityData const& poro_data, LiquidViscosityData const& mu_L_data, - // TODO evaluate transport porosity evolution separately - TransportPorosityData& transport_poro_data, - TransportPorosityData const& transport_poro_data_prev, + TransportPorosityData const& transport_poro_data, TotalStressData<DisplacementDim> const& total_stress_data, - StrainData<DisplacementDim> const& eps_data, - StrainData<DisplacementDim> const& eps_prev_data, EquivalentPlasticStrainData const& equiv_plast_strain_data, PermeabilityData<DisplacementDim>& out) const; }; diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h index 7bafb13b290f185e1137eb8b106046d33bee9b55..edbb8aaffaab51aa0e6d04cb8b88fc36f1d629bd 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h @@ -27,17 +27,6 @@ struct PorosityData } }; -struct TransportPorosityData -{ - double phi; - - static auto reflect() - { - return ProcessLib::Reflection::reflectWithName( - "transport_porosity", &TransportPorosityData::phi); - } -}; - template <int DisplacementDim> struct PorosityModel { diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.cpp index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9473708eb9c841ad9cd56bbc07342e9e3d15e8a6 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.cpp @@ -0,0 +1,73 @@ +/** + * \file + * \copyright + * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#include "TransportPorosity.h" + +namespace ProcessLib::ThermoRichardsMechanics +{ + +template <int DisplacementDim> + +void TransportPorosityModel<DisplacementDim>::eval( + SpaceTimeData const& x_t, MediaData const& media_data, + SolidCompressibilityData const& solid_compressibility_data, + BishopsData const& bishops_data, BishopsData const& bishops_data_prev, + CapillaryPressureData<DisplacementDim> const& p_cap_data, + PorosityData const& poro_data, StrainData<DisplacementDim> const& eps_data, + StrainData<DisplacementDim> const& eps_prev_data, + TransportPorosityData const& transport_poro_data_prev, + TransportPorosityData& transport_poro_data) const +{ + namespace MPL = MaterialPropertyLib; + + auto const& medium = media_data.medium; + + if (!medium.hasProperty(MPL::PropertyType::transport_porosity)) + { + transport_poro_data.phi = poro_data.phi; + return; + } + + MPL::VariableArray variables; + MPL::VariableArray variables_prev; + + 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, + x_t.dt); +} + +template struct TransportPorosityModel<2>; +template struct TransportPorosityModel<3>; + +} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h index 6f70f09beec2219624baeca92e2cd7deaa104fb4..58b7f532cc800dcd5eb90f3a630a64b7b7cf5a9f 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h @@ -1 +1,48 @@ +/** + * \file + * \copyright + * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + #pragma once + +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h" + +namespace ProcessLib::ThermoRichardsMechanics +{ + +struct TransportPorosityData +{ + double phi; + + static auto reflect() + { + return ProcessLib::Reflection::reflectWithName( + "transport_porosity", &TransportPorosityData::phi); + } +}; + +template <int DisplacementDim> +struct TransportPorosityModel +{ + void eval(SpaceTimeData const& x_t, MediaData const& media_data, + SolidCompressibilityData const& solid_compressibility_data, + BishopsData const& bishops_data, + BishopsData const& bishops_data_prev, + CapillaryPressureData<DisplacementDim> const& p_cap_data, + PorosityData const& poro_data, + StrainData<DisplacementDim> const& eps_data, + StrainData<DisplacementDim> const& eps_prev_data, + TransportPorosityData const& transport_poro_data_prev, + TransportPorosityData& transport_poro_data) const; +}; + +extern template struct TransportPorosityModel<2>; +extern template struct TransportPorosityModel<3>; +} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h index 60f328a6ebca05587abb4af20fe262e426b02632..7bf22ee9143bfc2ddc31ddf182b831e910f71ff5 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h @@ -24,6 +24,7 @@ #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TotalStressData.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TransportPorosity.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h" namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h index 78532c31a527c0f0f133dd02c5392eb6d9ec5d19..db1c3855d49c8657a908f418921e8c942f6245fe 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h @@ -18,9 +18,11 @@ #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityModel.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h" #include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h" namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { @@ -50,6 +52,7 @@ struct ConstitutiveModels SaturationModel<DisplacementDim> S_L_model; BishopsModel bishops_model; PorosityModel<DisplacementDim> poro_model; + TransportPorosityModel<DisplacementDim> transport_poro_model; SwellingModel<DisplacementDim> swelling_model; SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model; SolidMechanicsModel<DisplacementDim> s_mech_model; diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp index 3f9819a0638a1f8b8164145e9173481aa8b09590..99ca3c957c38cf299c9f72522fc31af52c9a6cf7 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp @@ -123,14 +123,17 @@ 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, 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, - cd.total_stress_data, state.eps_data, + models.transport_poro_model.eval( + x_t, media_data, solid_compressibility_data, bishops_data, + bishops_data_prev, p_cap_data, poro_data, state.eps_data, StrainData<DisplacementDim>{ eps_prev_arg} /* TODO why not eqU.eps_prev? */, - tmp.equiv_plast_strain_data, perm_data); + prev_state.transport_poro_data, state.transport_poro_data); + + 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); models.th_osmosis_model.eval(x_t, media_data, T_data, rho_L_data, cd.th_osmosis_data);