www.mooseframework.org
RichardsRelPermPowerGas.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 // "PowerGas" form of relative permeability
11 //
13 
15 
16 template <>
17 InputParameters
19 {
20  InputParameters params = validParams<RichardsRelPerm>();
21  params.addRequiredRangeCheckedParam<Real>(
22  "simm",
23  "simm >= 0 & simm < 1",
24  "Immobile saturation. Must be between 0 and 1. Define s = "
25  "(seff - simm)/(1 - simm). Then relperm = 1 - (n+1)(1-s)^n "
26  "+ n(1-s)^(n+1)");
27  params.addRequiredRangeCheckedParam<Real>(
28  "n",
29  "n >= 2",
30  "Exponent. Must be >= 2. Define s = (seff - simm)/(1 - simm). Then "
31  "relperm = 1 - (n+1)(1-s)^n + n(1-s)^(n+1)");
32  params.addClassDescription("Power form of relative permeability that might be useful for gases. "
33  "Define s = (seff - simm)/(1 - simm). Then relperm = 1 - "
34  "(n+1)(1-s)^n + n(1-s)^(n+1) if s<simm, otherwise relperm=1");
35  return params;
36 }
37 
38 RichardsRelPermPowerGas::RichardsRelPermPowerGas(const InputParameters & parameters)
39  : RichardsRelPerm(parameters), _simm(getParam<Real>("simm")), _n(getParam<Real>("n"))
40 {
41 }
42 
43 Real
45 {
46  if (seff >= 1.0)
47  return 1.0;
48 
49  if (seff <= _simm)
50  return 0.0;
51 
52  Real s_internal = (seff - _simm) / (1.0 - _simm);
53  Real krel = 1 - (_n + 1) * std::pow(1 - s_internal, _n) + _n * std::pow(1 - s_internal, _n + 1);
54 
55  // bound, just in case
56  if (krel < 0)
57  {
58  krel = 0;
59  }
60  if (krel > 1)
61  {
62  krel = 1;
63  }
64  return krel;
65 }
66 
67 Real
69 {
70  if (seff >= 1.0)
71  return 0.0;
72 
73  if (seff <= _simm)
74  return 0.0;
75 
76  Real s_internal = (seff - _simm) / (1.0 - _simm);
77  Real krelp = (_n + 1) * _n * std::pow(1 - s_internal, _n - 1) -
78  _n * (_n + 1) * std::pow(1 - s_internal, _n);
79  return krelp / (1.0 - _simm);
80 }
81 
82 Real
84 {
85  if (seff >= 1.0)
86  return 0.0;
87 
88  if (seff <= _simm)
89  return 0.0;
90 
91  Real s_internal = (seff - _simm) / (1.0 - _simm);
92  Real krelpp = -(_n + 1) * _n * (_n - 1) * std::pow(1 - s_internal, _n - 2) +
93  _n * (_n + 1) * _n * std::pow(1 - s_internal, _n - 1);
94  return krelpp / std::pow(1.0 - _simm, 2);
95 }
RichardsRelPerm
Base class for Richards relative permeability classes that provide relative permeability as a functio...
Definition: RichardsRelPerm.h:23
RichardsRelPermPowerGas::drelperm
Real drelperm(Real seff) const
Derivative of relative permeability wrt seff.
Definition: RichardsRelPermPowerGas.C:68
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
RichardsRelPermPowerGas.h
RichardsRelPermPowerGas::relperm
Real relperm(Real seff) const
Relative permeability.
Definition: RichardsRelPermPowerGas.C:44
RichardsRelPermPowerGas::d2relperm
Real d2relperm(Real seff) const
Second derivative of relative permeability wrt seff.
Definition: RichardsRelPermPowerGas.C:83
registerMooseObject
registerMooseObject("RichardsApp", RichardsRelPermPowerGas)
validParams< RichardsRelPermPowerGas >
InputParameters validParams< RichardsRelPermPowerGas >()
Definition: RichardsRelPermPowerGas.C:18
RichardsRelPermPowerGas::_simm
Real _simm
immobile saturation
Definition: RichardsRelPermPowerGas.h:49
RichardsRelPermPowerGas
PowerGas form of relative permeability Define s = (seff - simm)/(1 - simm).
Definition: RichardsRelPermPowerGas.h:24
validParams< RichardsRelPerm >
InputParameters validParams< RichardsRelPerm >()
Definition: RichardsRelPerm.C:16
RichardsRelPermPowerGas::RichardsRelPermPowerGas
RichardsRelPermPowerGas(const InputParameters &parameters)
Definition: RichardsRelPermPowerGas.C:38
RichardsRelPermPowerGas::_n
Real _n
exponent
Definition: RichardsRelPermPowerGas.h:52