| ID |
ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual
|
| Spatial domain | Global |
| Spatial resolution | 0.25 degrees (~20km) |
| Time domain | Forecasts initialized 2024-04-01 00:00:00 UTC to Present |
| Time resolution | Forecasts initialized every 6 hours |
| Forecast domain | Forecast lead time 0-144 hours (0-6 days) ahead |
| Forecast resolution | 3 hourly |
STAC (browse) · validation report
The Integrated Forecasting System (IFS) is a global forecast model developed by ECMWF. ENS is an ensemble configuration of IFS: 51 ensemble members in the medium range and 101 in the sub-seasonal (extended) range. IFS consists of a numerical model of the Earth system, which includes an atmospheric model at its heart, coupled with models of other Earth system components such as the ocean. The data assimilation system combines the latest weather observations with a recent forecast to obtain the best possible estimate of the current state of the Earth system.
This dataset is an archive of past and present ECMWF IFS ENS forecasts at 0.25 degree resolution, optimized for spatial (map) access patterns. Forecasts are identified by an initialization time (init_time) denoting the start time of the model run as well as by the ensemble_member, and step forward along the lead_time dimension out to 6 days. A new forecast is initialized every 6 hours.
Variables on pressure levels live in the pressure_level group.
Note: dynamical-catalog>=1.0.0 (or zarr>=3.2 icechunk>=2.0 gribberish>=1.7) is required.
| ECMWF IFS ENS forecasts, virtual (Github) | |
| ECMWF IFS ENS forecasts, virtual (Colab) |
import dynamical_catalog # dynamical-catalog>=1.0.0
ds = dynamical_catalog.open("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual", chunks=None)
ds["temperature_2m"].sel(init_time="2026-11-01T00", lead_time="24h").mean("ensemble_member")
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = dynamical_catalog.open("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual", group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-11-01T00", lead_time="120h", pressure_level=500).std("ensemble_member")
import dynamical_catalog # dynamical-catalog>=1.0.0
ds = dynamical_catalog.open("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual", chunks=None)
ds["temperature_2m"].sel(init_time="2026-11-01T00", lead_time="24h").mean("ensemble_member")
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = dynamical_catalog.open("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual", group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-11-01T00", lead_time="120h", pressure_level=500).std("ensemble_member")
import icechunk
import pystac
import xarray as xr
catalog = pystac.Catalog.from_file("https://stac.dynamical.org/catalog.json")
collection = catalog.get_child("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual")
asset = collection.assets["icechunk-https"]
authorize = icechunk.containers_credentials({"gs://ecmwf-open-data/": icechunk.gcs_credentials(anonymous=True), "s3://ecmwf-forecasts/": icechunk.s3_anonymous_credentials()})
repo = icechunk.Repository.open(
icechunk.http_storage(asset.href),
authorize_virtual_chunk_access=authorize,
)
session = repo.readonly_session("main")
ds = xr.open_zarr(session.store, chunks=None)
ds["temperature_2m"].sel(init_time="2026-11-01T00", lead_time="24h").mean("ensemble_member")
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = xr.open_zarr(session.store, group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-11-01T00", lead_time="120h", pressure_level=500).std("ensemble_member")
import icechunk
import pystac
import xarray as xr
catalog = pystac.Catalog.from_file("https://stac.dynamical.org/catalog.json")
collection = catalog.get_child("ecmwf-ifs-ens-forecast-6-day-0-25-degree-virtual")
asset = collection.assets["icechunk-https"]
authorize = icechunk.containers_credentials({"gs://ecmwf-open-data/": icechunk.gcs_credentials(anonymous=True), "s3://ecmwf-forecasts/": icechunk.s3_anonymous_credentials()})
repo = icechunk.Repository.open(
icechunk.http_storage(asset.href),
authorize_virtual_chunk_access=authorize,
)
session = repo.readonly_session("main")
ds = xr.open_zarr(session.store, chunks=None)
ds["temperature_2m"].sel(init_time="2026-11-01T00", lead_time="24h").mean("ensemble_member")
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = xr.open_zarr(session.store, group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-11-01T00", lead_time="120h", pressure_level=500).std("ensemble_member")
| min | max | units | |
|---|---|---|---|
| ensemble_member | 0 | 50 | 1 |
| init_time | 2024-04-01T00:00:00Z | Present | seconds since 1970-01-01 |
| latitude | -90 | 90 | degree_north |
| lead_time | 0 | 518400 | seconds |
| longitude | -180 | 179.75 | degree_east |
| pressure_level | 10 | 1000 | hPa |
Access a variable by its name (the bold identifier, e.g. ds["categorical_precipitation_type_surface"]).
Dimensions: init_time × lead_time × ensemble_member × latitude × longitude
| variable | units |
|---|---|
categorical_precipitation_type_surface
Precipitation type (ptype)
|
1 |
convective_available_potential_energy_surface
Convective available potential energy (cape)
|
J kg-1 |
convective_precipitation_run_total_surface
Convective precipitation (cp)Accumulated since forecast initialization.
|
kg m-2 |
dew_point_temperature_2m
2 metre dewpoint temperature (2d)
|
degree_Celsius |
downward_long_wave_radiation_run_total_surface
Surface long-wave (thermal) radiation downwards (strd)Accumulated since forecast initialization.
|
W s m-2 |
downward_short_wave_radiation_run_total_surface
Surface short-wave (solar) radiation downwards (ssrd)Accumulated since forecast initialization.
|
W s m-2 |
eastward_turbulent_surface_stress_run_total_surface
Time-integrated eastward turbulent surface stress (ewss)Accumulated since forecast initialization.
|
Pa s |
geopotential_height_surface
Geopotential height (gh)Surface (orography) geopotential height. Available for control member 0 only; members 1-50 are NaN. Time-invariant field published at lead time 0 only.
|
m |
high_cloud_cover
High cloud cover (hcc)
|
percent |
land_sea_mask_surface
Land-sea mask (lsm)Fraction (0-1) of the grid box that is land.
|
1 |
low_cloud_cover
Low cloud cover (lcc)
|
percent |
maximum_temperature_2m
Maximum temperature (tmax)Maximum since the preceding forecast step. Not available at lead time 0.
|
degree_Celsius |
medium_cloud_cover
Medium cloud cover (mcc)
|
percent |
minimum_temperature_2m
Minimum temperature (tmin)Minimum since the preceding forecast step. Not available at lead time 0.
|
degree_Celsius |
most_unstable_convective_available_potential_energy_surface
Most-unstable CAPE (mucape)
|
J kg-1 |
net_long_wave_radiation_run_total_atmosphere_top
Top net long-wave (thermal) radiation (ttr)Positive downwards, the negative of outgoing long-wave radiation. Accumulated since forecast initialization.
|
W s m-2 |
net_long_wave_radiation_run_total_surface
Surface net long-wave (thermal) radiation (str)Accumulated since forecast initialization.
|
W s m-2 |
net_short_wave_radiation_run_total_surface
Surface net short-wave (solar) radiation (ssr)Accumulated since forecast initialization.
|
W s m-2 |
northward_turbulent_surface_stress_run_total_surface
Time-integrated northward turbulent surface stress (nsss)Accumulated since forecast initialization.
|
Pa s |
precipitable_water_atmosphere
Precipitable water (pwat)
|
kg m-2 |
precipitation_rate_surface
Precipitation rate (prate)
|
kg m-2 s-1 |
pressure_reduced_to_mean_sea_level
Pressure reduced to MSL (prmsl)
|
Pa |
pressure_surface
Surface pressure (sp)
|
Pa |
runoff_water_equivalent_run_total_surface
Runoff water equivalent (surface plus subsurface) (rowe)Accumulated since forecast initialization.
|
kg m-2 |
sea_ice_thickness_surface
Sea ice thickness (sithick)NaN where there is no ocean model value, including over land.
|
m |
sea_surface_height
Sea surface height (zos)NaN where there is no ocean model value, including over land.
|
m |
sea_water_velocity_u_surface
Eastward surface sea water velocity (sve)Applies over the ocean only; over land the values are NaN or near zero, so mask with land_sea_mask_surface.
|
m s-1 |
sea_water_velocity_v_surface
Northward surface sea water velocity (svn)Applies over the ocean only; over land the values are NaN or near zero, so mask with land_sea_mask_surface.
|
m s-1 |
skin_temperature_surface
Skin temperature (skt)
|
degree_Celsius |
slope_of_sub_gridscale_orography_surface
Slope of sub-gridscale orography (slor)Available for control member 0 only; members 1-50 are NaN. Time-invariant field published at lead time 0 only.
|
1 |
snow_albedo_surface
Snow albedo (asn)Applies only where snow is present (snow_water_equivalent_surface > 0); snow-free cells hold placeholder values that also occur over snow.
|
percent |
snow_density_surface
Snow density (rsn)Applies only where snow is present (snow_water_equivalent_surface > 0); snow-free cells hold placeholder values that also occur over snow.
|
kg m-3 |
snow_water_equivalent_surface
Snow depth water equivalent (sd)Capped at 10 m; most of the Antarctic and Greenland ice sheets sit at this cap.
|
m |
snowfall_water_equivalent_run_total_surface
Snowfall water equivalent (sf)Accumulated since forecast initialization.
|
kg m-2 |
soil_temperature_layer_1
Soil temperature (sot)ECMWF soil level 1, the uppermost soil layer. Over water this is the sea surface temperature, not a soil temperature.
|
degree_Celsius |
soil_temperature_layer_2
Soil temperature (sot)ECMWF soil level 2, the second soil layer from the surface. Over water this is the sea surface temperature, not a soil temperature.
|
degree_Celsius |
soil_temperature_layer_3
Soil temperature (sot)ECMWF soil level 3. Over water this is the sea surface temperature, not a soil temperature.
|
degree_Celsius |
soil_temperature_layer_4
Soil temperature (sot)ECMWF soil level 4. Over water this is the sea surface temperature, not a soil temperature.
|
degree_Celsius |
standard_deviation_of_sub_gridscale_orography_surface
Standard deviation of sub-gridscale orography (sdor)Available for control member 0 only; members 1-50 are NaN. Time-invariant field published at lead time 0 only.
|
m |
temperature_2m
2 metre temperature (2t)
|
degree_Celsius |
total_cloud_cover_atmosphere
Total cloud cover (tcc)
|
percent |
total_column_cloud_ice_water_atmosphere
Total column cloud ice water (tciw)
|
kg m-2 |
total_column_cloud_liquid_water_atmosphere
Total column cloud liquid water (tclw)
|
kg m-2 |
total_column_rain_water_atmosphere
Total column rain water (tcrw)
|
kg m-2 |
total_column_water_atmosphere
Total column water (tcw)
|
kg m-2 |
total_precipitation_run_total_surface
Total precipitation (tp)Accumulated since forecast initialization.
|
kg m-2 |
volumetric_soil_moisture_layer_1
Volumetric soil moisture (vsw)ECMWF soil level 1, the uppermost soil layer. Applies over land only; over water the values are near zero, so mask with land_sea_mask_surface.
|
1 |
volumetric_soil_moisture_layer_2
Volumetric soil moisture (vsw)ECMWF soil level 2, the second soil layer from the surface. Applies over land only; over water the values are near zero, so mask with land_sea_mask_surface.
|
1 |
volumetric_soil_moisture_layer_3
Volumetric soil moisture (vsw)ECMWF soil level 3. Applies over land only; over water the values are near zero, so mask with land_sea_mask_surface.
|
1 |
volumetric_soil_moisture_layer_4
Volumetric soil moisture (vsw)ECMWF soil level 4. Applies over land only; over water the values are near zero, so mask with land_sea_mask_surface.
|
1 |
wind_gust_10m
Maximum 10 metre wind gust since previous post-processing (10fg)Maximum over the preceding hour through lead 90 hours, then since the preceding forecast step. Not available at lead time 0.
|
m s-1 |
wind_u_100m
100 metre U wind component (100u)
|
m s-1 |
wind_u_10m
10 metre U wind component (10u)
|
m s-1 |
wind_v_100m
100 metre V wind component (100v)
|
m s-1 |
wind_v_10m
10 metre V wind component (10v)
|
m s-1 |
These variables live in the pressure_level Zarr group (e.g. pass group="pressure_level" to dynamical_catalog.open() or xr.open_zarr()).
Dimensions: init_time × lead_time × ensemble_member × latitude × longitude × pressure_level
| variable | units |
|---|---|
divergence
Divergence (d)
|
s-1 |
geopotential
Geopotential (z)Available for control member 0 only; members 1-50 are NaN.
|
m2 s-2 |
geopotential_height
Geopotential height (gh)
|
m |
relative_humidity
Relative humidity (r)
|
percent |
relative_vorticity
Vorticity (relative) (vo)
|
s-1 |
specific_humidity
Specific humidity (q)
|
1 |
temperature
Temperature (t)
|
degree_Celsius |
vertical_velocity
Vertical velocity (w)
|
Pa s-1 |
wind_u
U component of wind (u)
|
m s-1 |
wind_v
V component of wind (v)
|
m s-1 |
Dataset licensed under CC BY 4.0 and ECMWF Terms of Use.
ECMWF IFS ENS forecast data processed by dynamical.org from ECMWF Open Data.
Or ECMWF IFS ENS from dynamical.org.
The source grib files this archive references are provided by ECMWF Open Data. Data is read directly from ECMWF's copy on Google Cloud (gs://ecmwf-open-data) and AWS Open Data (s3://ecmwf-forecasts).
ECMWF does not provide user support for the free & open datasets. Users should refer to the public User Forum for any questions related to the source material.
Some variables and pressure levels cover only part of the archive, matching when ECMWF open data started or stopped publishing them, and are filled with NaNs outside that range. The validation report lists the dates.
IFS is updated regularly. Find details of recent and upcoming changes to the forecasting system on the ECMWF website.
Storage for this dataset is generously provided by AWS Open Data.
This dataset is stored in Zarr format, which splits each variable into a grid of chunks — the smallest unit read from storage. When possible, aligning your reads with this dataset's chunk grid can significantly improve data access speed.
The element count and coordinate span of this dataset:
| dimension | chunk |
|---|---|
| init_time | 1 (6 hours) |
| lead_time | 1 (3 hours) |
| ensemble_member | 1 |
| latitude | 721 (180.25°) |
| longitude | 1440 (360°) |
| uncompressed | 7.9 MiB |
Review the validation report for variable availability, missing data, known quirks, fill values, value distributions, and sample plots.