CamPetro

Choosing Cutoff Curves and Values

On this page

Summary

A cutoff is a decision, and it is chosen against a purpose: the lowest permeability that gives economic flow, the porosity that goes with it, the clay volume above which the rock stops being reservoir, and the water saturation above which a zone gives too much water. The main tools are core and test data, crossplots against Permeability and Water saturation, flow-capacity and storage-capacity curves, and a sensitivity analysis. Use them together, and report the cutoffs with the evidence.

Inputs and outputs

Item Units
Input Core porosity and permeability by sample and thickness v/v, mD, ft
Input Test or production evidence on fluid and rate, by interval
Input Logs: Clay volume, Effective porosity, Water saturation and Irreducible water saturation over the same intervals v/v
Output A permeability cutoff (Permeability cutoff) mD
Output A porosity cutoff (Porosity cutoff) with its uncertainty band v/v
Output A clay volume cutoff (Clay volume cutoff) and a water saturation cutoff (Water saturation cutoff) v/v

Equations

Flow capacity and storage capacity are cumulative sums over the samples, ordered by permeability. For the rock below a candidate cutoff, the fractions are:

\[ \CpFC = \frac{\sum_{k_i < k_{cut}} k_i\,h_i}{\sum_i k_i\,h_i} \qquad \CpSC = \frac{\sum_{k_i < k_{cut}} \phi_i\,h_i}{\sum_i \phi_i\,h_i} \]

where \(h_i\) is the thickness of sample \(i\). A permeability cutoff is converted to a porosity cutoff through the regression of log permeability on porosity in percent from the Porosity-Permeability Transforms page:

\[ \phi_{cut} = \frac{\log_{10}\left(\CpCutK\right) - \CpPhiKA}{100\,\CpPhiKB} \]

Applied to logs, the porosity test is \(\phie \ge \CpCutPhi\). The scatter \(\CpPhiKSig\) turns the single value into a band: the porosities at which the high and low lines of the scatter, \(\log_{10} k \pm 1.2816\,\CpPhiKSig\), reach the cutoff.

Symbol Variable Units Typical range
\(k\) Permeability mD 0.0001 to 10000
\(\phi_e\) Effective porosity v/v 0 to 0.35
\(k_{cut}\) Permeability cutoff mD 0.01 to 1
\(\phi_{cut}\) Porosity cutoff v/v 0.04 to 0.12
\(V_{cl,cut}\) Clay volume cutoff v/v 0.25 to 0.50
\(S_{w,cut}\) Water saturation cutoff v/v 0.4 to 0.7
\(a_\phi\) Porosity-permeability intercept log10(mD) -5 to 0
\(b_\phi\) Porosity-permeability slope log10(mD) per porosity percent 0.1 to 0.5
\(\sigma_k\) Porosity-permeability scatter log10 units 0.2 to 0.8
\(FC\) Cumulative flow capacity fraction fraction 0 to 1
\(SC\) Cumulative storage capacity fraction fraction 0 to 1

Single-value calculator

No calculator: choosing cutoffs is a procedure that depends on field data, not a single equation. The worked example below runs one end to end on a simulated core set.

Behavior

The example uses 150 simulated core plugs whose permeability follows a porosity trend with a scatter of 0.35 log units, and shows what the choice of a permeability cutoff does. At 0.1 mD, 25% of the plugs are discarded, almost none of the flow capacity (0.03%) and 10% of the storage capacity. At 1 mD, 46% of the plugs and 27% of the storage capacity go, still only 0.3% of the flow capacity. At 10 mD, 4% of the flow capacity and 52% of the storage capacity go. Flow capacity is carried by the best rock, so discarding poor rock costs little flow, and storage capacity is carried by all the rock, so it costs much more. A flow-capacity criterion alone therefore favours high cutoffs. The storage that is lost matters when the poor rock has gas or oil in place that can be produced slowly, which is why the cutoff has to be set by the fluid and the economics and not by capacity curves alone. Converting to porosity, a 1 mD cutoff is 0.140 along the median line, but the 10th to 90th percentile band is 0.117 to 0.163: the scatter of the transform makes a porosity cutoff uncertain by about 2.3 porosity units either side. Last, the fraction kept moves from 0.85 to 0.73 as the porosity cutoff goes from 0.07 to 0.10, which is the sensitivity to report.

Parameter guidance

Permeability cutoff. Start from the lowest permeability that gives a producible rate for the fluid and the completion. For a given drawdown and viscosity this is a mobility threshold (permeability over viscosity), so gas allows a much lower cutoff than oil; values from about 0.01 to 0.1 mD for gas and 1 mD or more for oil are rules of thumb that need to be checked with tests or production data in the field. Porosity cutoff. Convert the permeability cutoff through the porosity-permeability transform for the rock type, regressing log permeability on porosity and not the reverse, and report the band that the scatter gives. Clay volume cutoff. Cross-plot core permeability and porosity against clay volume or the matching log, and take the value above which permeability falls below its cutoff. A clay volume cutoff is mostly a statement about facies, so check it against core description. Water saturation cutoff. Cross-plot test results (water-free, water-cut or water-only) on water saturation against porosity or permeability, and choose the line that separates them. The saturation at which relative permeability to water starts to dominate sets the physical upper limit, and it is related to the irreducible water saturation: a cutoff well above Swirr counts as pay rock that will produce water. Sensitivity analysis. Vary each cutoff in turn over a plausible range, plot net thickness or hydrocarbon pore thickness against it, and prefer a value on a flat part of the curve, where the result is stable. Where it is steep, report the range. The same porosity-permeability fit, the same capacity curves and the same crossplots serve for each zone and rock type, but the cutoffs do not carry over.

Worked example

A simulated core set, with a porosity-permeability fit, the flow and storage capacity lost at four candidate permeability cutoffs, the matching porosity cutoffs with their bands, and the sensitivity of the kept fraction to the porosity cutoff:

import numpy as np

# 150 one-foot core plugs, simulated: log10 k = -2.8 + 20 x phi + noise (sigma 0.35)
rng = np.random.default_rng(5)
n = 150
phi = rng.uniform(0.03, 0.26, n)
k = 10 ** (-2.8 + 20 * phi + rng.normal(0, 0.35, n))

# semi-log fit of log k on porosity (porosity in percent) and its scatter
b, a = np.polyfit(phi * 100, np.log10(k), 1)
sigma = (np.log10(k) - (a + b * phi * 100)).std(ddof=2)
print(f"fit: log10 k = {a:.2f} + {b:.3f} x phi%, scatter {sigma:.2f}")

# flow and storage capacity of the rock below each candidate cutoff
print(f"{'k cutoff':>8} {'NTG':>5} {'flow lost':>9} {'stor lost':>9} {'phi cut':>8} {'phi range (10-90)':>18}")
for kc in (0.01, 0.1, 1.0, 10.0):
    below = k < kc
    flow_lost = k[below].sum() / k.sum()
    stor_lost = phi[below].sum() / phi.sum()
    phi_cut = (np.log10(kc) - a) / b / 100
    lo = (np.log10(kc) - 1.2816 * sigma - a) / b / 100
    hi = (np.log10(kc) + 1.2816 * sigma - a) / b / 100
    print(f"{kc:8.2f} {1 - below.mean():5.2f} {flow_lost:9.4f} {stor_lost:9.3f} {phi_cut:8.3f} {lo:8.3f} to {hi:6.3f}")

# sensitivity of the kept fraction to the porosity cutoff
print()
for cut in (0.07, 0.08, 0.09, 0.10):
    print(f"phi cutoff {cut:.2f}: fraction of plugs kept = {(phi >= cut).mean():.2f}")

Output

fit: log10 k = -2.75 + 0.197 x phi%, scatter 0.35
k cutoff   NTG flow lost stor lost  phi cut  phi range (10-90)
    0.01  0.92    0.0000     0.023    0.038    0.015 to  0.061
    0.10  0.75    0.0003     0.100    0.089    0.066 to  0.112
    1.00  0.54    0.0032     0.270    0.140    0.117 to  0.163
   10.00  0.31    0.0402     0.522    0.191    0.168 to  0.213

phi cutoff 0.07: fraction of plugs kept = 0.85
phi cutoff 0.08: fraction of plugs kept = 0.80
phi cutoff 0.09: fraction of plugs kept = 0.75
phi cutoff 0.10: fraction of plugs kept = 0.73

Assumptions and limitations

  • A cutoff is meaningful only for a stated purpose (volumes, reserves, perforation) and a stated fluid and development plan.
  • Core permeability and porosity are at reservoir stress and represent the reservoir. Plug data are biased to the better rock, so the lowest rock may not be sampled.
  • The transform used to convert a permeability cutoff to porosity is fitted to the rock type. A single transform across several rock types gives a wrong porosity cutoff.
  • Test data are representative: production tests may be affected by completion damage, commingling and the choice of test interval.
  • Cutoffs are constant over the zone. Where properties trend with depth or facies, one cutoff set per rock type is better.

QC checks

  • The porosity cutoff reproduces the permeability cutoff on a core cross-plot, and the band that the scatter gives is reported with it.
  • The Sw cutoff separates water-free tests from water-producing ones on the crossplot, and is above Swirr by a margin that can be explained.
  • Net pay at the chosen cutoffs agrees with perforated and producing intervals in the offset wells, and with the tests.
  • The sensitivity of net thickness and hydrocarbon pore thickness to each cutoff is shown, and the chosen value sits on a flat part where possible.
  • The same cutoff set is applied to every well in the zone, unless there is a geological reason to change it.

Going Deeper

Cutoffs were once set by rule of thumb, with fixed values that were carried from field to field. The more careful view, argued by Worthington and Cosentino, is that a cutoff has no meaning outside a production criterion: it is the value of a log or core property at which the rock stops contributing to the recovery that the development plan relies on, and it changes with the recovery process. Flow and storage capacity curves, which accumulate permeability-thickness and porosity-thickness in order of permeability, are the standard graphical tool, and are the same construction as the stratigraphic Lorenz plots used in reservoir description. Probabilistic approaches replace the cutoff with a distribution of values, so that net pay becomes a range, and some workflows avoid cutoffs altogether by carrying the full property distribution into the model. A fixed cutoff is still the norm for reporting reserves.

References

  1. Worthington, P.F. and Cosentino, L., 2005. The role of cutoffs in integrated reservoir studies. SPE Reservoir Evaluation & Engineering, 8(4), 276–290.
  2. Cobb, W.M. and Marek, F.J., 1998. Net pay determination for primary and waterflood depletion mechanisms. SPE 48952, SPE Annual Technical Conference and Exhibition, New Orleans, LA.

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.