CMIP6 climate projections — introduction#
earthlens.cmip6 exposes the raw, full CMIP6 archive — the whole
model × scenario × variable × member matrix of the Coupled Model
Intercomparison Project Phase 6 — as analysis-ready cloud Zarr on the open
Pangeo Google Cloud mirror (gs://cmip6). It is registered on the
EarthLens facade under the keys "cmip6", "pangeo-cmip6", and
"climate-projections".
The archive is anonymous (no credentials, no auth), indexed by a single
plain consolidated-stores CSV. There is no per-backend SDK to install — the CSV
is read with pandas and the Zarr stores are read through pyramids (GDAL's
/vsigs/ multidimensional driver), so the cmip6 extra is empty:
Why this backend exists (even though CMIP6 is already reachable)#
Two shipped backends already touch CMIP6 — and neither gives you the archive:
- The
geebackend exposesNASA/GDDP-CMIP6— a single, pre-downscaled 1/4° BCSD product (NEX-GDDP), not the archive. - The
chcbackend exposes CHC-CMIP6 precipitation deltas only.
earthlens.cmip6 is the only backend that exposes the full raw matrix: every
ScenarioMIP experiment (ssp119 … ssp585) and CMIP DECK run (historical,
piControl, 1pctCO2, abrupt-4xCO2, …), every Earth-system model, every
variant member, on each model's native grid. The canonical analysis-ready
copy of that whole archive lives on the open gs://cmip6 bucket (Pangeo),
indexed by a CSV, with no auth — and that full-archive access is the entire
reason to build this.
Going via ESGF is the wrong default: ESGF flakiness is structural (the LLNL node shut down in 2025), whereas the Pangeo ARCO CSV is a single stable path.
The request is a facet tuple#
A CMIP6 store is addressed by its facets. A request pins:
| Facet | Meaning | Example |
|---|---|---|
source_id |
The model (GCM / ESM) | CanESM5, GFDL-ESM4 |
experiment_id |
The scenario / diagnostic experiment | ssp585, historical |
variable_id |
The CMIP6 variable | tas, pr, tos |
table_id |
The MIP table (realm × cadence) | Amon, day, Omon |
member_id (optional) |
The variant label | r1i1p1f1 (the default) |
grid_label (optional) |
Native (gn) vs regridded (gr) |
gn |
version (optional) |
Publication version | latest (the default) |
The resolver filters the consolidated-stores CSV by this tuple to the matching
zstore (gs://cmip6/...) URI(s). A tuple that leaves grid_label (or
member_id) unpinned and matches more than one store fans out — one output
NetCDF per store. Unknown facet values raise a clear error listing the values
that were available, so a typo in a model or scenario name is easy to fix.
Reads via pyramids — earthlens resolves, pyramids decodes#
earthlens resolves and requests; pyramids opens the Zarr, windows it, and
writes NetCDF. download() maps the [start, end] date window to an integer
time-index range and the lat_lim / lon_lim box to a grid crop, then has
pyramids read only the requested cells and write one gridded NetCDF per store.
earthlens never imports xarray / zarr / gcsfs — the Zarr read is entirely
pyramids' (via GDAL /vsigs/, read anonymously; no gcsfs needed).
Volumes — always subset#
The stores are on each model's native grid and can be large (a full
monthly-atmosphere store spans the whole 1850–2100 record). A bbox/time subset
is the default and is what keeps a download tractable: the pyramids windowed
read fetches only the cells inside the box and the date window. A whole-grid
download (leaving lat_lim / lon_lim at whole-Earth) is allowed but warned,
and a whole-series read (whole_time=True) is opt-in.
Attribution#
CMIP6 output is provided for research use under each source model's CMIP6 terms
of use (most models are CC BY 4.0). Cite the source GCM and acknowledge the
CMIP6 project and the modelling group (WCRP CMIP6). The catalog carries a
per-model terms_note; CMIP6.terms_note() surfaces it for the requested model.