BENCHMARKS
Benchmarks
Converge results set against published reference solutions, the published equations and hand calculations. Each case gives the reference, the tolerance and the result, and says plainly what has not been validated yet. The cases run as named tests in the Converge test suite.
SUMMARY
Where the engines stand
An independent audit on 15 October 2026 recomputed 30 Converge results by hand or with independent code. For the synthetic cases the data were built from known answers, so the truth is exact. 25 passed first time. The five failures were in defaults, reference points and uncertainty bands, not in the core physics. Four of them are fixed and now pass. The fifth is a method fix whose single test case is still marginal, and we say so below.
- Validation cases
- 30
- Pass in the test suite
- 29
- Marginal, stated
- 1
- Typical tolerance
- 0.05–3%
Values are in oilfield units, as the published references give them. Status as of 15 October 2026.
RESERVOIR SIMULATION
SPE1: the first SPE comparative solution project
Odeh, A. S. (1981), "Comparison of Solutions to a Three-Dimensional Black-Oil Reservoir Simulation Problem", Journal of Petroleum Technology 33(1), SPE 9723. A 10 × 10 × 3 grid, one gas injector and one producer over ten years. Converge ships the case built in.
| Quantity | Published behaviour | Converge | Tolerance | Status |
|---|---|---|---|---|
| Oil-rate plateau | 20,000 STB/d | 20,000 STB/d | 1 STB/d | Pass |
| Producer switches from rate to pressure control | Near day 1,000 | Day 973 | Day 800 to 1,300 | Pass |
| Peak average reservoir pressure | Near 6,400 psia | 6,423 psia | 6,100 to 6,700 psia | Pass |
| Field oil rate, GOR, well bottom-hole pressures, block pressures | Published reference run from an industry-standard simulator, 11 report times to day 3,650 | 1% · 2.5% · 2% · 3% | Worst difference shown | Pass |
| Material-balance closure | Mass conserved every step | 9.3 × 10⁻⁸ | Below 10⁻⁶ of pore volume | Pass |
The run takes 132 time steps and about 1.4 seconds on a single laptop core. A one-dimensional Buckley-Leverett case puts the water front within three cells of the analytical Welge construction.
V1–V30
The 30 audited validation cases
Each case is now a named test. "Fixed" means the case failed in the audit, the cause was corrected and the test now passes.
| Case | Calculation | Reference | Tolerance | Status |
|---|---|---|---|---|
| V1 | Standing bubble point, 35 °API, gas gravity 0.75, 650 scf/STB, 200 °F | 2,748 psia (hand calculation) | ±1.6 psi | Pass |
| V2 | Standing bubble point, 32 °API, 0.72, 520 scf/STB, 205 °F | 2,601 psia | ±1.6 psi | Pass |
| V3 | Standing oil formation volume factor at the bubble point, both fluids | 1.375 and 1.3037 rb/STB | 0.0005 rb/STB | Pass |
| V4 | Beggs-Robinson live-oil viscosity at the bubble point, both fluids | 0.4927 and 0.6185 cp | 0.1% | Pass |
| V5 | Oil density at the bubble point | 695.0 kg/m³ | 0.1% | Pass |
| V6 | Z-factor, Dranchuk-Abou-Kassem with Sutton, at four pressures | See the Z-factor table | 0.05% | Pass |
| V7 | McCain water-viscosity pressure correction at 5,000 psia | +28% | ±0.5 point | Pass |
| V8 | Plus-fraction split keeps the C7+ molecular weight | 218.0 g/mol | 10⁻⁶ g/mol | Pass |
| V9 | Gas formation volume factor at 3,000 psia | 0.000983 rb/scf | 10⁻⁶ rb/scf | Pass |
| V10 | Material balance oil in place, volumetric tank built from a known N, no aquifer | 45.00 MMSTB | 1% | Pass |
| V11 | The same tank with an aquifer it does not have | Must not report a wrong N | Fit blocked, reasons shown | Fixed |
| V12 | Material balance history match on the sample tank | 150 MMSTB | 3% | Pass |
| V13 | History-match P90–P10 band contains the truth | 150 MMSTB inside the band | Coverage at least 80% over 10 synthetic histories | Fixed |
| V14 | Flowing material balance oil in place | Known synthetic truth | 1% | Pass |
| V15 | Arps fit to a synthetic well, qi 3,500 STB/d, Di 60%/yr, b 0.70 | The generating parameters | Exact data: 3 decimals. 3% noise: 5% on qi | Pass |
| V16 | Arps EUR to a 30-year cap | 4.78 MMSTB | 0.005 MMSTB | Pass |
| V17 | Exponential and harmonic EUR | Closed forms: 1,980 and 9,210 STB | 0.5 STB and 5 STB | Pass |
| V18 | Decline bootstrap P90–P10 contains the truth | Coverage at least 80% over 12 synthetic wells | Observed 10 of 12 | Marginal |
| V19 | Horner slope and permeability, synthetic build-up with k = 180 md | 26.43 psi/cycle, 180 md | 3% | Pass |
| V20 | Horner extrapolated pressure p* | 3,650 psia | 2 psi | Pass |
| V21 | Skin from the same build-up, Horner and log-log | +4.5 | ±0.3 | Fixed |
| V22 | Log-log radial-flow permeability | 180 md | 3% | Pass |
| V23 | Hydrostatic gradient in the well model | 18.06 lbm/ft³ gives 0.1254 psi/ft | 10⁻⁴ psi/ft | Pass |
| V24 | Unit conversion on import, 40 m³/d and 25 barg | 251.59 bbl/d and 377.29 psia | Exact to 2 decimals | Pass |
| V25 | Royalty and income tax, every year of a 10-year case | Independent hand calculation | 10⁻⁶ | Pass |
| V26 | NPV at 10%, mid-period discounting | Independent sum of discounted cash flows | 10⁻³ | Pass |
| V27 | IRR | Root of the NPV equation | 10⁻⁹ | Pass |
| V28 | SPE1 (Odeh 1981) | Published behaviour | See the SPE1 table | Pass |
| V29 | Surface network mass balance at every node | Mass in equals mass out | 10⁻⁹ | Pass |
| V30 | Network gas accounting with gas lift | Formation gas plus lift gas equals gas arrived; sales gas equals formation gas | 10⁻⁶ | Fixed |
V18: the bootstrap method was corrected and meets its 80% coverage target across 12 synthetic wells. On the one sample well the audit used, the true EUR still sits just above the P10, which an 80% band will do about one time in ten. We did not tune the seed or widen the band to force it in. V25–V27: the auditor's own case data were not published, so an equivalent hand-built 10-year case is checked instead.
FLUIDS
PVT correlations against the published equations
Each correlation is coded from the original paper and checked against a hand calculation from the same equation. Results for the V1 fluid: 35 °API, gas gravity 0.75, 650 scf/STB, 200 °F.
| Property | Published source | Hand calculation | Converge | Status |
|---|---|---|---|---|
| Bubble point | Standing (1947) | 2,748 psia | 2,747.8 psia | Pass |
| Oil FVF at the bubble point | Standing (1947) | 1.375 rb/STB | 1.3749 rb/STB | Pass |
| Live-oil viscosity | Beggs and Robinson (1975) | 0.4927 cp | 0.4924 cp | Pass |
| Bubble point and FVF | Vasquez and Beggs (1980), Glasø (1980), Petrosky and Farshad (1993), Al-Marhoun (1988) | Hand calculation per set | Matches; the bubble point inverts back to the input GOR | Pass |
| Water viscosity pressure correction | McCain (1990) | +28% | +28% | Pass |
| Sour-gas correction | Wichert and Aziz (1972) | Hand calculation of ε | Matches | Pass |
The equation-of-state engine is checked separately. Bubble and dew points for the SPE5 oil and a gas condensate, in Peng-Robinson and SRK, match an independent open-source implementation within 0.01%, and two-phase flash compositions within 1 × 10⁻⁵. Pure-component vapour pressures sit within 3% of NIST data.
GAS
Z-factor: Dranchuk and Abou-Kassem
Dranchuk, P. M. and Abou-Kassem, J. H. (1975), Journal of Canadian Petroleum Technology 14(3), with Sutton (1985) pseudo-critical properties. Gas gravity 0.7, 200 °F.
| Pressure | Hand calculation | Converge | Difference | Status |
|---|---|---|---|---|
| 1,000 psia | 0.9215 | 0.9213 | 0.02% | Pass |
| 3,000 psia | 0.8883 | 0.8880 | 0.03% | Pass |
| 5,000 psia | 0.9999 | 0.9997 | 0.02% | Pass |
| 10,000 psia | 1.4308 | 1.4310 | 0.01% | Pass |
Tolerance 0.05%. The gas FVF at 3,000 psia is 0.000983 rb/scf, as in V9.
WELL TEST
Horner and log-log on a synthetic build-up
A drawdown of 48 hours at 800 STB/d, then 72 hours shut in, generated from the line-source solution with superposition. Known answer: k = 180 md, skin +4.5, initial pressure 3,650 psia. Net pay 32.8 ft, porosity 0.20, total compressibility 1 × 10⁻⁵ 1/psi, viscosity 1 cp, FVF 1.2 rb/STB.
| Result | Known answer | Converge | Tolerance | Status |
|---|---|---|---|---|
| Horner slope | 26.43 psi/cycle | 26.46 psi/cycle | 3% | Pass |
| Horner permeability | 180 md | 179.8 md | 3% | Pass |
| Extrapolated pressure p* | 3,650 psia | 3,650.0 psia | 2 psi | Pass |
| Skin, Horner | +4.5 | +4.47 | ±0.3 | Pass |
| Permeability and skin, log-log derivative | 180 md, +4.5 | Within tolerance | 3%, ±0.3 | Pass |
| Deconvolution of a multi-rate test, von Schroeter, Hollaender and Gringarten (2004) | Known unit-rate response | Recovered | 5%, or 10% with 0.05 psi gauge noise | Pass |
The slope reference is m = 162.6 qBμ / kh. The model library is also checked against the published analytical limits: Theis (1935), van Everdingen and Hurst (1949), Gringarten, Ramey and Raghavan (1974), Cinco-Ley and Samaniego (1981) and Warren and Root (1963). Earlougher (1977) Example 5.1 gives k = 12.8 md and skin 8.6; Converge matches both within 5%.
DECLINE
Arps decline
Arps, J. J. (1945), "Analysis of Decline Curves", Transactions of the AIME 160. A 36-month synthetic history from qi = 3,500 STB/d, Di = 60%/yr, b = 0.70.
| Result | Known answer | Converge | Tolerance | Status |
|---|---|---|---|---|
| Fitted qi, exact data | 3,500 STB/d | 3,500 STB/d | 1 STB/d | Pass |
| Fitted Di and b, exact data | 60%/yr, 0.70 | 60.0%/yr, 0.700 | 3 decimals | Pass |
| Fitted qi, Di and b with 3% noise | The generating values | Recovered | 5%, 8 points, 0.15 | Pass |
| EUR to a 30-year cap | 4.78 MMSTB | 4.78 MMSTB | 0.005 MMSTB | Pass |
| Rate and cumulative, Arps b 0 to 1.5, modified hyperbolic, Duong, stretched exponential | Independent open-source decline library | Matches | 10⁻⁶ relative | Pass |
MATERIAL BALANCE
Material balance on a known-N tank
Havlena, D. and Odeh, A. S. (1963), "The Material Balance as an Equation of a Straight Line", Journal of Petroleum Technology 15(8). A volumetric oil tank whose production and pressure history were built from N = 45 MMSTB.
| Case | Reference | Converge | Tolerance | Status |
|---|---|---|---|---|
| Volumetric tank, no aquifer | N = 45.00 MMSTB | 45.03 MMSTB | 1% | Pass |
| Same tank, wrong aquifer switched on | No wrong answer shown | Fit blocked as not reliable | — | Fixed |
| Infinite radial aquifer influx | Ahmed (2006), Example 10-4 | Constant and influx at 6 and 12 months | 0.5% | Pass |
| Underground withdrawal F, every row | Ahmed (2006), Example 11-1 | Reproduced | 0.01 Mbbl | Pass |
| Oil flowing material balance | Analytical closed-circle solution | N and b_pss | 2% | Pass |
| Gas flowing material balance | Pseudo-steady gas tank, known G | 0.04% | 1% | Pass |
ECONOMICS
NPV and IRR
Discounted cash flow is checked against hand sums and an independent open-source finance library. The simplest case to check yourself: −100 then 30 a year for five years, end-of-period discounting at 10%.
| Result | Hand calculation | Converge | Tolerance | Status |
|---|---|---|---|---|
| NPV at 10% | 12.476 | 12.476 | 10⁻³ | Pass |
| IRR | 15.24% | 15.24% | 10⁻⁹ | Pass |
| Royalty and tax rows, 10-year case | Independent loop, every year | Matches | 10⁻⁶ | Pass |
| Production-sharing arithmetic | Hand sheet: cost-oil cap, R-factor tier, tax, government take | Matches | 10⁻⁹ | Pass |
The Nigeria PIA 2021 fiscal templates are screening values coded from the Act's schedules. They are not tax advice and are not part of this benchmark.
WELLS
Vertical lift and inflow
The multiphase-flow correlations are checked against three independent open-source implementations. No textbook worked example with a stated answer was found for these correlations, so the agreement is with independent code.
| Item | Reference | Agreement |
|---|---|---|
| Beggs and Brill (1973) | Two independent implementations, 14 flow states | 0.1% |
| Gray (1974) | Two independent implementations, 14 flow states | 0.2% |
| Duns and Ros (1963) | Independent implementation, bubble, slug and mist flow | 1% |
| Whole gas-well traverse, 10,000 ft, dry and wet | Independent implementation | 0.02–0.18% |
| Single-phase liquid traverse, deviated well | Exact hydrostatic plus Colebrook friction | 10⁻⁹ |
LIMITS
What is not yet validated
These are open. None of them is claimed as validated anywhere in the product.
- The full EOS phase envelope against an independent commercial PVT package. Saturation points and flashes are checked; the whole envelope is not.
- The surface network against independent network-modelling tools. Mass balance and gas accounting close, but no external comparison has been made.
- The integrated forecast against independent integrated-asset tools. It agrees with Converge's own material balance engine within 0.1 psi.
- SPE9 is only a partial match: oil rate tracks the reference, but water production does not. SPE3 has not been attempted. Neither is claimed.
- Gas rate-transient type curves, wax and asphaltene models, and several printed textbook well-test examples.
REPRODUCE
Run the cases yourself
Every case above can be rerun in your own account. Open Integrations and use the scripting editor, or call the same functions over the REST API or MCP. The Sample field's fluid is the V1 fluid, so its PVT page shows the 2,748 psia bubble point straight away.
SPE1
const r = converge.sim.run({ preset: 'spe1' });
table(r.field, 'SPE1 field results');PVT and Z-factor
converge.pvt.blackOilTable({
fluid: { kind: 'black-oil', api: 35, gasSG: 0.75,
gor: 650, reservoirT: 200 } });
converge.pvt.gasProperties({
psia: 3000, TF: 200, gasSG: 0.7 });Well test
const s = converge.welltest.synthetic({
reservoir: { k: 180, h: 32.808, phi: 0.2, ct: 1e-5, mu: 1,
B: 1.2, rw: 0.3, skin: 4.5, C: 0.001 },
pi: 3650, q: 800, tpHr: 48, shutInHr: 72,
pointsPerPeriod: 70, boundary: { kind: 'infinite' } });
const b = s.buildup;
converge.welltest.horner({ dtHr: b.dtHr, pws: b.pws,
tpHr: b.tpHr, pwf: b.pwf, window: [5, 70],
fluid: { q: 800, B: 1.2, mu: 1, h: 32.808,
phi: 0.2, ct: 1e-5, rw: 0.3 } });Decline, material balance, NPV
// points: [{ t: days, q: STB/d }, ...]
converge.dca.fit({ kind: 'arps', points });
converge.mbal.analyse(converge.example('mbal.analyse'));
converge.econ.metrics({
cashFlows: [-100, 30, 30, 30, 30, 30],
discountRates: [0.1], discounting: 'end-period' });Inputs are in oilfield units by default. Call converge.setUnits('metric') to work in bara, °C and Sm³.