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:
- Drawdown — flow at constant rate, record falling pressure
- Build-up — shut in after flowing; Horner/semi-log slope → kh; offset → skin; extrapolation → p*
- Log–log derivative diagnostics identify wellbore storage, radial flow, fractures, boundaries
- Interference tests — connectivity between wells
- DST (drill-stem tests) — early evaluation of exploration wells
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
- Pseudo-steady radial inflow (field units):
q = k·h·(p̄_r − p_wf)/(141.2·B·µ·[ln(r_e/r_w) − 0.75 + s]) - Horner build-up:
p_ws = p_i − (162.6·qBµ/kh)·log((t_p + Δt)/Δt) - Permeability from slope:
k = 162.6·qBµ/(m·h) - Arps hyperbolic:
q(t) = q_i/(1 + b·D_i·t)^(1/b) - Exponential (b = 0):
q = q_i·e^(−D·t)
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.
- ln(4286) − 0.75 = 7.613
- 3 000 000/(141.2 × 1.5 × 7.613)
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.
- 162.6 × 1000 × 1.25 × 1.2/(60 × 60)
Answer: 67.8 mD
Worked example: Exponential decline
Given: q_i 2000, D 40%/yr
Find: Rate after 3 years.
- 2000 e^(−1.2)
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 MMSTBA 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
- Wrong: Fitting b > 1 hyperbolic to infinity. — Right: Switch to terminal exponential decline.
- Wrong: Reading kh from wellbore-storage period. — Right: Use the radial-flow stabilisation on the derivative.
- Wrong: Ignoring skin in rate expectations. — Right: Skin can halve productivity.
Applications
- Field development: Well count, spacing and plateau rate.
- Stimulation candidates: Identify high-skin wells.
- Reserves audits: Decline-based EUR.
- CO₂ storage: Injectivity and pressure build-up forecasting.
Key takeaways
- Radial flow: q ∝ kh ΔP/[µB(ln r_e/r_w − 0.75 + s)].
- Build-up tests give k, s and p*.
- Arps curves forecast EUR.
- Simulation + history matching for development planning.
Going further
- Pressure-derivative diagnostics: Bourdet derivative and type curves.
- Rate-transient analysis: Unconventional well performance.
- Ensemble history matching: EnKF and ML proxies.