FAQ
Straight answers.
Does haql-engine replace Eclipse or CMG?
No. It audits their output and cross-checks the physics. The engine is an independent implementation for verification, not a production simulator; it supports SPE1-class Cartesian decks today, not full-field corner-point models.
Is it faster?
No. On SPE1 it is about 10× slower than OPM Flow at the loose setting and 25–40× slower at the tolerance that passes its 1e-6 mass-balance gate. The value is independent verification, not speed.
What exactly does the audit check?
Field material balance from the run's own in-place and cumulative vectors; Newton convergence and solver-log health; cell-by-cell pressure, saturation, BHP, oil rate and water cut against a reference; and input integrity — PVT, relperm, grid, units and schedule. It does not judge geology, upscaling, SCAL or history match.
What if my run has no balance vectors?
The audit can instrument the deck with output-only FOIP/FWIP/FGIP vectors and re-run it in OPM Flow, then audit the re-run. The report records both runs and says the re-run is an independent reproduction, not your original run. Without that, the gate is UNKNOWN, not passed.
Can we reproduce an audit years later?
Yes, and it is designed for that. Every audited input is hashed into a provenance manifest (deck, every INCLUDE file, the gates; the full run tree with --hash-run). The report ID is derived from that content, so relocating the evidence or moving machines does not change it. --selfcheck re-runs the audit twice and requires byte-identical output; doctor.py prints the environment passport. No wall clock enters the report unless you explicitly stamp a date.
We re-run our history match every quarter. Can you audit all of it?
That is the intended cadence. ensemble.py audits every realisation with the same pre-registered gates in sorted, auditable order and reports the worst run and the residual spread — a match fair on average but loose on individual realisations is flagged. deckdiff.py then diffs this quarter's deck against the last: input or schedule changes are listed value-by-value, and any physics-class change fails the audit so a silent model swap cannot pass. Your pinned reference run is stored by SHA and proved unchanged at every use.
What if a forecast revision quietly changed the model?
The diff audit classes every changed keyword (grid, PVT, relperm, solution section versus schedule) and exits as a failure when the physics class moved. Value-level tables show exactly which numbers moved and by how much, including repetition defaults.
Has a client used it?
Not yet. The evidence on this page is from the public SPE1 benchmark and Equinor's public Norne field case. The first client engagement is a pilot, with success criteria signed before work starts.