PET-440 · Lesson 3 of 12 · 19 min
Gas in place and material balance
The Ten Mile Ridge acquisition came with more than the Marcellus rights. Above the tight Marcellus lies a conventional gas reservoir, the Oriskany sandstone pool, at a depth of about 6,200 ft. The previous owner produced it through six vertical wells for about four years, and its gas flows through the same third-party plant. The Oriskany sandstone pool is a classic gas reservoir: a permeable sandstone, a gas-water contact at the base and a clear pressure history. Farid gives it to Ethan as a warm-up. “Before you touch the shale,” he says, “show me you can estimate the gas in a tank two ways and explain why the answers differ.”
Volumetric gas in place
The volumetric method computes the original gas in place, OGIP or G, from the rock volume, porosity, gas saturation and the formation volume factor at initial conditions:
In oilfield units the area is in acres and the constant 43,560 ft² per acre is included, giving G in standard cubic feet when B_gi is in ft³/scf. In metric units the area is in m², the thickness in meters and B_gi in m³/m³. Each input carries uncertainty. The area comes from a structure map and the gas-water contact; the net pay from logs with cut-offs on porosity, shale volume and water saturation; the porosity and water saturation from logs calibrated to core. Because the terms multiply, a 10 percent error in each of four inputs can produce a 20 percent or larger error in G. The volumetric estimate is therefore most valuable early, before production history exists, and as an independent check afterwards.
For the Oriskany sandstone pool, the geologists map an area of 4,450 acres inside the gas-water contact, with an average net pay of 26 ft, porosity of 14 percent and water saturation of 24 percent. The gas has a gravity of 0.65 and the reservoir temperature is 160 °F. The initial pressure, from the first pressure surveys, was about 3,100 psia.
The gas material balance
Material balance treats the reservoir as a tank in which mass is conserved. For a volumetric gas reservoir, one with no water influx and negligible rock and water expansion, the reservoir volume occupied by gas does not change as gas is produced. The gas remaining at any time fills the same pore volume as the original gas, so:
Substituting B_g = (p_sc/T_sc)(zT/p) at constant reservoir temperature and rearranging gives the most useful equation in gas reservoir engineering:
A plot of p/z against cumulative production G_p is a straight line for a volumetric gas reservoir. The line passes through p_i/z_i at zero production and reaches zero at G_p = G. Extrapolating the line to p/z = 0 gives the original gas in place; reading it at the abandonment p/z gives the recoverable gas. The method needs only average reservoir pressures, cumulative production and the z-factor, which is why it is often the most trusted estimate once a pool has produced a few percent of its gas.
Average reservoir pressure
The weak link is the average reservoir pressure. It is measured by shutting wells in and recording the pressure buildup, then extrapolating to the average pressure in each well's drainage area. In a permeable sandstone like the Oriskany sandstone pool, buildups stabilize within a day or two and the wells agree with each other. In tight rock, a well may need months to approach the average pressure, and short shut-ins underestimate it badly; this is why classical p/z analysis fails in shale and tight gas, as Lesson 8 explains. The Oriskany sandstone pool operator ran annual surveys in two or three wells and averaged them, weighted by each well's drainage volume.
# Volumetric gas in place and p/z material balance for the Halfway-style conventional pool,
# plus the gas in place under one Montney-style spacing unit.
import math
SI = False # True: metric units, False: oilfield units
def sutton(gg):
return 169.2 + 349.5 * gg - 74.0 * gg ** 2, 756.8 - 131.07 * gg - 3.6 * gg ** 2
def z_dak(Tpr, ppr):
"""Dranchuk-Abou-Kassem z-factor by fixed-point and Newton iteration."""
A = [0.3265, -1.0700, -0.5339, 0.01569, -0.05165, 0.5475, -0.7361, 0.1844, 0.1056, 0.6134, 0.7210]
c1 = A[0] + A[1] / Tpr + A[2] / Tpr ** 3 + A[3] / Tpr ** 4 + A[4] / Tpr ** 5
c2 = A[5] + A[6] / Tpr + A[7] / Tpr ** 2
c3 = A[8] * (A[6] / Tpr + A[7] / Tpr ** 2)
def f(z):
r = 0.27 * ppr / (z * Tpr)
return z - (1 + c1 * r + c2 * r ** 2 - c3 * r ** 5 + A[9] * (1 + A[10] * r ** 2) * r ** 2 / Tpr ** 3 * math.exp(-A[10] * r ** 2))
z = 1.0
for _ in range(100):
d = (f(z + 1e-7) - f(z)) / 1e-7
zn = z - f(z) / d
if abs(zn - z) < 1e-10: return zn
z = zn
return z
gg, T_R = 0.65, 160 + 459.67
Tpc, ppc = sutton(gg)
z = lambda p: z_dak(T_R / Tpc, p / ppc)
Bg = lambda p: 0.02827 * z(p) * T_R / p # ft3/scf
# Volumetric estimate: area, net pay, porosity, water saturation
A_ac, h_ft, phi, sw, pi = 4450.0, 26.0, 0.14, 0.24, 3100.0
G_vol = 43560 * A_ac * h_ft * phi * (1 - sw) / Bg(pi) # scf
# Pressure history: (cumulative gas Bscf, average reservoir pressure psia)
hist = [(0.0, 3100), (8.1, 2905), (17.6, 2690), (26.4, 2480), (35.9, 2265), (44.2, 2080)]
x = [g for g, p in hist]; y = [p / z(p) for g, p in hist]
n = len(x); mx, my = sum(x) / n, sum(y) / n
slope = sum((a - mx) * (b - my) for a, b in zip(x, y)) / sum((a - mx) ** 2 for a in x)
icpt = my - slope * mx
G_mb = -icpt / slope # Bscf at p/z = 0
pa = 500.0; Gp_ab = G_mb * (1 - (pa / z(pa)) / icpt)
if SI:
print(f"Volumetric OGIP {G_vol * 0.0283168 / 1e9:.2f} x 10^9 m3")
print(" Gp 10^6 m3 p kPa z p/z kPa")
for (g, p), pz in zip(hist, y):
print(f"{g * 28.3168:10,.0f} {p / 0.145038:7,.0f} {z(p):.4f} {pz / 0.145038:8,.0f}")
print(f"Material balance OGIP {G_mb * 0.0283168:.2f} x 10^9 m3; volumetric / material balance = {G_vol / 1e9 / G_mb:.2f}")
print(f"Recovery to {pa / 0.145038:,.0f} kPa abandonment: {Gp_ab * 0.0283168:.2f} x 10^9 m3 ({Gp_ab / G_mb:.0%})")
else:
print(f"Volumetric OGIP {G_vol / 1e9:.1f} Bscf")
print(" Gp Bscf p psia z p/z psia")
for (g, p), pz in zip(hist, y):
print(f"{g:7.1f} {p:7,.0f} {z(p):.4f} {pz:8,.0f}")
print(f"Material balance OGIP {G_mb:.1f} Bscf; volumetric / material balance = {G_vol / 1e9 / G_mb:.2f}")
print(f"Recovery to {pa:.0f} psia abandonment: {Gp_ab:.1f} Bscf ({Gp_ab / G_mb:.0%})")
# One 640-acre spacing unit in the Montney-style tight reservoir (gas gravity 0.74, 190 F, 4,500 psia)
Tpc2, ppc2 = sutton(0.74); T2 = 190 + 459.67
Bgi2 = 0.02827 * z_dak(T2 / Tpc2, 4500 / ppc2) * T2 / 4500
G_su = 43560 * 640 * 197 * 0.055 * (1 - 0.22) / Bgi2
print(f"Montney-style spacing unit, 60 m net: {G_su * 0.0283168 / 1e9:.2f} x 10^9 m3" if SI else
f"Montney-style spacing unit, 197 ft net: {G_su / 1e9:.1f} Bscf")Volumetric OGIP 108.6 Bscf
Gp Bscf p psia z p/z psia
0.0 3,100 0.8739 3,547
8.1 2,905 0.8680 3,347
17.6 2,690 0.8635 3,115
26.4 2,480 0.8612 2,880
35.9 2,265 0.8613 2,630
44.2 2,080 0.8633 2,409
Material balance OGIP 137.9 Bscf; volumetric / material balance = 0.79
Recovery to 500 psia abandonment: 117.6 Bscf (85%)
Montney-style spacing unit, 197 ft net: 60.7 BscfThe material balance gives an original gas in place of about 138 Bscf, while the volumetric estimate is about 109 Bscf. The ratio of 0.79 is too large a gap to blame on rounding. Ethan lists the possibilities. The volumetric inputs may be low: the area could extend beyond the mapped edge, or the pay cut-offs might exclude gas-bearing rock. The material balance could be high: water influx, which supports pressure, makes the p/z points fall more slowly and the extrapolation too long; so would pressures measured too high. Or the pool may be connected to gas in a neighboring compartment that the map treats as separate.
He checks the pressure data first. The surveys agree between wells and the buildups were long enough to stabilize. No well has produced water beyond the small amount of condensed water vapor, which argues against strong water influx so far, although Lesson 4 shows why early water influx can hide. Then he looks at the map. A seismic line shot by the previous owner shows the Oriskany sandstone continuing past a small fault at the north-east edge, into an area mapped as tight. If that lobe holds about 29 Bscf and communicates through the fault, both estimates are right. He recommends a pressure survey in the nearest well to the fault and a check of the neighboring license's pressure records, which are public.
Recovery factor and abandonment pressure
For a volumetric gas reservoir, the recovery factor depends only on how low the reservoir pressure can be taken before the wells stop flowing economically:
With an abandonment pressure of 500 psia, set by the plant inlet pressure and the compression that is economic, the Oriskany sandstone pool would recover about 85 percent of its gas. Volumetric gas reservoirs routinely recover 80 to 90 percent, far more than oil reservoirs, because gas expands so much and flows so easily. Lowering the abandonment pressure with field compression is often the cheapest reserves addition available late in a pool's life. Water drive, as Lesson 4 shows, usually lowers gas recovery, because rising water traps gas at high pressure.
Worked problem
Gas in place from two pressure points
A small gas pool had an initial pressure of 2,900 psia with z = 0.87. After producing 14.1 Bscf, the average pressure is 2,393 psia with z = 0.86. Estimate G and the recovery at an abandonment p/z of 551 psia.
Show solution
- Initial p/z: 2,900 / 0.87 = 3,333 psia.
- Current p/z: 2,393 / 0.86 = 2,783 psia.
- Fraction produced: 1 − 2,783 / 3,333 = 0.165, so G = 14.1 / 0.165 = 85 Bscf.
- Recovery factor: 1 − 551 / 3,333 = 0.835, so recoverable gas = 0.835 × 85 = 71 Bscf.
Answer: G is about 85 Bscf and the recoverable gas about 71 Bscf. With only two points, a single bad pressure changes the answer a lot, so more surveys are needed before booking reserves.
How much history is enough?
A material balance with two or three pressure points has little statistical weight. Early in a pool's life the line can pivot easily, and pressures measured before the drainage area has fully developed are biased high. Common practice is to wait until about 10 percent of the gas has been produced and at least three good average pressures are available, then fit the line by least squares and look at the scatter. The Oriskany sandstone pool's six points span 32 percent of the material-balance gas in place and fall within about 5 psi of the line, which makes the fit robust. Reserves evaluators under the SEC rules and SPE-PRMS would accept it, subject to the water influx check in Lesson 4.
Gas in place in the Marcellus
The second half of the code applies the volumetric equation to one 640-acre spacing unit of the Marcellus, using the properties from Lessons 1 and 2. With 197 ft of net pay, 5.5 percent porosity and 22 percent water saturation, the free gas in place is about 61 Bscf per spacing unit. That is a large number for a section of land, larger than many conventional pools, but the rock is so tight that only multi-stage hydraulically fractured horizontal wells can produce it at economic rates. Its gas in place is estimated volumetrically, plus an adsorbed-gas term discussed in Lesson 8, because p/z material balance does not work in rock where pressure never equalizes. The volumetric number becomes the denominator of the recovery factor that the development plan must justify.
Common mistakes
MistakeExtrapolating a p/z line drawn through two early points as if it were reliable.
InsteadWait for several representative average pressures over a meaningful fraction of production, and fit by least squares.
MistakeUsing flowing or short-buildup pressures as average reservoir pressures.
InsteadUse stabilized buildups extrapolated to the average drainage pressure, weighted by drainage volume.
MistakeAssuming the volumetric and material balance estimates must agree.
InsteadA gap is information: it points to mapping errors, communication with other compartments or water influx.
MistakeApplying p/z material balance to a tight or shale gas reservoir.
InsteadPressure does not equalize in tight rock; use volumetrics, rate-transient analysis and decline curves instead.
Summary and key terms
- Volumetric gas in place G = Ahφ(1 − S_wi)/B_gi multiplies several uncertain inputs.
- For a volumetric reservoir, p/z falls linearly with cumulative production and extrapolates to G at p/z = 0.
- Average reservoir pressures from stabilized buildups are the critical data; poor pressures ruin the analysis.
- The recovery factor of a volumetric gas reservoir is 1 − (p_a/z_a)/(p_i/z_i), often 80 to 90 percent.
- Disagreement between volumetric and material balance estimates points to mapping errors, connected volumes or water influx.
- Tight and shale gas in place is estimated volumetrically because material balance needs pressure equilibrium.
- OGIP
- Original gas in place, the standard volume of gas in a reservoir before production.
- Material balance
- An accounting of reservoir volumes that equates withdrawals to expansion and influx.
- p/z plot
- A plot of pressure divided by z against cumulative gas production; straight for volumetric depletion.
- Abandonment pressure
- The average reservoir pressure at which production is no longer economic.
- Volumetric reservoir
- A reservoir with no water influx, whose gas-filled pore volume stays constant.
Practice problems
Work each problem on paper first, then reveal the answer to check.
A pool has p_i/z_i = 4,000 psia and p/z = 3,000 psia after 25 Bscf. What is G?
Show answer
G = 25 / (1 − 3,000/4,000) = 100 Bscf.
What would a p/z plot that flattens with time suggest?
Show answer
Pressure support, most often from water influx, or a connected volume being drawn in.
How does lowering abandonment pressure change gas recovery?
Show answer
It raises recovery, because more of the p/z line is used.
Why can a volumetric estimate be lower than the material balance?
Show answer
The mapped area or pay may be too small, or the reservoir communicates with gas outside the mapped tank.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.