Reservoir Engineering, Well Testing & Decline Analysis

Understanding and forecasting how reservoirs perform. Learn radial Darcy flow and the steady-state well equation, skin factor, transient flow and the diffusivity equation, pressure drawdown and build-up tests (Horner plot, permeability and skin), flow regimes and boundaries, Arps decline curve analysis (exponential, hyperbolic, harmonic), EUR, reservoir simulation and history matching — with Python for radial inflow, skin impact and a hyperbolic decline forecast.

Reservoir engineers predict how much oil and gas will be produced, at what rate and with which development strategy. Well tests reveal permeability, skin and boundaries; decline curves and simulation forecast future production.

These forecasts drive field development plans, reserves bookings and billion-dollar investment decisions.

An analogy

A well test is like tapping a wall to find hidden studs: you disturb the reservoir (open or shut the well) and listen to how the pressure responds, revealing what lies out of sight.

Radial flow to a well

Oil flows radially toward the wellbore; pressure drops logarithmically, so most of the pressure drop occurs near the well. That's why near-wellbore damage (positive skin) or stimulation (negative skin from fractures or acid) has such a large effect on rate.

Pressure transient analysis

Well tests and what they reveal:

Decline curve analysis

Arps curves fit production history: exponential (b = 0, conservative, boundary-dominated with constant compressibility), hyperbolic (0 < b < 1, common), harmonic (b = 1). Shale wells often show b > 1 early, so modified hyperbolic with terminal exponential decline is used. EUR is the cumulative to the economic limit rate.

Reservoir simulation

Numerical simulators (Eclipse, CMG, OPM Flow, tNavigator) discretise the reservoir into millions of cells and solve mass balance with Darcy flow for oil, gas and water (black-oil) or components (compositional). History matching calibrates models to production and pressure data; forecasts test development options (well placement, injection, EOR). Uncertainty is handled with ensembles and assisted history matching (ensemble Kalman filter, machine learning proxies).

Formulas

Worked example: Radial inflow

Given: k 50 mD, h 60 ft, µ 1.2 cP, B 1.25, ΔP 1000 psi, r_e/r_w 4286

Find: q.

Answer: 1861 STB/d

Worked example: Permeability from build-up

Given: Horner slope 60 psi/cycle, q 1000 STB/d, B 1.25, µ 1.2, h 60

Find: k.

Answer: 67.8 mD

Worked example: Exponential decline

Given: q_i 2000, D 40%/yr

Find: Rate after 3 years.

Answer: 602 STB/d

Radial inflow, skin and decline forecast

import math
# Radial Darcy flow (field units) and Arps decline
k, h, mu, Bo = 50.0, 60.0, 1.2, 1.25          # mD, ft, cP, rb/STB
Pr, pwf, re, rw, s = 3000.0, 2000.0, 1500.0, 0.35, 0.0
q = k * h * (Pr - pwf) / (141.2 * Bo * mu * (math.log(re / rw) - 0.75 + s))
print(f"steady radial rate {q:.0f} STB/d, PI = {q/(Pr-pwf):.2f} STB/d/psi")
q_s = k * h * (Pr - pwf) / (141.2 * Bo * mu * (math.log(re / rw) - 0.75 + 5))
print(f"with skin +5: {q_s:.0f} STB/d ({(1-q_s/q)*100:.0f}% loss) -> stimulation candidate")
# Arps hyperbolic decline: qi 2000, Di 40%/yr, b 0.5
qi, Di, b = 2000.0, 0.40, 0.5
for t in (1, 3, 5):
    print(f"year {t}: rate {qi/(1+b*Di*t)**(1/b):.0f} STB/d")
Np5 = qi**b / ((1 - b) * Di) * (qi**(1 - b) - (qi/(1+b*Di*5)**(1/b))**(1 - b)) * 365
print(f"cumulative after 5 years {Np5/1e6:.2f} MMSTB")
# steady radial rate 1861 STB/d, PI = 1.86 STB/d/psi
# with skin +5: 1123 STB/d (40% loss) -> stimulation candidate
# year 1: rate 1389 STB/d
# year 3: rate 781 STB/d
# year 5: rate 500 STB/d
# cumulative after 5 years 1.82 MMSTB

A skin of +5 (formation damage) cuts the rate by 40% — which is why well tests measuring skin are so valuable: acidising to remove damage recovers that production. The hyperbolic decline shows rate falling to a quarter in 5 years while 1.8 million barrels are produced.

Common mistakes

Applications

Key takeaways

Going further