Xarray engine: field dimensions

[1]:
import earthkit.data as ekd

When converting a GRIB fieldlist to Xarray with to_xarray() the last one or two dimensions—representing the field values—depend on the grid type and the flatten_values setting.

When flatten_values is False (the default, unless overriden by the selected profile), the native field shape defines these dimensions, and their names vary with the grid type. Otherwise, a single dimension called “values” will represent a field.

Regular grids

[2]:
ds_fl = ekd.from_source("sample", "pl.grib").to_fieldlist()
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords

[2]:
(Frozen({'forecast_reference_time': 4, 'step': 2, 'level': 2, 'latitude': 19, 'longitude': 36}),
 Coordinates:
   * forecast_reference_time  (forecast_reference_time) datetime64[ns] 32B 202...
   * step                     (step) timedelta64[ns] 16B 00:00:00 06:00:00
   * level                    (level) int64 16B 500 700
   * latitude                 (latitude) float64 152B 90.0 80.0 ... -80.0 -90.0
   * longitude                (longitude) float64 288B 0.0 10.0 ... 340.0 350.0)
[3]:
ds_xr = ds_fl.to_xarray(flatten_values=True)
ds_xr.sizes, ds_xr.coords
[3]:
(Frozen({'forecast_reference_time': 4, 'step': 2, 'level': 2, 'values': 684}),
 Coordinates:
   * forecast_reference_time  (forecast_reference_time) datetime64[ns] 32B 202...
   * step                     (step) timedelta64[ns] 16B 00:00:00 06:00:00
   * level                    (level) int64 16B 500 700
     latitude                 (values) float64 5kB ...
     longitude                (values) float64 5kB ...)

Regular grids on a projection

[4]:
ds_fl = ekd.from_source("sample", "lambert_conformal.grib").to_fieldlist()
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords

'Grid' object has no attribute 'to_distinct_latlon'

[4]:
(Frozen({'y': 475, 'x': 475}),
 Coordinates:
     latitude   (y, x) float64 2MB ...
     longitude  (y, x) float64 2MB ...)
[5]:
ds_xr = ds_fl.to_xarray(flatten_values=True)
ds_xr.sizes, ds_xr.coords
[5]:
(Frozen({'values': 225625}),
 Coordinates:
     latitude   (values) float64 2MB ...
     longitude  (values) float64 2MB ...)

Unstructured grids

For unstructured grids (like reduced Gaussian) only the “values” dimension is generated and flatten_values makes no effect.

[6]:
ds_fl = ekd.from_source("sample", "reduced_gg_O32.grib1").to_fieldlist()
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords

[6]:
(Frozen({'step': 2, 'values': 5248}),
 Coordinates:
   * step       (step) timedelta64[ns] 16B 00:00:00 06:00:00
     latitude   (values) float64 42kB ...
     longitude  (values) float64 42kB ...)

Spherical harmonics

For non-gridded data only the “values” dimension is genereated and flatten_values makes no effect.

[7]:
ds_fl = ekd.from_source("sample", "sh_t32.grib").to_fieldlist()
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords

[7]:
(Frozen({'step': 2, 'values': 1122}),
 Coordinates:
   * step     (step) timedelta64[ns] 16B 00:00:00 06:00:00)
[ ]: