Exercise 13.9
ESP vs. Gas Lift Economic Comparison
A well can be put on either an ESP (capital cost 5/STB, expected rate 2,200 STB/d) or gas lift (capital cost 8/STB, expected rate 1,800 STB/d). Oil price is $75/bbl. Calculate the NPV of each option over 5 years assuming 15% annual decline. Which is more profitable?
---
This is a discounted-cash-flow (DCF) decision. Each artificial-lift option is a project: spend capital up front (capex), then earn the spread between oil price and per-barrel operating cost on every barrel produced, while the well declines year over year. The option with the higher net present value (NPV) wins.
The book gives no discount rate, so we use a standard corporate hurdle rate of 10% (DISCOUNT_RATE = 0.10): money next year is worth less than money today. All other numbers are taken verbatim from the book exercise and embedded for you:
OIL_PRICE = 75.0 # $/bbl
ANNUAL_DECLINE = 0.15 # fraction per year
YEARS = 5
DISCOUNT_RATE = 0.10 # hurdle rate (book omits; standard 10%)
DAYS_PER_YEAR = 365.0
ESP = {'capex': 350000.0, 'opcost': 5.0, 'rate0': 2200.0}
GAS_LIFT = {'capex': 150000.0, 'opcost': 8.0, 'rate0': 1800.0}Your tasks:
- Write
lift_npv(capex, opcost, rate0, price, decline, years, disc, days_per_year=365.0):
- For each year
yfrom1toyears, the start-of-year rate is
rate = rate0 (1 - decline) * (y - 1) (STB/d).
annual_oil = rate * days_per_year(STB that year).cash_flow = annual_oil * (price - opcost)(the net dollars that year).- Discount it to today by dividing by
(1 + disc) ** y. NPV = -capex + sum(discounted cash flows). Return afloat.
- Write
compare_lift(esp, gas_lift, price, decline, years, disc):
- Call
lift_npvfor each option (each dict supplies itscapex,opcost,
rate0).
- Return the tuple
(npv_esp, npv_gl, better)wherebetteris the string
'ESP' or 'GAS_LIFT', whichever NPV is higher.
- Produce the module-scope answers:
``python npv_esp, npv_gl, better = compare_lift(ESP, GAS_LIFT, OIL_PRICE, ANNUAL_DECLINE, YEARS, DISCOUNT_RATE) ``
> Think about it: the ESP costs more than twice as much up front, yet it still > wins. Why? It produces at a higher rate (2,200 vs. 1,800 STB/d) and costs less > per barrel to run (8). Two advantages that compound across five years of > 365-day cash flows easily swamp a $200,000 capex gap. Discounting shrinks later > years. Would a much higher hurdle rate ever flip the decision?
Stuck? Reveal hints one at a time — they progress from nudge to near-solution.
visibilityReveal reference solutionexpand_more
Try solving it yourself first — the hints walk you through it. The solution below is one valid approach; yours may differ and still be correct.
# ── Verified OML economic constants (do not edit) ────────────────────────
# Book Exercise 13.9 values; discount rate is the standard 10% hurdle rate
# (the book omits it, so it is an explicit parameter here).
OIL_PRICE = 75.0 # oil price, $/bbl
ANNUAL_DECLINE = 0.15 # production decline, fraction per year
YEARS = 5 # evaluation horizon
DISCOUNT_RATE = 0.10 # hurdle rate (book omits; standard 10%)
DAYS_PER_YEAR = 365.0 # producing days per year
ESP = {'capex': 350000.0, 'opcost': 5.0, 'rate0': 2200.0} # electric submersible pump
GAS_LIFT = {'capex': 150000.0, 'opcost': 8.0, 'rate0': 1800.0} # gas lift
def lift_npv(capex, opcost, rate0, price, decline, years, disc, days_per_year=365.0):
"""Discounted-cash-flow NPV of an artificial-lift option.
For year y in 1..years:
rate = rate0 * (1 - decline) ** (y - 1) # start-of-year rate, STB/d
annual_oil = rate * days_per_year # STB that year
cash_flow = annual_oil * (price - opcost) # net $ that year
discounted = cash_flow / (1 + disc) ** y
NPV = -capex + sum(discounted). Return a float.
"""
npv = -capex
for y in range(1, years + 1):
rate = rate0 * (1 - decline) ** (y - 1)
annual_oil = rate * days_per_year
cash_flow = annual_oil * (price - opcost)
npv += cash_flow / (1 + disc) ** y
return float(npv)
def compare_lift(esp, gas_lift, price, decline, years, disc):
"""Return (npv_esp, npv_gl, better) where better is 'ESP' or 'GAS_LIFT'.
Each option dict supplies its own capex, opcost, and rate0.
`better` is whichever option has the higher NPV.
"""
npv_esp = lift_npv(esp['capex'], esp['opcost'], esp['rate0'],
price, decline, years, disc)
npv_gl = lift_npv(gas_lift['capex'], gas_lift['opcost'], gas_lift['rate0'],
price, decline, years, disc)
better = 'ESP' if npv_esp > npv_gl else 'GAS_LIFT'
return npv_esp, npv_gl, better
npv_esp, npv_gl, better = compare_lift(ESP, GAS_LIFT, OIL_PRICE,
ANNUAL_DECLINE, YEARS, DISCOUNT_RATE)
print("NPV ESP ($):", npv_esp)
print("NPV Gas Lift ($):", npv_gl)
print("Better option :", better)
lockCopying code is a Full Access feature.