What it does
Oil and gas wells produce less every month as the reservoir pressure near the well falls. Decline curve analysis fits a smooth curve to a well’s history and runs it forward to estimate how much more the well will produce. The usual curves are the three of Arps (1945):
- Exponential (b = 0): the rate falls by the same fraction every year. q = qi·e^(−Di·t). The most cautious forecast.
- Hyperbolic (0 < b): the yearly decline itself slows down over time. q = qi / (1 + b·Di·t)^(1/b).
- Harmonic (b = 1): a special hyperbolic case, often an upper bound for conventional wells.
This tool fits all three by nonlinear least squares, gives each parameter with its standard error, forecasts to your economic limit (the rate below which the well no longer pays), and reports EUR (estimated ultimate recovery), production so far and remaining reserves. It plots the fit on a linear and a log rate axis. Everything runs in your browser; your data never leave the device.
How to use it
- Paste or open your data: time in the first column and rate in the second. Time can be days, months or years from any start, or calendar dates (2024-03-01 or 2024-03). Rows with a zero rate (shut-in months) are left out.
- Units: say what the time column counts and whether the rate is per day, per month or per year. The volume unit (bbl, Mscf, m³) is only a label.
- Model for the forecast: the table at the bottom always shows all three, so you can compare their fits and EUR.
- Fit to: rates (standard least squares) or log of rates, which gives late, low rates more weight. Try both; a big difference means the data do not pin the curve down well.
- Largest b allowed: b above 1 often appears in tight and shale wells during long transient flow. It can give a very large EUR, so use a terminal decline (for example 6 % per year) to switch to exponential decline later in life.
- Use points from: leave out early clean-up or ramp-up months.
- Economic limit and longest forecast decide where the forecast stops.
Worked example
The made-up example well has 36 months of oil rates, from 808.8 down to 150.7 bbl/d. The hyperbolic fit to the rates gives qi = 799.9 bbl/d (± 5.9), Di = 1.06 per year nominal (an effective first-year decline of 54.7 %) and b = 0.711 (± 0.039), with R² = 0.9980. With an economic limit of 20 bbl/d the rate reaches the limit at month 203.44, about 14 years after the last data point. Production to date is 358,473 bbl (trapezoid rule over the data), the remaining reserves are 264,221 bbl and the EUR is 622,694 bbl.
The comparison table shows why the model choice matters: the exponential fit (R² 0.9760) gives an EUR of 415,626 bbl and the harmonic fit 845,328 bbl, from the same data.
Tips
- Plot the data on the log axis first. A straight line there means exponential decline; upward curvature means b > 0.
- Fit only a period with steady operation. A change in choke, artificial lift or a workover starts a new decline.
- Report the range: the exponential and hyperbolic EURs bracket most reasonable answers.
FAQ
What is the difference between nominal and effective decline? Nominal decline D is the instantaneous rate −(dq/dt)/q. Effective decline is the drop over a period, here the first year: 1 − q(1 year)/qi.
Why is EUR so large with b above 1? For b ≥ 1 the cumulative grows without limit as time goes on, so the economic limit or the terminal decline is what stops it.
Is this a reserves booking? No. It is a study and planning aid; reserves reports follow the rules of your regulator or the SPE-PRMS and need a qualified evaluator.
Is my data uploaded? No. All fitting happens in your browser and it works offline.
Where the numbers come from
- Arps, J. J. (1945), Analysis of decline curves, Transactions of the AIME 160, 228 to 247: the exponential, hyperbolic and harmonic rate equations and their cumulative forms, written by fibub from the equations.
- Terminal (modified hyperbolic) decline: the common industry practice of switching to exponential decline at a minimum decline rate, as described in petroleum engineering textbooks.
- Fits checked against SciPy's curve_fit, cumulatives against numerical integration (scipy.integrate.quad); used only for testing, no code copied.
- The example well is made up by fibub for illustration.
Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.
Last updated 2026-11-09.