Ocean model validation, without the busywork

Point OceanVal at your model output. It matches simulation results against trusted observational datasets, computes the statistics, and builds a polished, shareable HTML report — all in a few lines of Python.

  • Validate CF-compliant simulation output
  • Save hassle with recipes that download and validate against popular ocean datasets
  • Build a shareable HTML report in three function calls
  • Compare multiple simulations side by side
  • Auto-generates bias, RMSD, correlation, and Taylor diagrams
validate.py
import oceanval

oceanval.add_gridded_comparison(
    name="temperature",
    model_variable="thetao",
    recipe={"temperature": "woa23"},
    start=2005, end=2014,
    climatology=True,
)

oceanval.matchup(sim_dir="/path/to/model/output",
                start=2005, end=2014)

oceanval.validate()  # -> a full HTML report
How it works

Register, match, report

OceanVal turns model validation into a repeatable three-step pipeline, so you spend time interpreting results instead of wrangling files.

1

Register observations

Point at a built-in recipe — WOA23, COBE2, OCC-CI, GLODAP, NSBC — or register your own gridded or in-situ data.

2

Match with matchup()

OceanVal scans your simulation directory, regrids where needed, and pairs model values with observed values, like-for-like.

3

Report with validate()

Bias, RMSD, correlation, seasonality and spatial patterns are computed and written to a shareable HTML report — built from editable notebooks.

Why OceanVal

Everything you need for a rigorous validation

Built by ocean modellers, for ocean modellers — so the defaults are sensible and the escape hatches are there when you need them.

Fast to first result

Install from conda-forge and validate a simulation the same day, not after weeks of scripting.

Built-in observation recipes

WOA23, COBE2, OCC-CI, GLODAP and NSBC datasets are ready to use — downloaded and processed for you.

Rigorous statistics

Bias, RMSD, correlation, seasonality, spatial patterns and vertical profiles, computed on matched data.

Publication-quality reports

A shareable HTML report with figures, tables and methods documented automatically, ready to send to collaborators.

Works with your model

NEMO, CMEMS, CMIP-style output, and any CF-compliant NetCDF. FVCOM is supported via preprocessing.

Compare simulations

Build side-by-side comparison reports for multiple runs with a single oceanval.compare() call.

See it in action

A report your collaborators will actually read

Every validate() run produces a self-contained HTML report: climatology and bias maps, seasonality plots, spatial correlation tables, vertical profiles, and a documented methods section — generated from Jupyter notebooks you can inspect and rebuild.

Open a live example report
pmlmodelling.github.io/oceanval_docs/example-report
Bias-0.14 °C
RMSD0.62 °C
Correlation0.94
terminal
# install
conda install -c conda-forge oceanval

# from an empty working directory
import oceanval

oceanval.add_point_comparison(
    name="nitrate", source="ICES",
    model_variable="no3", obs_path="obs/",
)

oceanval.matchup(sim_dir="model/", start=2005, end=2014, cores=4)
oceanval.validate()
Get started in minutes

From raw NetCDF to a validation report

Work from a fresh directory, register the datasets you care about — built-in recipes or your own files — then run matchup() and validate(). OceanVal handles regridding, unit conversion, and figure generation for you.

  • Works with directories of NetCDF files, or year/month subfolders.
  • Vertical profiles supported wherever cell thickness is available.
  • Rebuild a report after editing its notebooks with oceanval.rebuild().
Read the quickstart
Trusted datasets

Validate against the observational data you already trust

19 built-in recipes cover global and Northwest European Shelf observations — no manual downloads, no metadata wrangling.

Browse all recipes

Ready to validate your model?

Install OceanVal from conda-forge and go from raw model output to a shareable report today.