Commit 517e2853 authored by Timo Koch's avatar Timo Koch
Browse files

Merge branch 'fix/heatpipe-law' into 'master'

[heatpipelaw] Use effective saturation

Closes #998

See merge request !2503
parents cf8eb4dd f9c6f08c
......@@ -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 &params, 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 &params, 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 &params, 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 &params, 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 &params, 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 &params, 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);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment