https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Functions
PorousFlowBrooksCorey Namespace Reference

Brooks-Corey effective saturation, capillary pressure and relative permeability functions. More...

Functions

Real effectiveSaturation (Real pc, Real pe, Real lambda)
 Effective saturation as a function of capillary pressure Note: seff = 1 for p >= 0.
 
Real dEffectiveSaturation (Real pc, Real pe, Real lambda)
 Derivative of effective saturation wrt porepressure.
 
Real d2EffectiveSaturation (Real pc, Real pe, Real lambda)
 Second derivative of effective saturation wrt porepressure.
 
Real capillaryPressure (Real seff, Real pe, Real lambda, Real pc_max)
 Capillary pressure as a function of effective saturation.
 
Real dCapillaryPressure (Real seff, Real pe, Real lambda, Real pc_max)
 Derivative of capillary pressure wrt effective saturation.
 
Real d2CapillaryPressure (Real seff, Real pe, Real lambda, Real pc_max)
 Second derivative of capillary pressure wrt effective saturation.
 
template<typename T >
T relativePermeabilityW (const T &seff, Real lambda)
 Relative permeability of the wetting phase as a function of effective saturation.
 
Real dRelativePermeabilityW (Real seff, Real lambda)
 Derivative of relative permeability of the wetting phase wrt to effective saturation.
 
template<typename T >
T relativePermeabilityNW (const T &seff, Real lambda)
 Relative permeability of the non-wetting phase as a function of effective saturation.
 
Real dRelativePermeabilityNW (Real seff, Real lambda)
 Derivative of relative permeability of the non-wetting phase wrt to effective saturation.
 

Detailed Description

Brooks-Corey effective saturation, capillary pressure and relative permeability functions.

Note: capillary pressure and relative permeability are functions of effective saturation. The derivatives are therefore given wrt effective saturation. These derivatives must be multiplied by the derivative of effective saturation wrt the true saturation in objects using these relations.

From Brooks, R. H. and A. T. Corey (1966), Properties of porous media affecting fluid flow, J. Irrig. Drain. Div., 92, 61-88

Function Documentation

◆ capillaryPressure()

Real PorousFlowBrooksCorey::capillaryPressure ( Real  seff,
Real  pe,
Real  lambda,
Real  pc_max 
)

Capillary pressure as a function of effective saturation.

Parameters
seffeffective saturation
pethreshold entry pressure
lambdaBrooks-Corey exponent
pc_maxmaximum capillary pressure (Pa)
Returns
capillary pressure (Pa)

Definition at line 42 of file PorousFlowBrooksCorey.C.

43{
44 if (seff >= 1.0)
45 return pe;
46 else if (seff <= 0.0)
47 return pc_max;
48 else
49 return std::min(pe * std::pow(seff, -1.0 / lambda), pc_max);
50}

Referenced by PorousFlowCapillaryPressureBC::capillaryPressureCurve(), d2CapillaryPressure(), dCapillaryPressure(), TEST(), and TEST().

◆ d2CapillaryPressure()

Real PorousFlowBrooksCorey::d2CapillaryPressure ( Real  seff,
Real  pe,
Real  lambda,
Real  pc_max 
)

Second derivative of capillary pressure wrt effective saturation.

Parameters
seffeffective saturation
pethreshold entry pressure
lambdaBrooks-Corey exponent
pc_maxmaximum capillary pressure (Pa)
Returns
second derivative of capillary pressure wrt effective saturation

Definition at line 68 of file PorousFlowBrooksCorey.C.

69{
70 if (seff <= 0.0 || seff > 1.0)
71 return 0.0;
72 else
73 {
74 // Return 0 if pc > pc_max
75 if (capillaryPressure(seff, pe, lambda, pc_max) >= pc_max)
76 return 0.0;
77 else
78 return (lambda + 1.0) * pe * std::pow(seff, -1.0 / lambda - 2.0) / lambda / lambda;
79 }
80}
Real capillaryPressure(Real seff, Real pe, Real lambda, Real pc_max)
Capillary pressure as a function of effective saturation.

Referenced by PorousFlowCapillaryPressureBC::d2CapillaryPressureCurve(), and TEST().

◆ d2EffectiveSaturation()

Real PorousFlowBrooksCorey::d2EffectiveSaturation ( Real  pc,
Real  pe,
Real  lambda 
)

Second derivative of effective saturation wrt porepressure.

Parameters
pccapillary pressure
pethreshold entry pressure
lambdaBrooks-Corey exponent
Returns
second derivative of effective saturation wrt porepressure

Definition at line 33 of file PorousFlowBrooksCorey.C.

34{
35 if (pc < pe)
36 return 0.0;
37 else
38 return lambda * (lambda + 1.0) * std::pow(pc / pe, -lambda - 2.0) / pe / pe;
39}

Referenced by PorousFlowCapillaryPressureBC::d2EffectiveSaturation(), and TEST().

◆ dCapillaryPressure()

Real PorousFlowBrooksCorey::dCapillaryPressure ( Real  seff,
Real  pe,
Real  lambda,
Real  pc_max 
)

Derivative of capillary pressure wrt effective saturation.

Parameters
seffeffective saturation
pethreshold entry pressure
lambdaBrooks-Corey exponent
pc_maxmaximum capillary pressure (Pa)
Returns
derivative of capillary pressure wrt effective saturation

Definition at line 53 of file PorousFlowBrooksCorey.C.

54{
55 if (seff <= 0.0 || seff > 1.0)
56 return 0.0;
57 else
58 {
59 // Return 0 if pc > pc_max
60 if (capillaryPressure(seff, pe, lambda, pc_max) >= pc_max)
61 return 0.0;
62 else
63 return -pe * std::pow(seff, -1.0 / lambda - 1.0) / lambda;
64 }
65}

Referenced by PorousFlowCapillaryPressureBC::dCapillaryPressureCurve(), TEST(), and TEST().

◆ dEffectiveSaturation()

Real PorousFlowBrooksCorey::dEffectiveSaturation ( Real  pc,
Real  pe,
Real  lambda 
)

Derivative of effective saturation wrt porepressure.

Parameters
pccapillary pressure
pethreshold entry pressure
lambdaBrooks-Corey exponent
Returns
derivative of effective saturation wrt porepressure

Definition at line 24 of file PorousFlowBrooksCorey.C.

25{
26 if (pc < pe)
27 return 0.0;
28 else
29 return -lambda * std::pow(pc / pe, -lambda - 1.0) / pe;
30}

Referenced by PorousFlowCapillaryPressureBC::dEffectiveSaturation(), TEST(), and TEST().

◆ dRelativePermeabilityNW()

Real PorousFlowBrooksCorey::dRelativePermeabilityNW ( Real  seff,
Real  lambda 
)

Derivative of relative permeability of the non-wetting phase wrt to effective saturation.

Parameters
seffeffective saturation
lambdaBrooks-Corey exponent
Returns
derivative of relative permeability wrt effective saturation

Definition at line 93 of file PorousFlowBrooksCorey.C.

94{
95 // Guard against division by zero
96 if (seff <= 0.0 || seff >= 1.0)
97 return 0.0;
98
99 return seff * (2.0 + (seff * (2.0 + 3.0 * lambda) - 2.0 * lambda) *
100 std::pow(1.0 - seff, 2.0 / lambda) / lambda);
101}

Referenced by PorousFlowRelativePermeabilityBCTempl< is_ad >::dRelativePermeability(), TEST(), and TEST().

◆ dRelativePermeabilityW()

Real PorousFlowBrooksCorey::dRelativePermeabilityW ( Real  seff,
Real  lambda 
)

Derivative of relative permeability of the wetting phase wrt to effective saturation.

Parameters
seffeffective saturation
lambdaBrooks-Corey exponent
Returns
derivative of relative permeability wrt effective saturation

Definition at line 83 of file PorousFlowBrooksCorey.C.

84{
85 // Guard against division by zero
86 if (seff <= 0.0 || seff >= 1.0)
87 return 0.0;
88
89 return (2.0 + 3.0 * lambda) * std::pow(seff, (2.0 + 2.0 * lambda) / lambda) / lambda;
90}

Referenced by PorousFlowRelativePermeabilityBCTempl< is_ad >::dRelativePermeability(), TEST(), and TEST().

◆ effectiveSaturation()

Real PorousFlowBrooksCorey::effectiveSaturation ( Real  pc,
Real  pe,
Real  lambda 
)

Effective saturation as a function of capillary pressure Note: seff = 1 for p >= 0.

Parameters
pccapillary pressure
pethreshold entry pressure
lambdaBrooks-Corey exponent
Returns
effective saturation

Definition at line 15 of file PorousFlowBrooksCorey.C.

16{
17 if (pc < pe)
18 return 1.0;
19 else
20 return std::pow(pc / pe, -lambda);
21}

Referenced by PorousFlowCapillaryPressureBC::effectiveSaturation(), TEST(), and TEST().

◆ relativePermeabilityNW()

template<typename T >
T PorousFlowBrooksCorey::relativePermeabilityNW ( const T seff,
Real  lambda 
)

Relative permeability of the non-wetting phase as a function of effective saturation.

Parameters
seffeffective saturation
lambdaBrooks-Corey exponent
Returns
relative permeability

Definition at line 125 of file PorousFlowBrooksCorey.h.

126{
127 if (MetaPhysicL::raw_value(seff) <= 0.0)
128 return 0.0;
129 else if (MetaPhysicL::raw_value(seff) >= 1.0)
130 return 1.0;
131
132 using std::pow;
133 return seff * seff * (1.0 - pow(1.0 - seff, (2.0 + lambda) / lambda));
134}
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
auto raw_value(const Eigen::Map< T > &in)

Referenced by PorousFlowRelativePermeabilityBCTempl< is_ad >::relativePermeability(), TEST(), TEST(), and TEST().

◆ relativePermeabilityW()

template<typename T >
T PorousFlowBrooksCorey::relativePermeabilityW ( const T seff,
Real  lambda 
)

Relative permeability of the wetting phase as a function of effective saturation.

Parameters
seffeffective saturation
lambdaBrooks-Corey exponent
Returns
relative permeability

Definition at line 98 of file PorousFlowBrooksCorey.h.

99{
100 if (MetaPhysicL::raw_value(seff) <= 0.0)
101 return 0.0;
102 else if (MetaPhysicL::raw_value(seff) >= 1.0)
103 return 1.0;
104
105 using std::pow;
106 return pow(seff, (2.0 + 3.0 * lambda) / lambda);
107}

Referenced by PorousFlowRelativePermeabilityBCTempl< is_ad >::relativePermeability(), TEST(), TEST(), and TEST().