CamPetro

Gross Reservoir, Net Reservoir, and Net Pay

On this page

Summary

Cutoffs turn continuous curves into flags with three nested levels: gross reservoir, net reservoir and net pay. Each level adds a test, so each is a subset of the one before: clay volume (Clay volume) for lithology, porosity (Effective porosity) and permeability (Permeability) for storage and flow, and water saturation (Water saturation) for hydrocarbon. The thicknesses that result, and their ratio to the gross thickness, Net-to-gross ratio, are the main outputs of the interpretation.

Inputs and outputs

Item Units
Input Clay volume v/v
Input Effective porosity v/v
Input Permeability mD
Input Water saturation v/v
Input Clay volume cutoff v/v
Input Porosity cutoff v/v
Input Permeability cutoff mD
Input Water saturation cutoff v/v
Output Gross reservoir flag 0 or 1
Output Net reservoir flag 0 or 1
Output Net pay flag 0 or 1

Equations

Each flag is 1 where its tests pass and 0 elsewhere, with \(\mathbf{1}[\cdot]\) the indicator of a condition. The levels are nested:

\[ \CpFlagG = \mathbf{1}\left[\Vcl \le \CpCutVcl\right] \]
\[ \CpFlagR = \CpFlagG\cdot\mathbf{1}\left[\phie \ge \CpCutPhi\right]\cdot\mathbf{1}\left[k \ge \CpCutK\right] \]
\[ \CpFlagP = \CpFlagR\cdot\mathbf{1}\left[\Sw \le \CpCutSw\right] \]

Summed over the samples of an interval, each flag gives a thickness, and the net-to-gross ratio is the ratio of net to gross thickness:

\[ \CpNTG = \frac{\sum_i F_i\,\Delta z}{\sum_i \Delta z} \]

where \(F_i\) is the net reservoir or the net pay flag and the denominator is the thickness of the gross interval (all samples). Any test can be left out by giving it a value that always passes; a permeability cutoff of 0 does this for permeability.

Symbol Variable Units Typical range
\(V_{cl}\) Clay volume v/v 0 to 1
\(\phi_e\) Effective porosity v/v 0 to 0.35
\(k\) Permeability mD 0.0001 to 10000
\(S_w\) Water saturation v/v 0 to 1
\(V_{cl,cut}\) Clay volume cutoff v/v 0.25 to 0.50
\(\phi_{cut}\) Porosity cutoff v/v 0.04 to 0.12
\(k_{cut}\) Permeability cutoff mD 0.01 to 1
\(S_{w,cut}\) Water saturation cutoff v/v 0.4 to 0.7
\(F_{g}\) Gross reservoir flag 0 or 1
\(F_{r}\) Net reservoir flag 0 or 1
\(F_{p}\) Net pay flag 0 or 1
\(NTG\) Net-to-gross ratio v/v 0 to 1

Single-value calculator

Behavior

The flag is a step function of every input. The plot shows the net pay flag against water saturation for three porosities, with the clay volume at 0.25, permeability at 1 mD and the default cutoffs. At a porosity of 0.05 the flag is zero at every saturation, because the sample is below the 0.08 porosity cutoff. At porosities of 0.10 and 0.15, which give the same line, the flag is 1 up to a water saturation of 0.60 and 0 above it. A small change in a log value near a cutoff flips the flag, so a net pay thickness changes by whole samples and not smoothly. That is the reason errors in the inputs matter more in rock whose properties sit near the cutoffs.

Parameter guidance

Typical cutoffs depend on rock, fluid and purpose, and the ranges below are common starting points that need to be justified for the field. Clay volume: gross reservoir often uses a maximum of about 0.3 to 0.5, set where permeability or facies change. Porosity: commonly 0.04 to 0.12, lower for gas and tight rock, set from the permeability cutoff through the porosity-permeability transform. Permeability: roughly 0.01 to 0.1 mD for gas and 1 mD or more for oil, set by the lowest rate that the fluid can flow at economically. Water saturation: commonly 0.4 to 0.7, set from tests or from the relation to irreducible saturation. How to choose each is on the Choosing Cutoff Curves and Values page. Apply the porosity cutoff to effective porosity (Effective porosity) and use water saturation on the same basis. Use one cutoff set per zone and purpose, and keep the order of the tests: lithology, then storage and flow, then fluid. The thin-bed filter is a further step on the Minimum Thickness page.

Worked example

Twelve half-foot samples through a small interval, flagged with the default cutoffs, and again with the permeability test removed to show what it adds:

import numpy as np
dz = 0.5  # ft per sample
vcl  = np.array([0.55, 0.30, 0.22, 0.18, 0.20, 0.35, 0.45, 0.15, 0.12, 0.25, 0.28, 0.60])
phie = np.array([0.03, 0.09, 0.14, 0.17, 0.13, 0.07, 0.05, 0.19, 0.21, 0.10, 0.12, 0.02])
perm = np.array([0.001, 0.2, 5.0, 30.0, 3.0, 0.08, 0.01, 90.0, 200.0, 0.06, 0.7, 0.0005])
sw   = np.array([0.95, 0.70, 0.40, 0.30, 0.55, 0.80, 0.90, 0.25, 0.22, 0.50, 0.65, 1.00])
def flags(cut_vcl=0.40, cut_phi=0.08, cut_perm=0.1, cut_sw=0.60):
    gross = vcl <= cut_vcl
    net_res = gross & (phie >= cut_phi) & (perm >= cut_perm)
    net_pay = net_res & (sw <= cut_sw)
    return gross, net_res, net_pay
total = len(vcl) * dz
for label, cuts in (('all four tests', {}), ('no permeability test', {'cut_perm': 0.0})):
    gross, net_res, net_pay = flags(**cuts)
    print(label)
    print('  gross reservoir {:.1f} ft, net reservoir {:.1f} ft, net pay {:.1f} ft'.format(gross.sum() * dz, net_res.sum() * dz, net_pay.sum() * dz))
    print('  net reservoir / gross = {:.2f}, net pay / gross = {:.2f}'.format(net_res.sum() * dz / total, net_pay.sum() * dz / total))
print()
gross, net_res, net_pay = flags()
print('sample:   ' + ' '.join(f'{i:2d}' for i in range(1, 13)))
print('net pay:  ' + ' '.join(f'{int(x):2d}' for x in net_pay))

Output

all four tests
  gross reservoir 4.5 ft, net reservoir 3.5 ft, net pay 2.5 ft
  net reservoir / gross = 0.58, net pay / gross = 0.42
no permeability test
  gross reservoir 4.5 ft, net reservoir 4.0 ft, net pay 3.0 ft
  net reservoir / gross = 0.67, net pay / gross = 0.50

sample:    1  2  3  4  5  6  7  8  9 10 11 12
net pay:   0  0  1  1  1  0  0  1  1  0  0  0

Assumptions and limitations

  • The input curves are on one porosity basis (effective) and one saturation basis, and have been through the environmental corrections and the repair steps.
  • The cutoffs are right for the zone and the purpose. A cutoff for a volumetric estimate is not the cutoff for a perforation decision.
  • The nested order is real: only rock that is gross reservoir can be net reservoir, and only net reservoir can be net pay. Some companies define the levels differently, so check what the downstream user expects.
  • Each sample is treated alone. Thin beds, bridged gaps and the vertical resolution of the tools are handled in the minimum-thickness step.

QC checks

  • Net pay is a subset of net reservoir, and net reservoir is a subset of gross reservoir, at every sample.
  • The flags follow the curves: a flagged sample has all its curves on the right side of every cutoff, and the reverse.
  • Gross, net reservoir and net pay thicknesses are in the right order for every well and zone, and the net-to-gross ratios vary smoothly across the field with the geology.
  • Compare the net pay with perforations, tests and production logs. Intervals that produced but were not flagged are a sign of too tight a cutoff.

Going Deeper

Gross, net and net pay are conventions, not physical quantities, and the same words have different meaning in different companies: net sand, net reservoir and net pay are used by various organisations for various sets of tests, and the word 'gross' is used for the whole zone or for the rock that passes a lithology test. The convention here nests them, so that each is a subset of the previous one. The ratio of net to gross carries the interpretation to the geological model, where it is often the property that is mapped. The cutoffs are better thought of as a model of what a well will produce than as a property of the rock, and Worthington and Cosentino argue that the sound basis of a cutoff is the dynamic behaviour of the reservoir, not a log value alone.

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.

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.