Skip to content

Every dataset on one grid. Read only what you need.

Reanalyses, climate model output, campaign data and satellite products, remapped once onto the same equal-area HEALPix grid and served as multi-resolution Zarr pyramids over S3. Nothing to download and nothing to regrid. Explore at a coarse level, analyse at a fine one, and compare datasets cell by cell.

A field on the HEALPix sphere, drawn with level 2 cells everywhere and level 5 cells over the North Atlantic and Europe.
Level 2, 192 cells for the globeLevel 5, 64 cells inside each of those

Collections published so far. The Data Browser searches them by variable, level and frequency and gives you the store URL.

  • CMIP6Coupled Model Intercomparison Project Phase 6s3://cmip6/healpix/
  • CORDEXCoordinated Regional Climate Downscaling Experiments3://cordex/healpix/
  • DYAMONDGlobal storm-resolving intercomparisons3://dyamond/healpix/
  • EERIEEddy-Rich Earth System Modelss3://eerie/healpix/
  • ICDCIntegrated Climate Data Centers3://icdc/healpix/
  • ICON-DREAMDWD ICON Reanalysiss3://icon-dream/healpix/
  • nextGEMSnext Generation Earth Modelling Systemss3://nextgems/healpix/
  • ObservationsVarious observational datasets, grid and swath productss3://obs/healpix/
  • PalModPaleoclimate Modelling initiatives3://palmod/healpix/
  • ReanalysisReanalysis data for Ocean and Atmospheres3://reanalysis/healpix/
  • XSpiescoming soonkm scale flagship ICON simulationss3://xspies/healpix/

Two stores on the same grid line up cell for cell, so a model bias against ERA5 is a subtraction. Every dataset is written at a range of levels and frequencies: develop against a coarse monthly store, then change two parts of the URL.

s3://reanalysisproject/healpixgrid/era5dataset/P1Mfrequency/level_5.zarrlevel

For high levels and small regions, read the tips on chunking and selection first.

bias.py
import xarray as xr
S3 = {"anon": True, "endpoint_url": "https://s3.waterpark.dkrz.de"}
era5 = xr.open_zarr(
"s3://reanalysis/healpix/era5/P1M/level_5.zarr", storage_options=S3, chunks=None
)
model = xr.open_zarr(
"s3://nextgems/healpix/ngc4008/P1D/level_5.zarr", storage_options=S3, chunks=None
)
bias = (
model["tas"].sel(time="2021").mean("time")
- era5["tas"].sel(time="2021").mean("time")
)
Sea surface temperature from MODIS Aqua on HEALPix level 10
Sea surface temperature from MODIS Aqua, remapped to HEALPix level 10.
No regridding
Everything is HEALPix, nested, on one sphere.
Equal-area cells
A global mean is field.mean(“cell”), with no cos(lat) weights.
Only the bytes you ask for
Zarr chunks over HTTP, fetched as you select.
A pyramid in space and time
Coarse and monthly, or fine and hourly.
No mounted filesystem
The same URL from a laptop, Levante or a batch job.

Each source grid is remapped once, conservatively, with grid-doctor. Coarser levels come from coarsening that result, not from remapping again. The reasoning is in Why HEALPix?, Why Zarr and S3? and Remapping decisions.