3.3.0
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Public Types | Static Public Member Functions | List of all members
Dumux::RegularizedBrooksCorey< ScalarT, ParamsT > Class Template Reference

Implementation of the regularized Brooks-Corey capillary pressure / relative permeability <-> saturation relation. This class bundles the "raw" curves as static members and doesn't concern itself converting absolute to effective saturations and vice versa. More...

#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh>

Description

template<class ScalarT, class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
class Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >

Implementation of the regularized Brooks-Corey capillary pressure / relative permeability <-> saturation relation. This class bundles the "raw" curves as static members and doesn't concern itself converting absolute to effective saturations and vice versa.

In order to avoid very steep gradients the marginal values are "regularized". This means that in stead of following the curve of the material law in these regions, some linear approximation is used. Doing this is not worse than following the material law. E.g. for very low wetting phase values the material laws predict infinite values for \(\mathrm{p_c}\) which is completely unphysical. In case of very high wetting phase saturations the difference between regularized and "pure" material law is not big.

Regularizing has the additional benefit of being numerically friendly: Newton's method does not like infinite gradients.

The implementation is accomplished as follows:

See also
BrooksCorey

Public Types

using Params = ParamsT
 
using Scalar = typename Params::Scalar
 

Static Public Member Functions

static Scalar pc (const Params &params, Scalar swe)
 A regularized Brooks-Corey capillary pressure-saturation curve. More...
 
static Scalar sw (const Params &params, Scalar pc)
 A regularized Brooks-Corey saturation-capillary pressure curve. More...
 
static Scalar endPointPc (const Params &params)
 The capillary pressure at Swe = 1.0 also called end point capillary pressure. More...
 
static Scalar dpc_dswe (const Params &params, Scalar swe)
 A regularized version of the partial derivative of the \(\mathrm{p_c(\overline{S}_w)}\) w.r.t. effective saturation according to Brooks & Corey. More...
 
static Scalar dswe_dpc (const Params &params, Scalar pc)
 A regularized version of the partial derivative of the \(\mathrm{\overline{S}_w(p_c)}\) w.r.t. cap.pressure according to Brooks & Corey. More...
 
static Scalar krw (const Params &params, Scalar swe)
 Regularized version of the relative permeability for the wetting phase of the medium implied by the Brooks-Corey parameterization. More...
 
static Scalar dkrw_dswe (const Params &params, Scalar swe)
 A regularized version of the derivative of the relative permeability for the wetting phase in regard to the wetting saturation of the medium implied by the Brooks-Corey parameterization. More...
 
static Scalar krn (const Params &params, Scalar swe)
 Regularized version of the relative permeability for the nonwetting phase of the medium implied by the Brooks-Corey parameterization. More...
 
static Scalar dkrn_dswe (const Params &params, Scalar swe)
 A regularized version of the derivative of the relative permeability for the nonwetting phase in regard to the wetting saturation of the medium as implied by the Brooks-Corey parameterization. More...
 

Member Typedef Documentation

◆ Params

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
using Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::Params = ParamsT

◆ Scalar

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
using Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::Scalar = typename Params::Scalar

Member Function Documentation

◆ dkrn_dswe()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::dkrn_dswe ( const Params params,
Scalar  swe 
)
inlinestatic

A regularized version of the derivative of the relative permeability for the nonwetting phase in regard to the wetting saturation of the medium as implied by the Brooks-Corey parameterization.

Parameters
sweThe mobile saturation of the wetting phase.
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Derivative of the relative permeability of the nonwetting phase w.r.t. effective wetting phase saturation calculated as implied by Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ dkrw_dswe()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::dkrw_dswe ( const Params params,
Scalar  swe 
)
inlinestatic

A regularized version of the derivative of the relative permeability for the wetting phase in regard to the wetting saturation of the medium implied by the Brooks-Corey parameterization.

Parameters
sweThe mobile saturation of the wetting phase.
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Derivative of the relative permeability of the wetting phase w.r.t. effective wetting phase saturation calculated as implied by Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ dpc_dswe()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::dpc_dswe ( const Params params,
Scalar  swe 
)
inlinestatic

A regularized version of the partial derivative of the \(\mathrm{p_c(\overline{S}_w)}\) w.r.t. effective saturation according to Brooks & Corey.

regularized part:

  • low saturation: use the slope of the regularization point (i.e. no kink).
  • high saturation: connect the high regularization point with \(\mathrm{\overline{S}_w =1}\) by a straight line and use that slope (yes, there is a kink :-( ).

For the non-regularized part:

This is equivalent to \(\mathrm{\frac{\partial p_C}{\partial \overline{S}_w} = -\frac{p_e}{\lambda} \overline{S}_w^{-1/\lambda - 1} }\)

Parameters
sweEffective saturation of the wetting phase \(\mathrm{[\overline{S}_w]}\)
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Partial derivative of \(\mathrm{[p_c]}\) w.r.t. effective saturation according to Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ dswe_dpc()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::dswe_dpc ( const Params params,
Scalar  pc 
)
inlinestatic

A regularized version of the partial derivative of the \(\mathrm{\overline{S}_w(p_c)}\) w.r.t. cap.pressure according to Brooks & Corey.

regularized part:

  • low saturation: use the slope of the regularization point (i.e. no kink).
  • high saturation: connect the high regularization point with \(\mathrm{\overline{S}_w =1}\) by a straight line and use that slope (yes, there is a kink :-( ).

For the non-regularized part:

Parameters
pcCapillary pressure \(\mathrm{[p_c]}\) in \(\mathrm{[Pa]}\).
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Partial derivative of effective saturation w.r.t. \(\mathrm{[p_c]}\) according to Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ endPointPc()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::endPointPc ( const Params params)
inlinestatic

The capillary pressure at Swe = 1.0 also called end point capillary pressure.

Parameters
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.

◆ krn()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::krn ( const Params params,
Scalar  swe 
)
inlinestatic

Regularized version of the relative permeability for the nonwetting phase of the medium implied by the Brooks-Corey parameterization.

regularized part:

  • below \(\mathrm{\overline{S}_w =0}\): set relative permeability to zero
  • above \(\mathrm{\overline{S}_w =1}\): set relative permeability to one
  • for \(\mathrm{0 \leq \overline{S}_w \leq 0.05}\): use a spline as interpolation
Parameters
sweThe mobile saturation of the wetting phase.
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Relative permeability of the nonwetting phase calculated as implied by Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ krw()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::krw ( const Params params,
Scalar  swe 
)
inlinestatic

Regularized version of the relative permeability for the wetting phase of the medium implied by the Brooks-Corey parameterization.

regularized part:

  • below \(\mathrm{\overline{S}_w =0}\): set relative permeability to zero
  • above \(\mathrm{\overline{S}_w =1}\): set relative permeability to one
  • between \(\mathrm{ 0.95 \leq \overline{S}_w \leq 1}\): use a spline as interpolation

For not-regularized part:

Parameters
sweThe mobile saturation of the wetting phase.
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Relative permeability of the wetting phase calculated as implied by Brooks & Corey.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ pc()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::pc ( const Params params,
Scalar  swe 
)
inlinestatic

A regularized Brooks-Corey capillary pressure-saturation curve.

regularized part:

  • low saturation: extend the \(\mathrm{p_c(S_w)}\) curve with the slope at the regularization point (i.e. no kink).
  • high saturation: connect the high regularization point with \(\mathrm{\overline{S}_w =1}\) by a straight line (yes, there is a kink :-( ).

For the non-regularized part:

The Brooks-Corey empirical capillary pressure <-> saturation function is given by

\(\mathrm{ p_C = p_e\overline{S}_w^{-1/\lambda} }\)

Parameters
sweEffective saturation of the wetting phase \(\mathrm{[\overline{S}_w]}\)
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Capillary pressure calculated by Brooks & Corey constitutive relation.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

◆ sw()

template<class ScalarT , class ParamsT = RegularizedBrooksCoreyParams<ScalarT>>
static Scalar Dumux::RegularizedBrooksCorey< ScalarT, ParamsT >::sw ( const Params params,
Scalar  pc 
)
inlinestatic

A regularized Brooks-Corey saturation-capillary pressure curve.

regularized part:

  • low saturation: extend the \(\mathrm{p_c(S_w)}\) curve with the slope at the regularization point (i.e. no kink).
  • high saturation: connect the high regularization point with \(\mathrm{\overline{S}_w =1}\) by a straight line (yes, there is a kink :-( ).

The according quantities are obtained by exploiting theorem of intersecting lines.

For the non-regularized part:

This is the inverse of the capillary pressure-saturation curve: \(\mathrm{ \overline{S}_w = (\frac{p_C}{p_e})^{-\lambda}}\)

Parameters
pcCapillary pressure \(\mathrm{[p_C]}\) in \(\mathrm{[Pa]}\).
paramsA container object that is populated with the appropriate coefficients for the respective law. Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container is constructed accordingly. Afterwards the values are set there, too.
Returns
Effective wetting phase saturation calculated as inverse of BrooksCorey constitutive relation.
Note
Instead of undefined behaviour if pc is not in the valid range, we return a valid number, by clamping the input.

The documentation for this class was generated from the following file: