Xarray engine: ensemble data

Get input GRIB ensemble forecast data.

[1]:
import earthkit.data as ekd

ds_fl = ekd.from_source("sample", "ens_cf_pf.grib").to_fieldlist()

The data contains 3 ensemble members: 1 control and 2 perturbed members.

[2]:
ds_fl.ls()
[2]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2024-06-03 00:00:00 2024-06-03 0 days 00:00:00 500 pressure 0 regular_ll
1 t 2024-06-03 06:00:00 2024-06-03 0 days 06:00:00 500 pressure 0 regular_ll
2 t 2024-06-03 00:00:00 2024-06-03 0 days 00:00:00 500 pressure 1 regular_ll
3 t 2024-06-03 00:00:00 2024-06-03 0 days 00:00:00 500 pressure 2 regular_ll
4 t 2024-06-03 06:00:00 2024-06-03 0 days 06:00:00 500 pressure 1 regular_ll
5 t 2024-06-03 06:00:00 2024-06-03 0 days 06:00:00 500 pressure 2 regular_ll

When we convert GRIB data to Xarray with to_xarray() the ensemble dimension is defined by the “member” dimension role. By default, this role is using the “ensemble.member” metadata key.

[3]:
ds_fl.to_xarray()
[3]:
<xarray.Dataset> Size: 33kB
Dimensions:    (member: 3, step: 2, latitude: 19, longitude: 36)
Coordinates:
  * member     (member) <U1 12B '0' '1' '2'
  * step       (step) timedelta64[ns] 16B 00:00:00 06:00:00
  * latitude   (latitude) float64 152B 90.0 80.0 70.0 60.0 ... -70.0 -80.0 -90.0
  * longitude  (longitude) float64 288B 0.0 10.0 20.0 30.0 ... 330.0 340.0 350.0
Data variables:
    t          (member, step, latitude, longitude) float64 33kB ...
Attributes:
    Conventions:  CF-1.8
    institution:  ECMWF

This default behaviour can be overridden by specifying custom dim_roles. E.g. to get the ensemble member number from the “perturbationNumber” GRIB key we can use:

[4]:
ds_fl.to_xarray(dim_roles={"member": "metadata.perturbationNumber"})
[4]:
<xarray.Dataset> Size: 33kB
Dimensions:    (member: 3, step: 2, latitude: 19, longitude: 36)
Coordinates:
  * member     (member) int64 24B 0 1 2
  * step       (step) timedelta64[ns] 16B 00:00:00 06:00:00
  * latitude   (latitude) float64 152B 90.0 80.0 70.0 60.0 ... -70.0 -80.0 -90.0
  * longitude  (longitude) float64 288B 0.0 10.0 20.0 30.0 ... 330.0 340.0 350.0
Data variables:
    t          (member, step, latitude, longitude) float64 33kB ...
Attributes:
    Conventions:  CF-1.8
    institution:  ECMWF
[ ]: