Interpolating HEALPix GRIB fields

This example shows how to interpolate GRIB data defined on a HEALPix nested grid. We will also see how to inspect and plot the resulting data and how to convert it to Xarray.

To make this notebook work earthkit-data (version >= 0.6.0) and earthkit-plots have to be installed. The data will be represented as an earthkit-data GRIB FieldList.

Interpolation

[1]:
import os
from earthkit.regrid import interpolate
from earthkit.data import from_source

# Get HEALPix nested GRIB data containing two fields.
ds = from_source(
    "url",
    "https://sites.ecmwf.int/repository/earthkit-regrid/examples/H8_nested_multi.grib2")

# the target grid is a global 5x5 degree regular latitude-longitude grid
out_grid = {"grid": [5,5]}

# perform interpolation for each field and add results
# to a new fieldlist stored in memory
r = interpolate(ds, out_grid=out_grid, method="linear")

d = r.data()
lat = d[0]
lon = d[1]
vals = d[2:]
lat.shape, lon.shape, vals.shape
[1]:
((37, 72), (37, 72), (2, 37, 72))

Please note that the interpolation only works between a predefined set of global grids. See the Pre-generated matrices for details.

Plotting the results

[2]:
import earthkit.plots as ekp

ekp.quickplot(r)
[2]:
<earthkit.plots.components.figures.Figure at 0x138d2d160>
../_images/examples_healpix_fieldlist_6_1.png

Converting the results to Xarray

[3]:
r.to_xarray()
[3]:
<xarray.Dataset> Size: 44kB
Dimensions:    (step: 2, latitude: 37, longitude: 72)
Coordinates:
  * step       (step) timedelta64[ns] 16B 00:00:00 12:00:00
  * latitude   (latitude) float64 296B 90.0 85.0 80.0 75.0 ... -80.0 -85.0 -90.0
  * longitude  (longitude) float64 576B 0.0 5.0 10.0 15.0 ... 345.0 350.0 355.0
Data variables:
    2t         (step, latitude, longitude) float64 43kB ...
Attributes:
    param:        2t
    paramId:      167
    class:        od
    stream:       oper
    levtype:      sfc
    type:         fc
    expver:       0001
    date:         20240323
    time:         1200
    domain:       g
    Conventions:  CF-1.8
    institution:  ECMWF

Writing the results to disk

Write the resulting fieldlist to disk:

[4]:
out_file = "_res_H8_nested_to_5x5.grib"
r.to_target("file", out_file)