Every hour of sea, against every contour.
An environmental contour is the line an offshore designer reads a fifty-year sea state off. Nine groups drew theirs for six metocean datasets in one benchmarking exercise, and the organizers scored each by counting the hourly observations outside it. Here every submitted contour is drawn over the 1,840,824 hours it was scored on, with the count re-decided exactly — 173 of the paper's 176 printed numbers reproduce to the integer, 30 of the 150 contours cross themselves — and any sea state you click or type is decided INSIDE, OUTSIDE or ON by the same code that decided the ledger. The report is re-decided to the last point.
The grey field is a 90×54 count of the full dataset's hours (provided and retained), darker where more hours sit; it is a drawing. The solid line is the submitted contour, vertex to vertex in the file's order and closed from its last vertex to its first, as the benchmark closed it. A dashed diamond is a self-crossing: its number is decided, its position is drawn in float. A ring is an observation exactly on the contour. Click anywhere to decide a sea state.
The long-return-period contours, exact counts
Hourly observations outside each 20-year (A–C) or 50-year (D–F) contour in the full dataset, decided exactly; a † marks a contour that is not a simple polygon; +n counts observations exactly on the contour. Click a cell to draw it.
| contribution · method | A · 20-yr | B · 20-yr | C · 20-yr | D · 50-yr | E · 50-yr | F · 50-yr |
|---|---|---|---|---|---|---|
| 1 · ISORM · total | 153 | 127 | 62 | 154 | 86 | 71 |
| 2 · DSCM · marginal | 437 † | 236 † | 187 | 514 † | 720 | 355 † |
| 3 · IDSCM · total | 68 | 28 | 33 | 154 | 82 | 72 |
| 4 · HDCM · total | 1 † | 32 | 8 | 3 | 8 | 0 |
| 5 · DIFORM · marginal | 8,503 † | 12,573 | 29,216 | 174 | 112 | 182 |
| 6 · IFORM · marginal | 27 | 14 | 9 | 3 | 17 | 5 |
| 7 · IFORM · marginal | 79 | 4 † | 23 | 3 | 16 | 7 |
| 8 · IFORM · marginal | 189 | 368 | 409 | 509 | 110 | 167 |
| 9 DS · DSCM · marginal | 22,504 † | 22,933 † | 20,462 † | 17,460 | 17,226 † | 11,217 |
| 9 DS s. · DSCM, smoothed · marginal | 5,096 † | 7,716 † | 5,376 † | 5,092 | 6,782 | 5,440 |
| 9 IFORM · IFORM · marginal | 22,514 | 22,990 | 20,480 | 17,415 | 17,184 | 11,202 |
For a total-exceedance contour (ISORM, IDSCM, HDCM) the paper's expected count on the full data is 1; for an IFORM contour about 11.5 on A–C and 11.9 on D–F — both certified on the report page. A contour that leaves the low-Hs region outside (the direct-sampling and declustered ones) is exceeded by every calm hour, which is why some cells run to five figures; the paper's threshold column, in the panel above, is the count that matters for a structure.
What decides it, and what it is worth
The decider in this tab is instruments/ecbench/geometry.js, inlined byte for byte: the even-odd crossing count of a horizontal ray, every predicate the sign of a 2×2 determinant computed first in float64 and trusted only under a proved forward-error bound, otherwise re-decided in BigInt at a fixed decimal scale. A click becomes a literal at the data's own resolution (four decimals) and the verdict is about that literal. A point on an edge or a vertex is ON — the third answer a float test does not have, and the answer for the two observations the ledger found sitting exactly on a submitted contour.
It decides geometry, not design. Which construction an offshore designer should use is a modelling question this page does not touch; a count of exceedances is the benchmark's own metric taken on its own terms; and a self-crossing polygon is a fact about a file, not necessarily about the method that produced the boundary it lists. The datasets are NDBC's and WDCC's and are drawn here only as a density.
node tools/fetch-ec-benchmark.js
node tools/run-ecbench-ledger.js
node instruments/ecbench/battery.js
node playground/build.js