Buckets:

PhiltheBuilder's picture
|
download
raw
7.54 kB
# Weather model initial conditions
Analysis-ready atmospheric initial conditions on a 0.25° global grid, from two
sources, in one file format. One file per init time, containing the inputs of
the published data-driven weather models (GraphCast, GenCast, Pangu, Aurora,
AIFS, FourCastNet/SFNO): take the fields your model needs.
Public; readable without a Hugging Face account.
| source | from | available | levels |
|---|---|---|---|
| ERA5 (bucket root) | ARCO-ERA5 reanalysis | ~6 days after the init | 37 |
| IFS (`ifs/`) | ECMWF operational IFS analysis, open data | ~8 hours after | 14 |
Both use the same variable names, units, grid, orientation and timesteps, so
code written for one reads the other. Each `spec.json` names its `ic_source`;
an IFS one also lists what is absent under `unavailable_variables` and what
only it has under `extra_variables` (see [IFS source](#ifs-source)).
## Layout
```
2026-09-10T00Z/ ERA5
ic.nc NetCDF4, float32, zlib-compressed, ~1.5 GB
spec.json field list, grid definition, provenance
ifs/2026-09-10T00Z/ IFS
ic.nc ~0.44 GB
spec.json
```
One directory per init time, named `YYYY-MM-DDTHHZ` (UTC, synoptic hours only:
00, 06, 12, 18). A directory is complete only when its `spec.json` is present;
without one it is mid-upload.
## Contents
280 fields per timestep.
**7 atmospheric variables** on all **37 pressure levels** of ERA5
(1 to 1000 hPa, ascending):
`geopotential`, `temperature`, `u_component_of_wind`, `v_component_of_wind`,
`specific_humidity`, `vertical_velocity`, `relative_humidity`
— dims `(time, level, latitude, longitude)`. Select the 13-level
GraphCast/Pangu set with `.sel(level=[50, 100, ..., 1000])`.
**21 surface variables**: `2m_temperature`, `10m_u_component_of_wind`,
`10m_v_component_of_wind`, `100m_u_component_of_wind`,
`100m_v_component_of_wind`, `mean_sea_level_pressure`, `surface_pressure`,
`2m_dewpoint_temperature`, `skin_temperature`, `total_column_water_vapour`,
`total_column_water`, `soil_temperature_level_1`, `soil_temperature_level_2`,
`volumetric_soil_water_layer_1`, `volumetric_soil_water_layer_2`,
`sea_surface_temperature`, `sea_ice_cover`, `total_precipitation`,
`total_precipitation_6hr`, `total_precipitation_12hr`,
`toa_incident_solar_radiation`
— dims `(time, latitude, longitude)`
**5 static fields**: `geopotential_at_surface`, `land_sea_mask`, `soil_type`,
`standard_deviation_of_orography`, `slope_of_sub_gridscale_orography`
— dims `(latitude, longitude)`, time dimension already dropped
**Three timesteps**: T-12h, T-6h and T0, 6 hours apart. `time[-1]` is the init
time.
### Derived fields
Not in ARCO; computed when the file is built.
- `total_precipitation_6hr` / `_12hr`: the sum of ERA5's hourly
`total_precipitation` over the 6 or 12 hours **ending at** each step. Matches
WeatherBench2's fields of the same name, which GraphCast and GenCast were
trained on.
- `relative_humidity`: percent, reproducing ECMWF's published ERA5 `r`
(saturation over water above 0 °C, over ice below −23 °C, blended between;
below ground, the near-surface value). Not clipped: like ECMWF's own field it
exceeds 100% in cold air and can dip slightly below 0 where ERA5's specific
humidity does. WeatherBench2's `relative_humidity` uses a water-only formula
and differs; a model trained on it should recompute from `temperature` and
`specific_humidity`.
### Missing values
`sea_surface_temperature` and `sea_ice_cover` are **NaN over land**, as ERA5
publishes them. Every other field is finite everywhere.
## Grid
0.25° global, 721 × 1440.
- **Latitude descends: 90.0 → -90.0**
- **Longitude runs 0.0 → 359.75**, not -180 → 180
Both are easy to assume backwards, and reading them the wrong way round yields
output that looks plausible and is globally wrong.
Values are in SI units, as ERA5 publishes them: temperature in K, geopotential
in m²/s² (divide by 9.80665 for metres), pressure in Pa.
## Reading it
```python
from huggingface_hub import download_bucket_files
import xarray as xr
download_bucket_files(
"dClimate/forecast-ic",
files=[("2026-09-10T00Z/ic.nc", "ic.nc")],
token=False, # public; no account needed
)
ds = xr.open_dataset("ic.nc")
```
Inside a Hugging Face Job, mount it instead of downloading:
```python
Volume(type="bucket", source="dClimate/forecast-ic",
mount_path="/inputs", read_only=True)
```
A check that your read is oriented correctly — for `2026-09-10T00Z`:
| quantity | expected |
|---|---|
| 500 hPa geopotential height, global mean | ≈ 5539 m |
| 2 m temperature, global mean | ≈ 280.4 K |
| land fraction (`land_sea_mask > 0.5`) | ≈ 33.9 % |
## Source and provenance
Built from [ARCO-ERA5](https://github.com/google-research/arco-era5)
(`ar/full_37-1h-0p25deg-chunk-1.zarr-v3`), Google's analysis-ready ERA5.
Each `spec.json` records the source store and its `last_updated` /
`valid_time_stop` / `valid_time_stop_era5t` attributes at build time. ARCO
publishes no content hash, so these attributes are how a file is pinned to an
upstream release.
Files are immutable once published. ERA5T values are revised by the provider for
several days after publication, so an init is built only once it is at least 5
days old, and is not rebuilt afterwards.
`spec.json` carries `provenance.is_era5t`. True means that init came from ERA5T
rather than the finalized archive — still fixed here, but worth knowing when
comparing against another ERA5 copy.
## IFS source
Under `ifs/`: ECMWF's operational HRES analysis from
[open data](https://www.ecmwf.int/en/forecasts/datasets/open-data), 00Z inits,
published about eight hours after the init. Each step is the step-0 analysis of
the run at that time.
- **14 pressure levels**: 10, 50, 100, 150, 200, 250, 300, 400, 500, 600, 700,
850, 925, 1000 hPa. Every 13-level model's set is included.
- `relative_humidity` is ECMWF's own `r` from the same analysis.
- `total_precipitation_6hr` / `_12hr` are the forecast totals of the runs that
started 6 and 12 hours before each step (the 18Z run's first six hours, for
the 6h total at 00Z).
- **Not present**: `total_precipitation` (hourly; open data is 3-hourly),
`toa_incident_solar_radiation`, `sea_surface_temperature`, `sea_ice_cover`,
`soil_type`.
- **Only here** (`extra_variables`): `snow_depth` (m of water equivalent) and
eleven fields from the wave model's analysis:
`significant_height_of_combined_wind_waves_and_swell`,
`significant_wave_height_{10_to_12,12_to_14,14_to_17,17_to_21,21_to_25,25_to_30}s`,
`mean_wave_direction`, `mean_wave_period`, `coefficient_of_drag_with_waves`,
`model_bathymetry`. The wave fields are NaN wherever the wave model has no
open sea: land, lakes and sea ice, about 36% of the grid
(`ocean_only_variables`). These are what ECMWF's AIFS Single 2.0 reads.
- From 2026-05-13T00Z, the first init after IFS cycle 50r1, which added the
wave fields to open data. `spec_version` 1.1.0.
The operational analysis is not revised, so an init is final when published.
`spec.json`'s `provenance.runs` lists the exact open-data files it was built
from.
## Retention
Rolling 6 months (183 days) for each source. Older inits are removed.
---
ERA5 is produced by ECMWF and distributed via the Copernicus Climate Change
Service (C3S); neither ECMWF nor C3S is responsible for any use made of it here.
The IFS files are derived from ECMWF open data, © ECMWF, licensed under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

Xet Storage Details

Size:
7.54 kB
·
Xet hash:
a16a8b160f1ffed8c9168c9bb440a76d69ea484f62e0a89adc8d382bfd830a0f

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.