diff --git a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt index cb894af067910371834922577c59481860815c24..a76b69a84f6ba5180951910d0ac328eaf8b485b8 100644 --- a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt +++ b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt @@ -1,5 +1,7 @@ get_source_files(SOURCES) -append_source_files(SOURCES Constitutive) + +append_source_files(SOURCES ConstitutiveCommon) +append_source_files(SOURCES ConstitutiveOriginal) ogs_add_library(ThermoRichardsMechanics ${SOURCES}) target_link_libraries( diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp deleted file mode 100644 index c000147075bfa27bb7979ee3219b45a72372cf5f..0000000000000000000000000000000000000000 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/** - * \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 "EqU.h" - -namespace ProcessLib::ThermoRichardsMechanics -{ -template <int DisplacementDim> -void EqUModel<DisplacementDim>::eval( - CapillaryPressureData<DisplacementDim> const& p_cap_data, - SaturationDataDeriv const& dS_L_data, - BiotData const& biot_data, - BishopsData const& bishops_data, - LiquidDensityData const& rho_L_data, - PorosityData const& poro_data, - EqUData<DisplacementDim>& out) const -{ - out.J_up_X_BTI2N = - -biot_data.alpha * - (bishops_data.chi_S_L + - bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap); - - out.J_up_HT_V_N = - poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b_; -} - -template struct EqUModel<2>; -template struct EqUModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h deleted file mode 100644 index 05c1e8df1276af259706b4a95c88ddfb9c293c0f..0000000000000000000000000000000000000000 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * \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 "LiquidDensity.h" -#include "Porosity.h" -#include "Saturation.h" - -namespace ProcessLib::ThermoRichardsMechanics -{ -template <int DisplacementDim> -struct EqUData -{ - GlobalDimVector<DisplacementDim> J_up_HT_V_N = DVnan<DisplacementDim>(); - double J_up_X_BTI2N = nan; -}; - -template <int DisplacementDim> -struct EqUModel -{ - explicit EqUModel( - Eigen::Vector<double, DisplacementDim> const& specific_body_force) - : b_(specific_body_force) - { - } - - void eval(CapillaryPressureData<DisplacementDim> const& p_cap_data, - SaturationDataDeriv const& dS_L_data, - BiotData const& biot_data, - BishopsData const& bishops_data, - LiquidDensityData const& rho_L_data, - PorosityData const& poro_data, - EqUData<DisplacementDim>& out) const; - -private: - /// Gravity vector (specific body force). - Eigen::Vector<double, DisplacementDim> const b_; -}; - -extern template struct EqUModel<2>; -extern template struct EqUModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp deleted file mode 100644 index aa93d1ad61e9d67372b52ef66223f70bc43698a8..0000000000000000000000000000000000000000 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/** - * \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 "SolidCompressibility.h" - -namespace ProcessLib::ThermoRichardsMechanics -{ -template <int DisplacementDim> -void SolidCompressibilityModel<DisplacementDim>::eval( - const SpaceTimeData& x_t, - const BiotData& biot_data, - const ElasticTangentStiffnessData<DisplacementDim>& C_el_data, - SolidCompressibilityData& out) const -{ - out.beta_SR = (1 - biot_data.alpha) / - solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el); -} - -template struct SolidCompressibilityModel<2>; -template struct SolidCompressibilityModel<3>; - -} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h similarity index 97% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h index da4dd9bef043a558d81df8145226cc2df3e2c3ce..fc93022afe8e7ae67f507030191a812f9d863902 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h @@ -10,6 +10,7 @@ #pragma once +#include "Base.h" #include "Saturation.h" namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h similarity index 96% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h index 1fc24f14182eafb0ef1034f51f1d7d1a955b062f..9f584b208ae86ac4d541e813a1b1256b0343b273 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h @@ -11,7 +11,8 @@ #pragma once #include "LiquidDensity.h" -#include "Permeability.h" +#include "LiquidViscosity.h" +#include "PermeabilityData.h" #include "ThermoOsmosis.h" namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h new file mode 100644 index 0000000000000000000000000000000000000000..ed360ae83d1d601eaccf37c930d7db0ece1bd03e --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h @@ -0,0 +1,22 @@ +/** + * \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 "Base.h" + +namespace ProcessLib::ThermoRichardsMechanics +{ +template <int DisplacementDim> +struct ElasticTangentStiffnessData +{ + KelvinMatrix<DisplacementDim> C_el; +}; +} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h similarity index 98% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h index 67bde1b24e3930ba8c8696e5545094025cd64202..e52e1b1426891db1b0a7f002eb9d3707bce66ed9 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h @@ -13,7 +13,7 @@ #include "Biot.h" #include "FluidThermalExpansion.h" #include "LiquidDensity.h" -#include "Permeability.h" +#include "PermeabilityData.h" #include "Saturation.h" #include "TRMStorage.h" #include "TRMVaporDiffusion.h" diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp similarity index 68% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp index a1b8db53098dd4d962fe953e88841f09302b2535..cad9183ab6c325e687c46f534ccb799bfabe9066 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp @@ -14,10 +14,9 @@ namespace ProcessLib::ThermoRichardsMechanics { template <int DisplacementDim> void GravityModel<DisplacementDim>::eval( - PorosityData const& poro_data, - SolidDensityData const& rho_S_data, - LiquidDensityData const& rho_L_data, - SaturationData const& S_L_data, + PorosityData const& poro_data, SolidDensityData const& rho_S_data, + LiquidDensityData const& rho_L_data, SaturationData const& S_L_data, + SaturationDataDeriv const& dS_L_data, GravityData<DisplacementDim>& out) const { auto const rho_SR = rho_S_data.rho_SR; @@ -28,6 +27,11 @@ void GravityModel<DisplacementDim>::eval( double const rho = rho_SR * (1 - phi) + S_L * phi * rho_LR; out.volumetric_body_force = rho * b; + + // There is no minus in the Jacobian block, because volumetric_body_force is + // subtracted from the residual vector. + out.J_up_HT_V_N = + poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b; } template struct GravityModel<2>; diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h similarity index 87% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h index 0f17831fb92861af1361ff0744337b94d50695a9..5100d4803d519d05e16549fcd3ee45890d6a93aa 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h @@ -19,7 +19,8 @@ namespace ProcessLib::ThermoRichardsMechanics template <int DisplacementDim> struct GravityData { - Eigen::Vector<double, DisplacementDim> volumetric_body_force; + GlobalDimVector<DisplacementDim> volumetric_body_force; + GlobalDimVector<DisplacementDim> J_up_HT_V_N; }; template <int DisplacementDim> @@ -35,6 +36,7 @@ struct GravityModel SolidDensityData const& rho_S_data, LiquidDensityData const& rho_L_data, SaturationData const& S_L_data, + SaturationDataDeriv const& dS_L_data, GravityData<DisplacementDim>& out) const; private: diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h similarity index 93% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h index 6ccdcd370ac95548118a175fa6e2ea0737153291..ac31025f2abde84d04088f2458886ea32b7f6e81 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h @@ -10,7 +10,7 @@ #pragma once -#include "ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h" +#include "Base.h" namespace ProcessLib::ThermoRichardsMechanics { diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h similarity index 58% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h index a09fd202f1c2f96b736df24adaa7ba5c55d7e235..2cb6cdfceb7321cf41c54d860c707c3eefe192a3 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h @@ -15,20 +15,19 @@ namespace ProcessLib::ThermoRichardsMechanics { template <int DisplacementDim> -struct MaterialStateData +class MaterialStateData { - explicit MaterialStateData( - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material) - : material_state_variables( - solid_material.createMaterialStateVariables()) + using MSV = typename MaterialLib::Solids::MechanicsBase< + DisplacementDim>::MaterialStateVariables; + +public: + explicit MaterialStateData(std::unique_ptr<MSV>&& material_state_variables) + : material_state_variables(std::move(material_state_variables)) { } void pushBackState() { material_state_variables->pushBackState(); } - std::unique_ptr<typename MaterialLib::Solids::MechanicsBase< - DisplacementDim>::MaterialStateVariables> - material_state_variables; + std::unique_ptr<MSV> material_state_variables; }; } // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h new file mode 100644 index 0000000000000000000000000000000000000000..b43cf3bed32c0627f3cce0954fef2da8d2bdbcc6 --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h @@ -0,0 +1,24 @@ +/** + * \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 "Base.h" + +namespace ProcessLib::ThermoRichardsMechanics +{ +template <int DisplacementDim> +struct PermeabilityData +{ + double k_rel; + double dk_rel_dS_L; + GlobalDimMatrix<DisplacementDim> Ki_over_mu; +}; +} // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h similarity index 62% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h index 692ef81ac4cc942a6dfbac8105ef201015408f01..ea0331b1a8cf1b1da3269d0ca32ef94b98194a6f 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h @@ -11,7 +11,7 @@ #pragma once #include "Biot.h" -#include "ElasticTangentStiffness.h" +#include "ElasticTangentStiffnessData.h" namespace ProcessLib::ThermoRichardsMechanics { @@ -20,12 +20,10 @@ struct SolidCompressibilityData double beta_SR; }; -template <int DisplacementDim> +template <int DisplacementDim, typename SolidMaterial> struct SolidCompressibilityModel { - explicit SolidCompressibilityModel( - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material) + explicit SolidCompressibilityModel(SolidMaterial const& solid_material) : solid_material_(solid_material) { } @@ -33,12 +31,14 @@ struct SolidCompressibilityModel void eval(SpaceTimeData const& x_t, BiotData const& biot_data, ElasticTangentStiffnessData<DisplacementDim> const& C_el_data, - SolidCompressibilityData& out) const; + SolidCompressibilityData& out) const + { + out.beta_SR = + (1 - biot_data.alpha) / + solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el); + } private: - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_; + SolidMaterial const& solid_material_; }; - -extern template struct SolidCompressibilityModel<2>; -extern template struct SolidCompressibilityModel<3>; } // namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h similarity index 96% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h index 54091d39898e7329a46e1322bbf4c384924035b3..ca44e96e572f16e11e3168dbb6ad9a352c24bfdb 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h @@ -10,8 +10,7 @@ #pragma once -#include "ElasticTangentStiffness.h" -#include "MathLib/KelvinVector.h" +#include "ElasticTangentStiffnessData.h" #include "Saturation.h" namespace ProcessLib::ThermoRichardsMechanics diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h similarity index 98% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h index f2f92242bca3e9fce0e419fbbf49531d2cfea6b4..e9c29b2f4ab7b462736a8790363465d14e11d1f8 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h @@ -12,7 +12,7 @@ #include "DarcyLaw.h" #include "LiquidDensity.h" -#include "Permeability.h" +#include "PermeabilityData.h" #include "Porosity.h" #include "SolidDensity.h" diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h similarity index 100% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h new file mode 100644 index 0000000000000000000000000000000000000000..12b3a841d77aef2efdb0bb5d384591da5ab45526 --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h @@ -0,0 +1,104 @@ +/** + * \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/Reflection/ReflectionData.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.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 +{ +/// Data whose state must be tracked by the TRM process. +template <int DisplacementDim> +struct StatefulData +{ + SaturationData S_L_data; + PorosityData poro_data; + TransportPorosityData transport_poro_data; + StrainData<DisplacementDim> eps_data; + SwellingDataStateful<DisplacementDim> swelling_data; + SolidMechanicsDataStateful<DisplacementDim> s_mech_data; + + static auto reflect() + { + using Self = StatefulData<DisplacementDim>; + + return Reflection::reflectWithoutName(&Self::S_L_data, + &Self::poro_data, + &Self::transport_poro_data, + &Self::eps_data, + &Self::swelling_data, + &Self::s_mech_data); + } +}; + +/// Data that is needed for output purposes, but not directly for the assembly. +template <int DisplacementDim> +struct OutputData +{ + DarcyLawData<DisplacementDim> darcy_data; + LiquidDensityData rho_L_data; + LiquidViscosityData mu_L_data; + SolidDensityData rho_S_data; + + static auto reflect() + { + using Self = OutputData<DisplacementDim>; + + return Reflection::reflectWithoutName(&Self::darcy_data, + &Self::rho_L_data, + &Self::mu_L_data, + &Self::rho_S_data); + } +}; + +/// Data that is needed for the equation system assembly. +template <int DisplacementDim> +struct ConstitutiveData +{ + SolidMechanicsDataStateless<DisplacementDim> s_mech_data; + GravityData<DisplacementDim> grav_data; + TRMHeatStorageAndFluxData<DisplacementDim> heat_data; + TRMVaporDiffusionData<DisplacementDim> vap_data; + TRMStorageData storage_data; + EqPData<DisplacementDim> eq_p_data; + EqTData<DisplacementDim> eq_T_data; + ThermoOsmosisData<DisplacementDim> th_osmosis_data; +}; + +/// Data that stores intermediate values, which are not needed outside the +/// constitutive setting. +template <int DisplacementDim> +struct ConstitutiveTempData +{ + SwellingDataStateless<DisplacementDim> swelling_data; + ElasticTangentStiffnessData<DisplacementDim> C_el_data; + BiotData biot_data; + SolidCompressibilityData solid_compressibility_data; + SaturationDataDeriv dS_L_data; + BishopsData bishops_data; + // TODO why not usual state tracking for that? + BishopsData bishops_data_prev; + SolidThermalExpansionData<DisplacementDim> s_therm_exp_data; + PermeabilityData<DisplacementDim> perm_data; + FluidThermalExpansionData f_therm_exp_data; +}; +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h new file mode 100644 index 0000000000000000000000000000000000000000..1b3676853c531c6d1ef099f344fe80060041d649 --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h @@ -0,0 +1,70 @@ +/** + * \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 "ElasticTangentStiffnessModel.h" +#include "PermeabilityModel.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h" + +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal +{ +/// Constitutive models used for assembly. +template <int DisplacementDim> +struct ConstitutiveModels +{ + template <typename TRMProcessData> + explicit ConstitutiveModels( + TRMProcessData const& process_data, + SolidConstitutiveRelation<DisplacementDim> const& solid_material) + : elastic_tangent_stiffness_model(solid_material), + solid_compressibility_model(solid_material), + s_mech_model(solid_material), + grav_model(process_data.specific_body_force), + darcy_model(process_data.specific_body_force), + eq_p_model(process_data.specific_body_force) + { + } + + ElasticTangentStiffnessModel<DisplacementDim> + elastic_tangent_stiffness_model; + BiotModel biot_model; + SolidCompressibilityModel<DisplacementDim, + SolidConstitutiveRelation<DisplacementDim>> + solid_compressibility_model; + SaturationModel<DisplacementDim> S_L_model; + BishopsModel bishops_model; + PorosityModel<DisplacementDim> poro_model; + SwellingModel<DisplacementDim> swelling_model; + SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model; + SolidMechanicsModel<DisplacementDim> s_mech_model; + LiquidDensityModel<DisplacementDim> rho_L_model; + SolidDensityModel<DisplacementDim> rho_S_model; + GravityModel<DisplacementDim> grav_model; + LiquidViscosityModel<DisplacementDim> mu_L_model; + PermeabilityModel<DisplacementDim> perm_model; + DarcyLawModel<DisplacementDim> darcy_model; + TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model; + TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model; + FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model; + TRMStorageModel<DisplacementDim> storage_model; + EqPModel<DisplacementDim> eq_p_model; + EqTModel<DisplacementDim> eq_T_model; + ThermoOsmosisModel<DisplacementDim> th_osmosis_model; +}; +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp similarity index 94% rename from ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp index 3439ae15cc3ae22223a199269ea5f05ba2d34969..34ccac3a66f77d5384cbe1bd560a5f04bf900848 100644 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp @@ -10,7 +10,7 @@ #include "ConstitutiveSetting.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { template <int DisplacementDim> void ConstitutiveSetting<DisplacementDim>::eval( @@ -43,7 +43,7 @@ void ConstitutiveSetting<DisplacementDim>::eval( auto& darcy_data = out.darcy_data; auto& f_therm_exp_data = tmp.f_therm_exp_data; - auto& swelling_data = cd.swelling_data; + auto& swelling_data = tmp.swelling_data; auto& s_mech_data = cd.s_mech_data; auto& grav_data = cd.grav_data; auto& heat_data = cd.heat_data; @@ -100,7 +100,7 @@ void ConstitutiveSetting<DisplacementDim>::eval( models.s_mech_model.eval( x_t, s_therm_exp_data, swelling_data, T_data, p_cap_data, biot_data, - bishops_data, state.eps_data, + bishops_data, dS_L_data, state.eps_data, prev_state.eps_data /* TODO why is eps stateful? */, mat_state, prev_state.s_mech_data, state.s_mech_data, s_mech_data); @@ -118,10 +118,7 @@ void ConstitutiveSetting<DisplacementDim>::eval( models.rho_S_model.eval(x_t, media_data, poro_data, T_data, rho_S_data); models.grav_model.eval(poro_data, rho_S_data, rho_L_data, S_L_data, - grav_data); - - models.eq_u_model.eval(p_cap_data, dS_L_data, biot_data, bishops_data, - rho_L_data, poro_data, cd.eq_u_data); + dS_L_data, grav_data); models.mu_L_model.eval(x_t, media_data, T_data, mu_L_data); @@ -166,4 +163,4 @@ void ConstitutiveSetting<DisplacementDim>::eval( template struct ConstitutiveSetting<2>; template struct ConstitutiveSetting<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h new file mode 100644 index 0000000000000000000000000000000000000000..1d1db6c1fb665d01b3f4baa03c603eb99c348418 --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h @@ -0,0 +1,63 @@ +/** + * \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 "ConstitutiveData.h" +#include "ConstitutiveModels.h" + +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal +{ +template <int DisplacementDim> +struct ConstitutiveSetting +{ + /// Evaluate the constitutive setting. + void eval(ConstitutiveModels<DisplacementDim>& models, double const t, + double const dt, ParameterLib::SpatialPosition const& x_position, + MaterialPropertyLib::Medium& medium, + TemperatureData<DisplacementDim> const& T_data, + CapillaryPressureData<DisplacementDim> const& p_cap_data, + KelvinVector<DisplacementDim> const& eps_arg, + KelvinVector<DisplacementDim> const& eps_prev_arg, + StatefulData<DisplacementDim>& state, + StatefulData<DisplacementDim> const& prev_state, + MaterialStateData<DisplacementDim>& mat_state, + ConstitutiveTempData<DisplacementDim>& tmp, + OutputData<DisplacementDim>& out, + ConstitutiveData<DisplacementDim>& cd); + + static KelvinVector<DisplacementDim> const& totalStress( + ConstitutiveData<DisplacementDim> const& cd, + StatefulData<DisplacementDim> const& /*state*/) + { + return cd.s_mech_data.sigma_total; + } + static KelvinVector<DisplacementDim>& totalStress( + ConstitutiveData<DisplacementDim>& cd, + StatefulData<DisplacementDim>& /*state*/) + { + return cd.s_mech_data.sigma_total; + } + + static KelvinVector<DisplacementDim> const& statefulStress( + StatefulData<DisplacementDim> const& state) + { + return state.s_mech_data.sigma_eff; + } + static KelvinVector<DisplacementDim>& statefulStress( + StatefulData<DisplacementDim>& state) + { + return state.s_mech_data.sigma_eff; + } +}; + +extern template struct ConstitutiveSetting<2>; +extern template struct ConstitutiveSetting<3>; +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp similarity index 89% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp index cc330a575c7235f8f31fa6393ae39110fdbfb333..a7f462c1ea895af7b31cb496f09aeda820242da4 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp @@ -8,11 +8,11 @@ * */ -#include "ElasticTangentStiffness.h" +#include "ElasticTangentStiffnessModel.h" #include "MaterialLib/MPL/Utils/FormEigenTensor.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { template <int DisplacementDim> void ElasticTangentStiffnessModel<DisplacementDim>::eval( @@ -51,4 +51,4 @@ void ElasticTangentStiffnessModel<DisplacementDim>::eval( template struct ElasticTangentStiffnessModel<2>; template struct ElasticTangentStiffnessModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h similarity index 61% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h index fe749935a619350598191e0d5bd2422aaf415f44..bcfd26de1e523248b5e8d162f00dea68378a1f0f 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h @@ -10,23 +10,17 @@ #pragma once -#include "Base.h" -#include "MaterialLib/SolidModels/MechanicsBase.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h" +#include "TraitsBase.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { -template <int DisplacementDim> -struct ElasticTangentStiffnessData -{ - KelvinMatrix<DisplacementDim> C_el; -}; - template <int DisplacementDim> struct ElasticTangentStiffnessModel { explicit ElasticTangentStiffnessModel( - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material) + SolidConstitutiveRelation<DisplacementDim> const& solid_material) : solid_material_(solid_material) { } @@ -36,9 +30,9 @@ struct ElasticTangentStiffnessModel ElasticTangentStiffnessData<DisplacementDim>& out) const; private: - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_; + SolidConstitutiveRelation<DisplacementDim> const& solid_material_; }; extern template struct ElasticTangentStiffnessModel<2>; extern template struct ElasticTangentStiffnessModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp similarity index 96% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp index 03f4229158df7866cfa3cdb7c6f56efa9bdf7f99..4c17578ddb4c9f824ba77459403803ed11f6f92e 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp @@ -8,11 +8,11 @@ * */ -#include "Permeability.h" +#include "PermeabilityModel.h" #include "MaterialLib/MPL/Utils/FormEigenTensor.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { template <int DisplacementDim> void PermeabilityModel<DisplacementDim>::eval( @@ -106,4 +106,4 @@ void PermeabilityModel<DisplacementDim>::eval( template struct PermeabilityModel<2>; template struct PermeabilityModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h similarity index 78% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h index ae3eb3c5b52e33337595fdd38498e81b5781b94b..7e5364f9243c290afd08d774afd2978517cb8055 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h @@ -10,20 +10,13 @@ #pragma once -#include "LiquidViscosity.h" -#include "Porosity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h" #include "SolidMechanics.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { -template <int DisplacementDim> -struct PermeabilityData -{ - double k_rel; - double dk_rel_dS_L; - GlobalDimMatrix<DisplacementDim> Ki_over_mu; -}; - template <int DisplacementDim> struct PermeabilityModel { @@ -46,4 +39,4 @@ struct PermeabilityModel extern template struct PermeabilityModel<2>; extern template struct PermeabilityModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp similarity index 82% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp index 5a966d944fdf0bf8492d79082aab26f0c2db94c4..9574cd3ccef1153daf404bd64329cff8bb8e33a9 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp @@ -10,7 +10,7 @@ #include "SolidMechanics.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { template <int DisplacementDim> void SolidMechanicsModel<DisplacementDim>::eval( @@ -21,6 +21,7 @@ void SolidMechanicsModel<DisplacementDim>::eval( CapillaryPressureData<DisplacementDim> const& p_cap_data, BiotData const& biot_data, BishopsData const& bishops_data, + SaturationDataDeriv const& dS_L_data, StrainData<DisplacementDim> const& eps_data, StrainData<DisplacementDim> const& eps_prev_data, MaterialStateData<DisplacementDim>& mat_state, @@ -41,6 +42,7 @@ void SolidMechanicsModel<DisplacementDim>::eval( variables.mechanical_strain.emplace<KelvinVector<DisplacementDim>>( current_state.eps_m); + variables.temperature = T_data.T; MPL::VariableArray variables_prev; variables_prev.stress.emplace<KelvinVector<DisplacementDim>>( @@ -64,14 +66,22 @@ void SolidMechanicsModel<DisplacementDim>::eval( auto const& identity2 = MathLib::KelvinVector::Invariants< MathLib::KelvinVector::kelvin_vector_dimensions( DisplacementDim)>::identity2; - out.sigma_total = + out.sigma_total.noalias() = current_state.sigma_eff + biot_data.alpha * bishops_data.chi_S_L * p_cap_data.p_cap * identity2; - out.J_uT_BT_K_N = // TODO is this thermal stress? + out.J_uT_BT_K_N.noalias() = // TODO is this thermal stress? -out.stiffness_tensor * s_therm_exp_data.solid_linear_thermal_expansivity_vector; + double const J_up_X_BTI2N = + -biot_data.alpha * + (bishops_data.chi_S_L + + bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap); + + out.J_up_BT_K_N.noalias() = + swelling_data.J_up_BT_K_N + J_up_X_BTI2N * identity2; + out.equivalent_plastic_strain = mat_state.material_state_variables->getEquivalentPlasticStrain(); } @@ -79,4 +89,4 @@ void SolidMechanicsModel<DisplacementDim>::eval( template struct SolidMechanicsModel<2>; template struct SolidMechanicsModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h similarity index 72% rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h index ec591359a8b72c10606a7dd359f4f8ad090a5d20..f5d26f293a861ae0898166d2690aaa6106750eb1 100644 --- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h @@ -10,14 +10,14 @@ #pragma once -#include "Biot.h" -#include "Bishops.h" -#include "MaterialLib/SolidModels/MechanicsBase.h" -#include "MaterialState.h" -#include "SolidThermalExpansion.h" -#include "Swelling.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h" +#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h" +#include "TraitsBase.h" -namespace ProcessLib::ThermoRichardsMechanics +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal { template <int DisplacementDim> struct SolidMechanicsDataStateful @@ -42,6 +42,7 @@ struct SolidMechanicsDataStateless KelvinVector<DisplacementDim> sigma_total = KVnan<DisplacementDim>(); KelvinMatrix<DisplacementDim> stiffness_tensor = KMnan<DisplacementDim>(); KelvinVector<DisplacementDim> J_uT_BT_K_N = KVnan<DisplacementDim>(); + KelvinVector<DisplacementDim> J_up_BT_K_N = KVnan<DisplacementDim>(); double equivalent_plastic_strain = nan; }; @@ -49,8 +50,7 @@ template <int DisplacementDim> struct SolidMechanicsModel { explicit SolidMechanicsModel( - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material) + SolidConstitutiveRelation<DisplacementDim> const& solid_material) : solid_material_(solid_material) { } @@ -63,6 +63,7 @@ struct SolidMechanicsModel CapillaryPressureData<DisplacementDim> const& p_cap_data, BiotData const& biot_data, BishopsData const& bishops_data, + SaturationDataDeriv const& dS_L_data, StrainData<DisplacementDim> const& eps_data, StrainData<DisplacementDim> const& eps_prev_data, MaterialStateData<DisplacementDim>& mat_state, @@ -71,9 +72,9 @@ struct SolidMechanicsModel SolidMechanicsDataStateless<DisplacementDim>& out) const; private: - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_; + SolidConstitutiveRelation<DisplacementDim> const& solid_material_; }; extern template struct SolidMechanicsModel<2>; extern template struct SolidMechanicsModel<3>; -} // namespace ProcessLib::ThermoRichardsMechanics +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h new file mode 100644 index 0000000000000000000000000000000000000000..661dfc907f49c4372255592546bd5feb4b3c82a3 --- /dev/null +++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h @@ -0,0 +1,20 @@ +/** + * \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 "MaterialLib/SolidModels/MechanicsBase.h" + +namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal +{ +template <int DisplacementDim> +using SolidConstitutiveRelation = + MaterialLib::Solids::MechanicsBase<DisplacementDim>; +} // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h deleted file mode 100644 index 2df2974fdbaea1d4fa505a0833f13f7c2a1ef3c0..0000000000000000000000000000000000000000 --- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h +++ /dev/null @@ -1,189 +0,0 @@ -/** - * \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 <limits> - -#include "Constitutive/DarcyLaw.h" -#include "Constitutive/EqP.h" -#include "Constitutive/EqT.h" -#include "Constitutive/EqU.h" -#include "Constitutive/FluidThermalExpansion.h" -#include "Constitutive/Gravity.h" -#include "Constitutive/MaterialState.h" -#include "Constitutive/Porosity.h" -#include "Constitutive/Saturation.h" -#include "Constitutive/SolidMechanics.h" -#include "Constitutive/TRMHeatStorageAndFlux.h" -#include "Constitutive/TRMStorage.h" -#include "Constitutive/TRMVaporDiffusion.h" -#include "Constitutive/ThermoOsmosis.h" -#include "ThermoRichardsMechanicsProcessData.h" - -namespace ProcessLib::ThermoRichardsMechanics -{ - -/// Data whose state must be tracked by the TRM process. -template <int DisplacementDim> -struct StatefulData -{ - SaturationData S_L_data; - PorosityData poro_data; - TransportPorosityData transport_poro_data; - StrainData<DisplacementDim> eps_data; - SwellingDataStateful<DisplacementDim> swelling_data; - SolidMechanicsDataStateful<DisplacementDim> s_mech_data; - - static auto reflect() - { - using Self = StatefulData<DisplacementDim>; - - return ProcessLib::Reflection::reflectWithoutName( - &Self::S_L_data, - &Self::poro_data, - &Self::transport_poro_data, - &Self::eps_data, - &Self::swelling_data, - &Self::s_mech_data); - } -}; - -/// Data that is needed for output purposes, but not directly for the assembly. -template <int DisplacementDim> -struct OutputData -{ - DarcyLawData<DisplacementDim> darcy_data; - LiquidDensityData rho_L_data; - LiquidViscosityData mu_L_data; - SolidDensityData rho_S_data; - - static auto reflect() - { - using Self = OutputData<DisplacementDim>; - - return ProcessLib::Reflection::reflectWithoutName(&Self::darcy_data, - &Self::rho_L_data, - &Self::mu_L_data, - &Self::rho_S_data); - } -}; - -/// Data that is needed for the equation system assembly. -template <int DisplacementDim> -struct ConstitutiveData -{ - SwellingDataStateless<DisplacementDim> swelling_data; - SolidMechanicsDataStateless<DisplacementDim> s_mech_data; - GravityData<DisplacementDim> grav_data; - TRMHeatStorageAndFluxData<DisplacementDim> heat_data; - TRMVaporDiffusionData<DisplacementDim> vap_data; - TRMStorageData storage_data; - EqUData<DisplacementDim> eq_u_data; - EqPData<DisplacementDim> eq_p_data; - EqTData<DisplacementDim> eq_T_data; - ThermoOsmosisData<DisplacementDim> th_osmosis_data; -}; - -/// Data that stores intermediate values, which are not needed outside the -/// constitutive setting. -template <int DisplacementDim> -struct ConstitutiveTempData -{ - ElasticTangentStiffnessData<DisplacementDim> C_el_data; - BiotData biot_data; - SolidCompressibilityData solid_compressibility_data; - SaturationDataDeriv dS_L_data; - BishopsData bishops_data; - // TODO why not usual state tracking for that? - BishopsData bishops_data_prev; - SolidThermalExpansionData<DisplacementDim> s_therm_exp_data; - PermeabilityData<DisplacementDim> perm_data; - FluidThermalExpansionData f_therm_exp_data; -}; - -/// Constitutive models used for assembly. -template <int DisplacementDim> -struct ConstitutiveModels -{ - explicit ConstitutiveModels( - ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data, - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material) - : elastic_tangent_stiffness_model(solid_material), - solid_compressibility_model(solid_material), - s_mech_model(solid_material), - grav_model(process_data.specific_body_force), - darcy_model(process_data.specific_body_force), - eq_u_model(process_data.specific_body_force), - eq_p_model(process_data.specific_body_force) - { - } - - ElasticTangentStiffnessModel<DisplacementDim> - elastic_tangent_stiffness_model; - BiotModel biot_model; - SolidCompressibilityModel<DisplacementDim> solid_compressibility_model; - SaturationModel<DisplacementDim> S_L_model; - BishopsModel bishops_model; - PorosityModel<DisplacementDim> poro_model; - SwellingModel<DisplacementDim> swelling_model; - SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model; - SolidMechanicsModel<DisplacementDim> s_mech_model; - LiquidDensityModel<DisplacementDim> rho_L_model; - SolidDensityModel<DisplacementDim> rho_S_model; - GravityModel<DisplacementDim> grav_model; - LiquidViscosityModel<DisplacementDim> mu_L_model; - PermeabilityModel<DisplacementDim> perm_model; - DarcyLawModel<DisplacementDim> darcy_model; - TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model; - TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model; - FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model; - TRMStorageModel<DisplacementDim> storage_model; - EqUModel<DisplacementDim> eq_u_model; - EqPModel<DisplacementDim> eq_p_model; - EqTModel<DisplacementDim> eq_T_model; - ThermoOsmosisModel<DisplacementDim> th_osmosis_model; -}; - -template <int DisplacementDim> -struct ConstitutiveSetting -{ - explicit ConstitutiveSetting( - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& - solid_material, - ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data) - : process_data_(process_data), solid_material_(solid_material) - { - } - - /// Evaluate the constitutive setting. - void eval(ConstitutiveModels<DisplacementDim>& models, double const t, - double const dt, ParameterLib::SpatialPosition const& x_position, - MaterialPropertyLib::Medium& medium, - TemperatureData<DisplacementDim> const& T_data, - CapillaryPressureData<DisplacementDim> const& p_cap_data, - KelvinVector<DisplacementDim> const& eps_arg, - KelvinVector<DisplacementDim> const& eps_prev_arg, - StatefulData<DisplacementDim>& state, - StatefulData<DisplacementDim> const& prev_state, - MaterialStateData<DisplacementDim>& mat_state, - ConstitutiveTempData<DisplacementDim>& tmp, - OutputData<DisplacementDim>& out, - ConstitutiveData<DisplacementDim>& cd); - -private: - ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data_; - MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_; -}; - -extern template struct ConstitutiveSetting<2>; -extern template struct ConstitutiveSetting<3>; -} // namespace ProcessLib::ThermoRichardsMechanics