Skip to content

Benchmark: distance localization, a smoother case, and a quick run - #186

Merged
patnr merged 4 commits into
Python-Ensemble-Toolbox:mainfrom
patnr:benchmark-distance-loc
Oct 28, 2026
Merged

patnr merged 4 commits into
Python-Ensemble-Toolbox:mainfrom
patnr:benchmark-distance-loc

Conversation

@patnr

@patnr patnr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Three changes to the MiniRes benchmark:

  • A row for distance localization: ES-MDA with a Gaspari-Cohn taper of 300 m (the prior's range) on the field, centred on each datum's well; sor is left unlocalized. The radius is given in metres, and run.py places the tapers on each case's grid.
  • The case: the prior of the log-permeability field is now smooth (PET's "exp" variogram, exp(-3 (h/r)^1.9), all but Gaussian) instead of spherical, and the oil viscosity is known. With an uncertain viscosity ratio, much of what the wells' data say went to vo and not to the field. sor remains as the scalar unknown.
  • run.py --quick: the coarse case on its first 5 truths, in about a minute instead of twelve, printed next to the official scores on the same truths. The experiments are seeded, so any difference is due to the code.

All rows are rerun. Means over the truths:

Coarse (25 x 25, 20 truths)

misfit RMSE forecast WWCT logK RMSE logK corr sor error
prior 99.2 0.242 0.780 0.030 0.031
ES-MDA (4 steps, α = 4) 1.71 0.092 0.763 0.299 0.036
adaptive localization (universal threshold) 20.6 0.153 0.758 0.210 0.026
adaptive localization (3σ threshold) 13.5 0.124 0.750 0.262 0.029
distance localization (Gaspari-Cohn, 300 m) 8.96 0.101 0.718 0.337 0.030

Fine (50 x 50, 8 truths)

misfit RMSE forecast WWCT logK RMSE logK corr sor error
prior 99.0 0.247 0.817 -0.072 0.028
ES-MDA (4 steps, α = 4) 1.83 0.098 0.793 0.355 0.031
adaptive localization (universal threshold) 33.3 0.173 0.793 0.153 0.031
adaptive localization (3σ threshold) 16.4 0.158 0.761 0.290 0.034
distance localization (Gaspari-Cohn, 300 m) 12.4 0.112 0.732 0.402 0.034

Checked locally: the benchmark's smoke test, the distance-localization tests, and ruff.

🤖 Generated with Claude Code

patnr and others added 4 commits October 28, 2026 10:43
A distance localization gives its radius in metres; run.py places a taper of
that radius at each datum's well, on the case's grid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The prior's variogram is now PET's "exp" (exp(-3 (h/r)^1.9), all but
Gaussian) instead of spherical, and the oil viscosity is no longer
an unknown. The results are rerun.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…same truths

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@patnr
patnr merged commit ff0994d into Python-Ensemble-Toolbox:main Oct 28, 2026
4 checks passed
@patnr
patnr deleted the benchmark-distance-loc branch October 29, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant