Brooks-Corey
On this page
Summary
The Brooks-Corey relative permeability relations compute Water relative permeability and Oil relative permeability from a normalized saturation, Normalized mobile water saturation, and one shape parameter, the Brooks-Corey pore size distribution index, that describes the pore size distribution. They are the same distribution that sets the shape of the capillary pressure curve, so one parameter can describe both. Use them where the pore size distribution index is known from capillary pressure data, or as a smooth, physically based starting curve.
Inputs and outputs
| Item | Units | |
|---|---|---|
| Input | Water saturation | v/v |
| Input | Irreducible water saturation | v/v |
| Input | Residual oil saturation | v/v |
| Input | Brooks-Corey pore size distribution index | dimensionless |
| Input | Water relative permeability endpoint | dimensionless |
| Input | Oil relative permeability endpoint | dimensionless |
| Output | Normalized mobile water saturation | v/v |
| Output | Water relative permeability | dimensionless |
| Output | Oil relative permeability | dimensionless |
Equations
The saturation is normalized between irreducible water and residual oil:
limited to the interval 0 to 1. The result is 0 at \(\Sw = \Swirr\) and 1 at \(\Sw = 1 - \Sor\). If \(\Swirr + \Sor \ge 1\), the mobile window has collapsed and the curve is undefined.
For a water-wet rock the water is the wetting phase and the oil the non-wetting phase. With the Burdine form of Brooks and Corey:
Limits. At \(\SeNorm = 0\) the water does not flow, \(\krWat = 0\), and the oil is at its endpoint, \(\krOil = \krOilEnd\). At \(\SeNorm = 1\) the oil does not flow, \(\krOil = 0\), and the water is at its endpoint, \(\krWat = \krWatEnd\). Both curves are monotonic: water rises and oil falls with \(\Sw\).
Link to capillary pressure. The same index describes the Brooks-Corey capillary pressure curve \(P_c = P_e\,S_{e}^{-1/\lambda}\), so a fit of the J-function exponent \(b_J\) gives \(\lambda = -1/b_J\) (see Permeability, RQI and FZI).
| Symbol | Variable | Units | Typical range |
|---|---|---|---|
| \(S_w\) | Water saturation | v/v | 0 to 1 |
| \(S_{wirr}\) | Irreducible water saturation | v/v | 0.05 to 0.5 |
| \(S_{or}\) | Residual oil saturation | v/v | 0.1 to 0.4 |
| \(S_e\) | Normalized mobile water saturation | v/v | 0 to 1 |
| \(\lambda\) | Brooks-Corey pore size distribution index | dimensionless | 0.5 to 4 |
| \(k_{rw}^0\) | Water relative permeability endpoint | dimensionless | 0.05 to 1 |
| \(k_{ro}^0\) | Oil relative permeability endpoint | dimensionless | 0.3 to 1 |
| \(k_{rw}\) | Water relative permeability | dimensionless | 0 to 1 |
| \(k_{ro}\) | Oil relative permeability | dimensionless | 0 to 1 |
Single-value calculator
Behavior
Both curves are smooth and meet the endpoints exactly: water kr is zero at Swirr and 0.30 at 1 - Sor, and oil kr is 1 at Swirr and zero at 1 - Sor. A larger \(\lambda\), which means a narrower pore size distribution, raises the water curve and lowers the oil curve in the middle of the range. The water exponent \((2 + 3\lambda)/\lambda\) is 5, 4 and 3.5 for \(\lambda\) of 1, 2 and 4. At a water saturation of 0.50 (a normalized saturation of 0.545), water kr is 0.0145, 0.0266 and 0.0360 for \(\lambda\) of 1, 2 and 4, and oil kr is 0.173, 0.145 and 0.123. The water curve stays below 0.1 until the normalized saturation reaches about 0.73, 0.76 and 0.80 for \(\lambda\) of 4, 2 and 1. The whole curve is moved by the endpoints, which are inputs and not outputs of the model.
Parameter guidance
Pore size distribution index. Take \(\lambda\) from the slope of the capillary pressure curve on a log-log plot of pressure against normalized saturation (it is the negative inverse of the slope), or from the saturation-height fit. Measured values vary from below 1 for broad distributions to 3 or more for uniform, well sorted rock; the default of 2 is a middle value, not a measurement. If the fit of the J-function in the saturation-height model gives an exponent of -1.5, then \(\lambda\) is 0.67.
Endpoints. \(\krWatEnd\) is the water relative permeability at residual oil and \(\krOilEnd\) is the oil relative permeability at irreducible water, both relative to the same base permeability. They come from special core analysis, and are not a log result. Values near 0.2 to 0.4 for water and 0.8 to 1 for oil are typical of water-wet rock, and an oil-wet rock has a higher water endpoint (Craig's rules of thumb, quoted from memory, see Going Deeper). The calculator defaults of 0.3 and 1 are illustrative.
Saturation limits. Swirr and Sor are on the Irreducible and Residual Saturation page. They define the window in which the curves are non-zero.
Wetting phase. The equations are for a water-wet rock. For an oil-wet rock the roles are exchanged: use the wetting-phase form for oil in terms of \(1 - S_e\) and the non-wetting form for water in terms of \(S_e\). A mixed-wet rock fits neither form well.
Worked example
Water and oil relative permeability for Swirr = 0.20, Sor = 0.25, \(\lambda\) = 2, a water endpoint of 0.30 and an oil endpoint of 1, with a check of the endpoints and a comparison with the wetting-phase form used for oil:
swirr, sor, lam, krw0, kro0 = 0.20, 0.25, 2.0, 0.30, 1.0
def kr(sw):
se = min(1.0, max(0.0, (sw - swirr) / (1 - swirr - sor)))
krw = krw0 * se ** ((2 + 3 * lam) / lam)
kro = kro0 * (1 - se) ** 2 * (1 - se ** ((2 + lam) / lam))
return se, krw, kro
print(f'exponent of the water curve = (2 + 3 x {lam:g}) / {lam:g} = {(2 + 3 * lam) / lam:g}')
print(f"{'Sw':>5} {'Se':>6} {'krw':>7} {'kro':>7}")
for sw in (0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.75):
se, krw, kro = kr(sw)
print(f'{sw:5.2f} {se:6.3f} {krw:7.4f} {kro:7.4f}')
se, krw, kro = kr(0.20)
print(f'endpoint check at Swirr: krw = {krw:g}, kro = {kro:g}')
se, krw, kro = kr(0.75)
print(f'endpoint check at 1 - Sor: krw = {krw:g}, kro = {kro:g}')
se = 0.5
print(f'oil at Se = 0.5: non-wetting form {kro0 * (1 - se) ** 2 * (1 - se ** ((2 + lam) / lam)):.4f}, wetting-phase form (1 - Se)^((2+3 lam)/lam) = {kro0 * (1 - se) ** ((2 + 3 * lam) / lam):.4f}')
Output
exponent of the water curve = (2 + 3 x 2) / 2 = 4
Sw Se krw kro
0.20 0.000 0.0000 1.0000
0.30 0.182 0.0003 0.6473
0.40 0.364 0.0052 0.3514
0.50 0.545 0.0266 0.1451
0.60 0.727 0.0839 0.0350
0.70 0.909 0.2049 0.0014
0.75 1.000 0.3000 0.0000
endpoint check at Swirr: krw = 0, kro = 1
endpoint check at 1 - Sor: krw = 0.3, kro = 0
oil at Se = 0.5: non-wetting form 0.1875, wetting-phase form (1 - Se)^((2+3 lam)/lam) = 0.0625
Assumptions and limitations
- The pore size distribution is described by one index, with no curvature in the log-log capillary pressure curve. Rocks with bimodal pore systems are not well fitted.
- The rock is water-wet, with water as the wetting phase. The Burdine form gives the exponents of both phases.
- The saturations are for a single displacement direction. Drainage and imbibition curves differ, and the equations here do not represent hysteresis.
- Swirr and Sor are known. The curves are rescaled between them, so an error in either shifts the whole curve.
- The endpoints are scaling constants, and the curve shape stays the same when they change. This is an assumption and often fails for a change of wettability.
QC checks
- Both curves meet the endpoints exactly: oil kr is \(\krOilEnd\) at Swirr and 0 at 1 - Sor, water kr is 0 at Swirr and \(\krWatEnd\) at 1 - Sor.
- The water and oil curves cross at a water saturation consistent with the wettability: above about 50% (of the mobile range) for water-wet rock.
- Compare with measured special core analysis curves from the same rock type. The curve shape and the crossover are the best test of the assumed \(\lambda\).
- The \(\lambda\) used here is the same as the one in the capillary pressure fit, unless there is a reason for it to differ.
- Check that kr is not shown for saturations below Swirr or above 1 - Sor. The normalization limits them to the endpoints.
Going Deeper
Brooks and Corey fitted capillary pressure curves of porous media by a power law in the effective saturation, with the pore size distribution index as the exponent. Combined with a model of the pore space by Burdine, which treats the permeability to each phase as an integral over the pore sizes that phase occupies, the same index gives the two relative permeabilities in closed form. The result is that one parameter links the capillary pressure curve to the two curves above, which is why the model is popular in log-based work, where the capillary pressure fit from a saturation-height model is available. The equation for the non-wetting phase is the one above. The wetting-phase exponent \(2/\lambda + 3\) is also the exponent of a Corey curve: for \(\lambda\) = 2 it is 4, which is the oil exponent in Corey's 1954 gas-oil relations. Using that wetting-phase form for the non-wetting phase, as some log-analysis workflows do, gives a lower, more curved oil relative permeability than the non-wetting form (0.0625 against 0.1875 at a normalized saturation of 0.5 and \(\lambda\) = 2); that is only justified if oil is the wetting phase. The two-parameter form of Brooks-Corey (this page) with endpoints is also used in many reservoir simulators, but their tabulated curves usually come from special core analysis.
References
- Brooks, R.H. and Corey, A.T., 1964. Hydraulic properties of porous media. Hydrology Papers No. 3, Colorado State University.
- Brooks, R.H. and Corey, A.T., 1966. Properties of porous media affecting fluid flow. Journal of the Irrigation and Drainage Division, ASCE, 92(2), 61–88.
- Corey, A.T., 1954. The interrelation between gas and oil relative permeabilities. Producers Monthly, 19(1), 38–41.
- Craig, F.F., 1971. The Reservoir Engineering Aspects of Waterflooding. SPE Monograph Series Vol. 3, Society of Petroleum Engineers, Dallas.
Python reference implementation
Python reference implementation
The Python reference implementation is available to registered users with a verified email address. Register or sign in to view it.