Part II: Petroleum Data Engineering

Chapter 10

Material Balance and Reservoir Analysis

schedule15 min readfitness_center10 exercises

Why This Chapter Exists

Reservoir engineers need to answer two fundamental questions: How much oil is in the ground? and What is pushing it out?

The General Material Balance Equation (GMBE) answers both. It is the single most important equation in reservoir engineering --- a conservation-of-mass accounting that relates everything produced from the reservoir to the energy sources driving that production. When applied correctly, it can estimate original oil in place (OOIP), identify the dominant drive mechanism, predict future performance, and diagnose whether a reservoir is behaving as expected.

The GMBE is also one of the most misapplied equations in the industry. It has many terms, each representing a different physical mechanism. Using it carelessly --- ignoring terms, misidentifying the drive, or working with poor pressure data --- leads to OOIP estimates that can be off by factors of two or more. Every term in this equation has a physical meaning, and this chapter ensures you understand all of them.

infoWhat You'll Learn

  • The physical basis for reservoir drive mechanisms
  • Derivation and meaning of every term in the General Material Balance Equation
  • Implementing the Havlena-Odeh straight-line method in Python
  • Drive mechanism identification from production and pressure data
  • Water influx models: Schilthuis, van Everdingen-Hurst, and Fetkovich
  • History matching a reservoir's production and pressure data
  • Quantifying uncertainty in OOIP estimates

Reservoir Drive Mechanisms

When a well produces oil, something must replace the volume that was removed. Otherwise, the reservoir pressure would drop instantly to zero. The energy source that maintains pressure and pushes oil toward the wellbore is called the drive mechanism.

Understanding the drive mechanism is critical because it determines recovery efficiency, pressure behavior, and the appropriate production strategy. The main mechanisms are:

Fluid Expansion Drive

All reservoir fluids are slightly compressible. When pressure drops, oil, water, and rock expand slightly. This expansion pushes oil toward the wellbore. The effect is small --- compressibilities are on the order of 10610^{-6} psi1^{-1} --- so fluid expansion alone typically recovers only 1--5% of the original oil. This drive is most significant in undersaturated reservoirs (reservoirs where the pressure is above the bubble point, meaning all gas is dissolved in the oil).

Solution Gas Drive

When reservoir pressure drops below the bubble point, dissolved gas comes out of solution and forms free gas bubbles within the pore space. As the gas expands, it pushes oil toward the well. Recovery factors are typically 5--30%.

The tradeoff: as gas liberates, the oil's viscosity increases and its volume decreases. The gas-oil ratio (GOR) at the surface rises dramatically. Solution gas drive is efficient early but becomes progressively less effective as the gas cap grows and gas preferentially flows to the wellbore (gas is more mobile than oil).

Gas Cap Drive

If the reservoir has a gas cap --- a zone of free gas sitting above the oil column --- the expanding gas cap pushes the oil-water contact downward and sweeps oil toward production wells. Recovery factors range from 20--40% depending on the size of the gas cap relative to the oil zone.

Operators must manage gas cap drive carefully. Producing too aggressively from the top of the structure can cause gas coning, where gas breaks through to the wellbore prematurely, reducing oil recovery.

Water Drive

An aquifer connected to the reservoir provides pressure support as water moves in to replace the produced fluids. Water drive is the most efficient natural mechanism, with recovery factors of 30--60% or higher.

The strength of the water drive depends on the aquifer's size, permeability, and compressibility. A strong aquifer maintains reservoir pressure nearly constant throughout the field's life. A weak aquifer provides partial support, and pressure declines gradually. Many Niger Delta reservoirs (including fields in OML 58) benefit from strong aquifer support, making water influx modelling a critical part of reserves estimation in that basin.

Compaction Drive

In some reservoirs, particularly unconsolidated sands, the reduction in pore pressure causes the rock matrix itself to compact. This squeezes fluid out of the pore space. The Ekofisk field in the North Sea is the most famous example, where seafloor subsidence of several meters accompanied significant compaction drive.

The General Material Balance Equation

The GMBE is a volumetric balance: the total volume of fluids withdrawn from the reservoir must equal the total expansion of fluids and rock remaining in the reservoir, plus any water that has entered from an aquifer.

The Full Equation

F=N ⁣[Eo+Efw]+NmEg+We{\small F = N\!\left[E_o + E_{fw}\right] + N m E_g + W_e}

where the withdrawal and expansion terms are defined as:

F=Np[Bo+(RpRs)Bg]+WpBwF = N_p[B_o + (R_p - R_s)B_g] + W_p B_w
Eo=(BoBoi)+(RsiRs)BgEfw=Boi(cwSwi+cf)ΔP1SwiEg=BoiBgi(BgBgi)E_o = (B_o - B_{oi}) + (R_{si} - R_s)B_g \qquad E_{fw} = \frac{B_{oi}(c_w S_{wi} + c_f)\Delta P}{1 - S_{wi}} \qquad E_g = \frac{B_{oi}}{B_{gi}}(B_g - B_{gi})

Each term represents a physical mechanism:

Left side --- total withdrawal:

  • Np[Bo+(RpRs)Bg]N_p[B_o + (R_p - R_s)B_g] --- total reservoir volume of oil and its associated gas that has been produced
  • WpBwW_p B_w --- reservoir volume of water produced

Right side --- sources of energy:

  • N(BoBoi)N(B_o - B_{oi}) --- expansion of oil (change in oil formation volume factor)
  • N(RsiRs)BgN(R_{si} - R_s)B_g --- expansion of gas liberated from oil as pressure drops below bubble point
  • NBoi(cwSwi+cf)ΔP1SwiN B_{oi}\frac{(c_w S_{wi} + c_f)\Delta P}{1 - S_{wi}} --- expansion of connate water and reduction in pore volume due to rock compressibility
  • mNBoiBgi(BgBgi)\frac{mNB_{oi}}{B_{gi}}(B_g - B_{gi}) --- expansion of the gas cap, where mm is the ratio of gas cap to oil zone volume
  • WeW_e --- net water influx from an aquifer

Every symbol has a specific physical meaning. Every term represents a real phenomenon occurring in the reservoir.

main.py

The Havlena-Odeh Method

Solving the GMBE directly for NN is difficult because it contains multiple unknowns (NN, mm, WeW_e). Havlena and Odeh (1963) rearranged the equation into a straight-line form that allows graphical (and computational) determination of these unknowns.

Straight-Line Form

Using the grouped terms (FF, EoE_o, EgE_g, EfwE_{fw}) defined above, the GMBE is already in a compact form:

F=N(Eo+Efw)+NmEg+WeF = N(E_o + E_{fw}) + NmE_g + W_e

For different reservoir types, this reduces to specific straight-line forms.

main.py

Case 1: No Gas Cap, No Water Influx (Undersaturated Reservoir)

For an undersaturated reservoir with no gas cap (m=0m = 0) and no aquifer (We=0W_e = 0), the GMBE simplifies to:

F=N(Eo+Efw)F = N(E_o + E_{fw})

A plot of FF vs. (Eo+Efw)(E_o + E_{fw}) should yield a straight line through the origin with slope NN.

main.py
main.py

A straight line through the origin confirms two things: the OOIP estimate is reliable, and the assumed drive mechanism (depletion only, no water influx, no gas cap) is consistent with the data. If the points curve upward, it suggests water influx is present. If they curve downward, the reservoir may have a gas cap that was not accounted for.

Drive Mechanism Identification

The shape of the Havlena-Odeh plot reveals which drive mechanisms are active. This is one of the most powerful diagnostic tools in reservoir engineering.

main.py

Water Influx Models

When the diagnostic indicates water influx, you need a model to estimate WeW_e at each time step. Three models are commonly used, each with different assumptions about the aquifer.

Schilthuis Steady-State Model

The simplest model. Assumes water influx is proportional to the pressure drop:

We=kΔPΔtW_e = k \sum \Delta P \cdot \Delta t

where kk is a constant determined by regression.

Fetkovich Pseudo-Steady-State Model

Treats the aquifer as a finite tank with its own compressibility and initial volume:

We=Weicaq(PiPˉaq)W_e = W_{ei} \, c_{aq} \, (P_i - \bar{P}_{aq})

where WeiW_{ei} is the initial encroachable water volume in the aquifer, caqc_{aq} is the total aquifer compressibility, and Pˉaq\bar{P}_{aq} is the current average aquifer pressure.

van Everdingen-Hurst Unsteady-State Model

The most rigorous model. Solves the radial diffusivity equation for the aquifer and uses dimensionless time and pressure functions. This model is appropriate for large or infinite aquifers where transient effects are significant.

main.py

History Matching with Material Balance

The ultimate test of a material balance model is whether it can reproduce the observed pressure-production history. History matching involves adjusting uncertain parameters (OOIP, aquifer properties, gas cap size) until the model's predicted pressure matches the measured pressure at every time step.

main.py

warningCommon Pitfalls in Material Balance

  1. Poor pressure data — Material balance requires average reservoir pressure, not wellbore pressure. Build-up tests or isobaric maps are needed.
  2. Ignoring water production — Even small volumes of produced water affect the balance, particularly in water-drive reservoirs.
  3. Using Bo at the wrong pressure — Bo, Rs, and Bg are functions of pressure. Using static values introduces systematic error.
  4. Assuming the wrong drive — If you assume depletion drive but an aquifer is present, you will overestimate OOIP.

Summary

  • Drive mechanisms determine how much oil can be recovered and how the reservoir pressure behaves. Water drive is the most efficient (30–60% recovery); solution gas drive is the least (5–30%).
  • The General Material Balance Equation is a conservation-of-mass balance that accounts for every source of energy in the reservoir. Each term represents a specific physical mechanism.
  • Havlena-Odeh rearranges the GMBE into straight-line form. The slope gives OOIP (NN), and deviations from linearity diagnose the drive mechanism.
  • F/Et trending upward indicates water influx. Trending downward suggests an unaccounted gas cap or PVT errors. Stable confirms depletion drive.
  • Water influx models range from simple (Schilthuis steady-state) to rigorous (van Everdingen-Hurst unsteady-state). The choice depends on aquifer size and data quality.
  • History matching validates the material balance model by checking whether predicted pressures match observed pressures. If they do not, the assumed OOIP or drive mechanism needs revision.
  • Material balance is only as good as its input data. Average reservoir pressure, accurate PVT properties, and reliable production records are prerequisites.

Exercises

fitness_center
Exercise 10.1Practice

-- MBE Term Identification

Write out the full GMBE from memory. Below each term, write one sentence explaining what physical mechanism it represents. Do not look at your notes u...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.2Practice

-- Undersaturated Reservoir OOIP

A Niger Delta reservoir (OML 58 analogue) has the following pressure-production data. The bubble point is 2,800 psi and all pressures are above it, so...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.3Practice

-- Drive Mechanism Diagnosis

Using the data from Exercise 10.2, calculate F/EtF/E_tF/Et​ at each pressure step and plot it against cumulative production. Is the trend stable, risi...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.4Practice

-- Solution Gas Drive

Modify the analysis from Exercise 10.2 for a reservoir that drops below its bubble point (PbP_bPb​ = 2,800 psi). Above the bubble point, RsR_sRs​ = 60...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.5Practice

-- Gas Cap Effect

A reservoir has a gas cap with mmm = 0.4. Using the data from Exercise 10.2 with BgiB_{gi}Bgi​ = 0.0008 RB/SCF, recalculate the OOIP using the full GM...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.6Practice

-- Schilthuis Water Influx

Implement the Schilthuis water influx model for an aquifer with influx constant kkk = 150 RB/psi/year. Using the pressure history from Exercise 10.2 a...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.7Practice

-- Sensitivity Analysis

The OOIP estimate depends on several input parameters. Using the undersaturated reservoir from this chapter, vary each of the following independently ...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.8Practice

-- Campbell Plot

A Campbell plot graphs F/EtF/E_tF/Et​ vs. cumulative production NpN_pNp​. If OOIP is correct, the plot should be flat (horizontal). A rising trend sug...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.9Practice

-- Recovery Factor Comparison

Using your OOIP estimate from this chapter, calculate the current recovery factor (RF=Np/NR_F = N_p / NRF​=Np​/N). Then research typical recovery fact...

arrow_forward
codePythonSolve Nowarrow_forward
fitness_center
Exercise 10.10Practice

-- Complete Material Balance Study

Combine everything from this chapter into a complete material balance study: Load the data and calculate all GMBE termsPerform Havlena-Odeh analysis a...

arrow_forward
codePythonSolve Nowarrow_forward