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.
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
OceanVal turns model validation into a repeatable three-step pipeline, so you spend time interpreting results instead of wrangling files.
Point at a built-in recipe — WOA23, COBE2, OCC-CI, GLODAP, NSBC — or register your own gridded or in-situ data.
matchup()OceanVal scans your simulation directory, regrids where needed, and pairs model values with observed values, like-for-like.
validate()Bias, RMSD, correlation, seasonality and spatial patterns are computed and written to a shareable HTML report — built from editable notebooks.
Built by ocean modellers, for ocean modellers — so the defaults are sensible and the escape hatches are there when you need them.
Install from conda-forge and validate a simulation the same day, not after weeks of scripting.
WOA23, COBE2, OCC-CI, GLODAP and NSBC datasets are ready to use — downloaded and processed for you.
Bias, RMSD, correlation, seasonality, spatial patterns and vertical profiles, computed on matched data.
A shareable HTML report with figures, tables and methods documented automatically, ready to send to collaborators.
NEMO, CMEMS, CMIP-style output, and any CF-compliant NetCDF. FVCOM is supported via preprocessing.
Build side-by-side comparison reports for multiple runs with a single oceanval.compare() call.
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.
# 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()
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.
oceanval.rebuild().19 built-in recipes cover global and Northwest European Shelf observations — no manual downloads, no metadata wrangling.