diff --git a/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh b/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh index 001ea496d4bde1b20ebdef9cda0bdab868f6620c..cb27f4ae5b7a5445779a57ff8bd482eb43445332 100644 --- a/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh +++ b/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh @@ -25,150 +25,6 @@ #ifndef DUMUX_MATERIAL_FLUIDMATRIX_TWOP_HEATPIPELAW_HH #define DUMUX_MATERIAL_FLUIDMATRIX_TWOP_HEATPIPELAW_HH -// remove from here after release 3.3 ///////////// -#include "heatpipelawparams.hh" - -#include <dumux/common/spline.hh> - -#include <algorithm> - -#include <math.h> -#include <assert.h> - -namespace Dumux { - -/*! - * \ingroup Fluidmatrixinteractions - * \brief Implementation of the capillary pressure <-> saturation - * relation for the heatpipe problem. - * - * This class bundles the "raw" curves as static members and doesn't concern itself - * converting absolute to effective saturations and vince versa. - */ -template <class ScalarT, class ParamsT = HeatPipeLawParams<ScalarT> > -class [[deprecated("Use new material laws and FluidMatrix::HeatPipeLaw instead!")]] HeatPipeLaw -{ -public: - using Params = ParamsT; - using Scalar = typename Params::Scalar; - - /*! - * \brief The capillary pressure-saturation curve. - * - * \param params Array of parameters asd - * \param Sw Effective saturation of of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$ - */ - static Scalar pc(const Params ¶ms, Scalar Sw) - { - Scalar Sn = 1 - Sw; - Scalar p0Gamma = params.p0()*params.gamma(); - - // regularization - if (Sn >= 1.0) { - Scalar y = p0Gamma*( (1.263*1.0 - 2.120)*1.0 + 1.417)*1.0; - Scalar m = p0Gamma*((3*1.263*1.0 - 2*2.120)*1.0 + 1.417); - return (Sn - 1)*m + y; - } - else if (Sn <= 0.0) { - Scalar y = 0.0; - Scalar m = p0Gamma*1.417; - return Sn*m + y; - } - - return p0Gamma*((1.263*Sn - 2.120)*Sn + 1.417) * Sn; - } - - /*! - * \brief The saturation-capillary pressure curve. - * - * \return The effective saturaion of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$ - * \param params Array of parameters - * \param pC Capillary pressure \f$\mathrm{[p_C]}\f$ in \f$\mathrm{[Pa]}\f$. - */ - static Scalar Sw(const Params ¶ms, Scalar pC) - { - DUNE_THROW(Dune::NotImplemented, "HeatPipeLaw::Sw"); - } - - /*! - * \brief Returns the partial derivative of the capillary - * pressure to the effective saturation. - * \param params Array of parameters - * \param Sw Effective saturation of of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$ - */ - static Scalar dpC_dSw(const Params ¶ms, Scalar Sw) - { - Scalar Sn = 1 - Sw; - Scalar p0Gamma = params.p0()*params.gamma(); - if (Sn > 1.0) - Sn = 1.0; - else if (Sn <= 0.0) { - Scalar m = -p0Gamma*1.417; - return m; - } - - Scalar m = - p0Gamma*((3*1.263*Sn - 2*2.120)*Sn + 1.417); - return m; - } - - /*! - * \brief Returns the partial derivative of the effective - * saturation to the capillary pressure. - * \param params Array of parameters - * \param pC Capillary pressure \f$\mathrm{[p_C]}\f$ in \f$\mathrm{[Pa]}\f$. - */ - static Scalar dSw_dpC(const Params ¶ms, Scalar pC) - { - DUNE_THROW(Dune::NotImplemented, "HeatPipeLaw::dSw_dpC"); - } - - /*! - * \brief The relative permeability for the wetting phase. - * - * \param params Array of parameters - * \param Sw The mobile saturation of the wetting phase. - */ - static Scalar krw(const Params ¶ms, Scalar Sw) - { - return kr_(Sw); - } - - /*! - * \brief The relative permeability for the nonwetting phase. - * - * \param params Array of parameters - * \param Sw The mobile saturation of the wetting phase. - */ - static Scalar krn(const Params ¶ms, Scalar Sw) - { - Scalar Sn = 1 - Sw; - return kr_(Sn); - } - -private: - static Scalar kr_(Scalar S) - { - const Scalar eps = 0.95; - if (S >= 1) - return 1; - else if (S <= 0) - return 0; - else if (S > eps) { - // regularize - using Spline = Dumux::Spline<Scalar>; - Spline sp(eps, 1.0, // x1, x2 - eps*eps*eps, 1, // y1, y2 - 3*eps*eps, 0); // m1, m2 - return sp.eval(S); - } - - return S*S*S; - } -}; - -} // end namespace Dumux -// remove until here after release 3.3 ///////////// - #include <cmath> #include <algorithm> @@ -274,11 +130,11 @@ public: /*! * \brief The capillary pressure-saturation curve. * - * \param swe Effective saturation of the wetting phase \f$\mathrm{\overline{S}_w}\f$ + * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$ */ - template<class Scalar> - Scalar pc(Scalar swe) const + Scalar pc(const Scalar sw) const { + const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_); const Scalar sne = 1 - swe; const Scalar p0Gamma = params_.p0()*params_.gamma(); @@ -298,7 +154,6 @@ public: /*! * \brief The capillary pressure at Swe = 1.0 also called end point capillary pressure */ - template<class Scalar> Scalar endPointPc() const { return 0.0; } @@ -306,30 +161,30 @@ public: * \brief The partial derivative of the capillary * pressure w.r.t. the effective saturation. * - * \param swe Effective saturation of the wetting phase \f$\mathrm{\overline{S}_w}\f$ + * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$ */ - template<class Scalar> - Scalar dpc_dswe(Scalar swe) const + Scalar dpc_dsw(const Scalar sw) const { + const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_); const Scalar sne = 1 - swe; const Scalar p0Gamma = params_.p0()*params_.gamma(); if (sne > 1.0) sne = 1.0; else if (sne <= 0.0) - return -p0Gamma*1.417; + return -p0Gamma*1.417*EffToAbs::dswe_dsw(effToAbsParams_); else - return - p0Gamma*((3*1.263*sne - 2*2.120)*sne + 1.417); + return - p0Gamma*((3*1.263*sne - 2*2.120)*sne + 1.417)*EffToAbs::dswe_dsw(effToAbsParams_); } /*! * \brief The relative permeability for the wetting phase of * the medium. * - * \param swe The mobile saturation of the wetting phase. + * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$ */ - template<class Scalar> - Scalar krw(Scalar swe) const + Scalar krw(const Scalar sw) const { + const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_); return kr_(swe); } @@ -337,11 +192,11 @@ public: * \brief The relative permeability for the non-wetting phase * of the medium. * - * \param swe The mobile saturation of the wetting phase. + * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$ */ - template<class Scalar> - Scalar krn(Scalar swe) const + Scalar krn(const Scalar sw) const { + const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_); const Scalar sne = 1 - swe; // TODO does this make sense? return kr_(sne); }