diff --git a/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_maximal_porosity.md b/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_maximal_porosity.md new file mode 100644 index 0000000000000000000000000000000000000000..f6543731b8947c9591c90fe505b4466445c56097 --- /dev/null +++ b/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_maximal_porosity.md @@ -0,0 +1 @@ +\copydoc MaterialPropertyLib::PorosityFromMassBalance::_phi_max diff --git a/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_minimal_porosity.md b/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_minimal_porosity.md new file mode 100644 index 0000000000000000000000000000000000000000..03eb4483676972e2c6edcb225a8d68ebdda198ba --- /dev/null +++ b/Documentation/ProjectFile/properties/property/PorosityFromMassBalance/t_minimal_porosity.md @@ -0,0 +1 @@ +\copydoc MaterialPropertyLib::PorosityFromMassBalance::_phi_min diff --git a/MaterialLib/MPL/Properties/CreatePorosityFromMassBalance.cpp b/MaterialLib/MPL/Properties/CreatePorosityFromMassBalance.cpp index 529eb77f8f1937ba76d8ee45c53052b4cf438791..443a2778b9ef86f2580f42176321daa32c0cf865 100644 --- a/MaterialLib/MPL/Properties/CreatePorosityFromMassBalance.cpp +++ b/MaterialLib/MPL/Properties/CreatePorosityFromMassBalance.cpp @@ -29,6 +29,13 @@ std::unique_ptr<PorosityFromMassBalance> createPorosityFromMassBalance( auto const& initial_porosity = ParameterLib::findParameter<double>( parameter_name, parameters, 0, nullptr); - return std::make_unique<PorosityFromMassBalance>(initial_porosity); + //! \ogs_file_param{properties__property__PorosityFromMassBalance__minimal_porosity} + auto const& phi_min = config.getConfigParameter<double>("minimal_porosity"); + + //! \ogs_file_param{properties__property__PorosityFromMassBalance__maximal_porosity} + auto const& phi_max = config.getConfigParameter<double>("maximal_porosity"); + + return std::make_unique<PorosityFromMassBalance>( + initial_porosity, phi_min, phi_max); } } // namespace MaterialPropertyLib diff --git a/MaterialLib/MPL/Properties/PorosityFromMassBalance.cpp b/MaterialLib/MPL/Properties/PorosityFromMassBalance.cpp index 93fb827453c72ceb7ccbdcd53fa2be13ca30c278..d6889fdb435ca955389b7fc283cd06c4f65f4d44 100644 --- a/MaterialLib/MPL/Properties/PorosityFromMassBalance.cpp +++ b/MaterialLib/MPL/Properties/PorosityFromMassBalance.cpp @@ -59,7 +59,7 @@ PropertyDataType PorosityFromMassBalance::value( variable_array[static_cast<int>(Variable::porosity)]); double const w = dt * (e_dot + p_eff_dot / K_SR); - return std::clamp((phi + alpha_b * w) / (1 + w), 0., 1.); + return std::clamp((phi + alpha_b * w) / (1 + w), _phi_min, _phi_max); } PropertyDataType PorosityFromMassBalance::dValue( diff --git a/MaterialLib/MPL/Properties/PorosityFromMassBalance.h b/MaterialLib/MPL/Properties/PorosityFromMassBalance.h index dd82789b9bd6f5eccea050d8149e5add9935fae9..7ca7a9e52db4513a980498119817a9e4586e4fbf 100644 --- a/MaterialLib/MPL/Properties/PorosityFromMassBalance.h +++ b/MaterialLib/MPL/Properties/PorosityFromMassBalance.h @@ -29,11 +29,14 @@ private: /// Parameter, which is used by FEM to set the initial porosity value. ParameterLib::Parameter<double> const& _phi0; + double const _phi_min; //< Lower limit for the porosity. + double const _phi_max; //< Upper limit for the porosity. public: PorosityFromMassBalance( - ParameterLib::Parameter<double> const& initial_porosity) - : _phi0(initial_porosity) + ParameterLib::Parameter<double> const& initial_porosity, + double const phi_min, double const phi_max) + : _phi0(initial_porosity), _phi_min(phi_min), _phi_max(phi_max) { } diff --git a/Tests/Data/RichardsMechanics/deformation_dependent_porosity.prj b/Tests/Data/RichardsMechanics/deformation_dependent_porosity.prj index dc3542198dbcfec4667d4399d2cadd2092fb9219..b693dd615cee36f0fab5ef8e0a42077d03434589 100644 --- a/Tests/Data/RichardsMechanics/deformation_dependent_porosity.prj +++ b/Tests/Data/RichardsMechanics/deformation_dependent_porosity.prj @@ -79,6 +79,8 @@ <name>porosity</name> <type>PorosityFromMassBalance</type> <initial_porosity>phi0</initial_porosity> + <minimal_porosity>0</minimal_porosity> + <maximal_porosity>1</maximal_porosity> </property> <property> <name>permeability</name> diff --git a/Tests/Data/RichardsMechanics/orthotropic_power_law_permeability_xyz.prj b/Tests/Data/RichardsMechanics/orthotropic_power_law_permeability_xyz.prj index b131f794c34370117e6374dc82fa8f47f7397203..dfd08e80cc8f6acf246cf572a0f02a3c254dcea6 100644 --- a/Tests/Data/RichardsMechanics/orthotropic_power_law_permeability_xyz.prj +++ b/Tests/Data/RichardsMechanics/orthotropic_power_law_permeability_xyz.prj @@ -77,6 +77,8 @@ <name>porosity</name> <type>PorosityFromMassBalance</type> <initial_porosity>phi0</initial_porosity> + <minimal_porosity>0</minimal_porosity> + <maximal_porosity>1</maximal_porosity> </property> <property> <name>permeability</name>