Regridding to DGGS#
Context#
Purpose#
The goal is to regrid a sample of RiOMar data into DGGS (Healpix).
Description#
In this notebook, we will:
Open a RiOMar data file
Prepare the DGGS grid for regridding
Transform the RiOMar dataset into DGSS (Healpix) grid.
Save the transformed data in Zarr
Contributions#
Notebook#
Tina Odaka (author), IFREMER (France), @tinaok
Anne Fouilloux (reviewer), Simula Research Laboratory (Norway), @annefou
Bibliography and other interesting resources#
Install packages#
Install
xarray-healpyif you do not have it in your environment.
pip install git+https://github.com/IAOCEA/xarray-healpy.git
Collecting git+https://github.com/IAOCEA/xarray-healpy.git
Cloning https://github.com/IAOCEA/xarray-healpy.git to /tmp/pip-req-build-xeh8o3ta
Running command git clone --filter=blob:none --quiet https://github.com/IAOCEA/xarray-healpy.git /tmp/pip-req-build-xeh8o3ta
Resolved https://github.com/IAOCEA/xarray-healpy.git to commit 9e457091957aa0d7833280558e60e1addc500ec7
Installing build dependencies ... ?25ldone
?25h Getting requirements to build wheel ... ?25ldone
?25h Preparing metadata (pyproject.toml) ... ?25ldone
?25hRequirement already satisfied: xarray>=2023.11.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (2024.7.0)
Collecting healpy (from xarray-healpy==0.1.dev26+g9e45709)
Using cached healpy-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.7 kB)
Requirement already satisfied: sparse in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (0.15.4)
Collecting opt_einsum (from xarray-healpy==0.1.dev26+g9e45709)
Using cached opt_einsum-3.4.0-py3-none-any.whl.metadata (6.3 kB)
Requirement already satisfied: numba in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (0.60.0)
Requirement already satisfied: numpy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (1.26.4)
Requirement already satisfied: scikit-learn in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (1.5.1)
Collecting cdshealpix (from xarray-healpy==0.1.dev26+g9e45709)
Using cached cdshealpix-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.3 kB)
Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray-healpy==0.1.dev26+g9e45709) (6.1.2)
Requirement already satisfied: packaging>=23.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (24.1)
Requirement already satisfied: pandas>=2.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (2.2.2)
Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->xarray-healpy==0.1.dev26+g9e45709) (2.0.1.4)
Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->xarray-healpy==0.1.dev26+g9e45709) (0.2024.8.5.0.32.23)
Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->xarray-healpy==0.1.dev26+g9e45709) (6.0.2)
Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from numba->xarray-healpy==0.1.dev26+g9e45709) (0.43.0)
Requirement already satisfied: scipy>=1.6.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from scikit-learn->xarray-healpy==0.1.dev26+g9e45709) (1.14.0)
Requirement already satisfied: joblib>=1.2.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from scikit-learn->xarray-healpy==0.1.dev26+g9e45709) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from scikit-learn->xarray-healpy==0.1.dev26+g9e45709) (3.5.0)
Requirement already satisfied: python-dateutil>=2.8.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.0->xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.0->xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.0->xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (2024.1)
Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=2.0->xarray>=2023.11.0->xarray-healpy==0.1.dev26+g9e45709) (1.16.0)
Using cached cdshealpix-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
Using cached healpy-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.9 MB)
Using cached opt_einsum-3.4.0-py3-none-any.whl (71 kB)
Building wheels for collected packages: xarray-healpy
Building wheel for xarray-healpy (pyproject.toml) ... ?25ldone
?25h Created wheel for xarray-healpy: filename=xarray_healpy-0.1.dev26+g9e45709-py3-none-any.whl size=12889 sha256=c2911e3d940b2f01e383675364c11446cdc24965bccc7a5554b2424ba445133b
Stored in directory: /tmp/pip-ephem-wheel-cache-yc3jlh9e/wheels/13/12/8e/cc158525fce8db1608cf79d96cd2ec7abe59daf089b7e4f8d6
Successfully built xarray-healpy
Installing collected packages: opt_einsum, healpy, cdshealpix, xarray-healpy
Successfully installed cdshealpix-0.7.1 healpy-1.18.0 opt_einsum-3.4.0 xarray-healpy-0.1.dev26+g9e45709
Note: you may need to restart the kernel to use updated packages.
Import Libraries#
import xarray as xr
import fsspec
from xarray_healpy import HealpyGridInfo, HealpyRegridder
import numpy as np
Open RiOMar sample dataset#
This RiOMar data has been generated from the original RiOMar data (netCDF) by selected a few timesteps and saving the results into Zarr to facilitate the access from the cloud (S3 Bucket).
url = "https://data-fair2adapt.ifremer.fr/riomar/small.zarr"
ds = xr.open_zarr(url)
ds
<xarray.Dataset> Size: 498MB
Dimensions: (y_rho: 838, x_rho: 727, s_rho: 40, time_counter: 5)
Coordinates:
nav_lat_rho (y_rho, x_rho) float64 5MB dask.array<chunksize=(838, 727), meta=np.ndarray>
nav_lon_rho (y_rho, x_rho) float64 5MB dask.array<chunksize=(838, 727), meta=np.ndarray>
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: y_rho, x_rho
Data variables:
ocean_mask (y_rho, x_rho) bool 609kB dask.array<chunksize=(838, 727), meta=np.ndarray>
temp (time_counter, s_rho, y_rho, x_rho) float32 487MB dask.array<chunksize=(1, 40, 838, 727), meta=np.ndarray>
Attributes: (12/45)
CPP-options: REGIONAL GAMAR MPI TIDES OBC_WEST OBC_NORTH XIOS USE_CALE...
Conventions: CF-1.6
Cs_r: have a look at variable Cs_r in this file
Cs_w: have a look at variable Cs_w in this file
SRCS: main.F step.F read_inp.F timers_roms.F init_scalars.F ini...
Tcline: 15.0
... ...
title: GAMAR_GLORYS
tnu4_expl: biharmonic mixing coefficient for tracers
units: meter4 second-1
uuid: 06f6b784-fcc0-4422-aceb-17da2a5aa9fa
v_sponge: 0.0
x_sponge: 0.0Select a small geographical area#
ds["nav_lat_rho"] = ds["nav_lat_rho"].assign_attrs(standard_nanme="latitude")
ds["nav_lon_rho"] = ds["nav_lon_rho"].assign_attrs(standard_nanme="longitude")
ds = ds.rename_vars({"nav_lat_rho": "latitude", "nav_lon_rho": "longitude"})
ds = ds.merge(ds[["latitude", "longitude"]].compute() )
ds = ds.where((
(49 > ds.latitude) & (ds.latitude > 47) )
&
( -5 > ds.longitude) & (ds.longitude > -10 ), drop=True)
Prepare the Healpix grid to transform into DGGS#
nside = 4096
def center_longitude(ds, center):
if center == 0:
centered = (ds.longitude + 180) % 360 - 180
else:
centered = (ds.longitude - 180) % 360 + 180
return ds.assign_coords(longitude=centered)
Define the target Healpix grid information#
%%time
grid = HealpyGridInfo(level=int(np.log2(nside)))
target_grid = grid.target_grid(ds).pipe(center_longitude, 0)
target_grid
CPU times: user 15 ms, sys: 3.13 ms, total: 18.2 ms
Wall time: 12.1 ms
<xarray.Dataset> Size: 457kB
Dimensions: (cells: 19047)
Coordinates:
cell_ids (cells) uint64 152kB 56417655 56417659 ... 56565776 56565792
latitude (cells) float64 152kB 47.03 47.03 47.03 ... 48.98 48.98 48.98
longitude (cells) float64 152kB -6.282 -6.331 -6.306 ... -6.44 -6.542
resolution float64 8B 0.0002498
Dimensions without coordinates: cells
Data variables:
*empty*
Attributes:
grid_type: healpix
level: 12
nside: 4096
lat: 0
lon: 0
rot_lat: 0
rot_lon: 0Compute the interpolation weights for regridding the diff data#
%%time
regridder = HealpyRegridder(
ds[["longitude", "latitude"]].compute(),
target_grid,
method="bilinear",
interpolation_kwargs={},
)
regridder
CPU times: user 122 ms, sys: 5.28 ms, total: 127 ms
Wall time: 124 ms
HealpyRegridder(method='bilinear', interpolation_kwargs={})
Perform the regridding operation using the computed interpolation weights#
%%time
regridded = regridder.regrid_ds(ds)
regridded
CPU times: user 1.41 s, sys: 604 ms, total: 2.01 s
Wall time: 2.05 s
<xarray.Dataset> Size: 31MB
Dimensions: (cells: 19047, time_counter: 5, s_rho: 40)
Coordinates:
cell_ids (cells) uint64 152kB 56417655 56417659 ... 56565776 56565792
latitude (cells) float64 152kB 47.03 47.03 47.03 ... 48.98 48.98 48.98
longitude (cells) float64 152kB -6.282 -6.331 -6.306 ... -6.44 -6.542
resolution float64 8B 0.0002498
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: cells
Data variables:
ocean_mask (cells) float64 152kB dask.array<chunksize=(19047,), meta=np.ndarray>
temp (time_counter, s_rho, cells) float64 30MB dask.array<chunksize=(1, 40, 19047), meta=np.ndarray>
Attributes:
grid_type: healpix
level: 12
nside: 4096
lat: 0
lon: 0
rot_lat: 0
rot_lon: 0Reshape the regridded data to 2D#
%%time
reshaped = grid.to_2d(regridded).pipe(center_longitude, 0)
reshaped = reshaped.persist()
reshaped
CPU times: user 5.94 s, sys: 12 s, total: 18 s
Wall time: 10.4 s
<xarray.Dataset> Size: 57MB
Dimensions: (y: 130, x: 267, time_counter: 5, s_rho: 40)
Coordinates:
resolution float64 8B 0.0002498
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
cell_ids (y, x) int64 278kB 56389452 56389454 ... 56569807 56569829
latitude (y, x) float64 278kB 45.55 45.56 45.57 ... 50.36 50.37 50.38
longitude (y, x) float64 278kB -7.719 -7.721 -7.723 ... -5.2 -5.201
Dimensions without coordinates: y, x
Data variables:
ocean_mask (y, x) float64 278kB dask.array<chunksize=(130, 267), meta=np.ndarray>
temp (time_counter, s_rho, y, x) float64 56MB dask.array<chunksize=(1, 40, 130, 267), meta=np.ndarray>
Attributes:
grid_type: healpix
level: 12
nside: 4096
lat: 0
lon: 0
rot_lat: 0
rot_lon: 0This cell verifies the regridded data by plotting the count of non-NaN values.#
reshaped["temp"].count(["x", "y"]).plot()
<matplotlib.collections.QuadMesh at 0x716aa9bc33e0>
Save to the regridded data to Zarr format#
%%time
# This cell saves the regridded data to Zarr format, then cleans up unnecessary variables to free up memory after the regridding process.
reshaped.to_zarr(
f"./diff-regridded.zarr",
mode="w",
consolidated=True,
compute=True
)
CPU times: user 120 ms, sys: 112 ms, total: 233 ms
Wall time: 629 ms
<xarray.backends.zarr.ZarrStore at 0x716aaa1325c0>
Open and check zarr with xdggs#
pip install xdggs
Collecting xdggs
Using cached xdggs-0.1.1-py3-none-any.whl.metadata (5.2 kB)
Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (2024.7.0)
Requirement already satisfied: cdshealpix in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.7.1)
Collecting h3ronpy (from xdggs)
Using cached h3ronpy-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.8 kB)
Requirement already satisfied: typing-extensions in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (4.12.2)
Requirement already satisfied: lonboard>=0.9.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.9.3)
Requirement already satisfied: pyproj>=3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.6.1)
Requirement already satisfied: matplotlib in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.9.2)
Collecting arro3-core>=0.4.0 (from xdggs)
Using cached arro3_core-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (885 bytes)
Requirement already satisfied: pooch in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (1.8.2)
Requirement already satisfied: anywidget<0.10.0,>=0.9.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (0.9.13)
Requirement already satisfied: geopandas>=0.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (1.0.1)
Requirement already satisfied: palettable<4.0.0,>=3.3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (3.3.3)
Requirement already satisfied: pandas<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.2.2)
Requirement already satisfied: pyarrow>=14.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (17.0.0)
Requirement already satisfied: shapely<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.0.5)
Requirement already satisfied: contourpy>=1.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (4.53.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.4.5)
Requirement already satisfied: numpy>=1.23 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.26.4)
Requirement already satisfied: packaging>=20.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (24.1)
Requirement already satisfied: pillow>=8 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (10.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (2.8.2)
Requirement already satisfied: certifi in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pyproj>=3.3->xdggs) (2024.7.4)
Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from cdshealpix->xdggs) (6.1.2)
Requirement already satisfied: platformdirs>=2.5.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (4.2.2)
Requirement already satisfied: requests>=2.19.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (2.32.3)
Requirement already satisfied: ipywidgets>=7.6.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.1.3)
Requirement already satisfied: psygnal>=0.8.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.11.1)
Requirement already satisfied: pyogrio>=0.7.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from geopandas>=0.13->lonboard>=0.9.3->xdggs) (0.9.0)
Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)
Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->xdggs) (1.16.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (1.26.19)
Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (2.0.1.4)
Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (0.2024.8.5.0.32.23)
Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (6.0.2)
Requirement already satisfied: comm>=0.1.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.2)
Requirement already satisfied: ipython>=6.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.17.2)
Requirement already satisfied: traitlets>=4.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.14.3)
Requirement already satisfied: widgetsnbextension~=4.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.0.11)
Requirement already satisfied: jupyterlab-widgets~=3.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.11)
Requirement already satisfied: decorator in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.1.1)
Requirement already satisfied: jedi>=0.16 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.19.1)
Requirement already satisfied: matplotlib-inline in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.1.7)
Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.38)
Requirement already satisfied: pygments>=2.4.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.18.0)
Requirement already satisfied: stack-data in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.6.2)
Requirement already satisfied: pexpect>4.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.9.0)
Requirement already satisfied: parso<0.9.0,>=0.8.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.8.4)
Requirement already satisfied: ptyprocess>=0.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.7.0)
Requirement already satisfied: wcwidth in /srv/conda/envs/notebook/lib/python3.12/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.13)
Requirement already satisfied: executing>=1.2.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.0.1)
Requirement already satisfied: asttokens>=2.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.4.1)
Requirement already satisfied: pure-eval in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.3)
Using cached xdggs-0.1.1-py3-none-any.whl (32 kB)
Using cached arro3_core-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB)
Using cached h3ronpy-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)
Installing collected packages: arro3-core, h3ronpy, xdggs
Successfully installed arro3-core-0.4.5 h3ronpy-0.22.0 xdggs-0.1.1
Note: you may need to restart the kernel to use updated packages.
import xdggs
dout = xr.open_zarr("./diff-regridded.zarr")
dout
<xarray.Dataset> Size: 57MB
Dimensions: (y: 130, x: 267, s_rho: 40, time_counter: 5)
Coordinates:
cell_ids (y, x) int64 278kB dask.array<chunksize=(65, 267), meta=np.ndarray>
latitude (y, x) float64 278kB dask.array<chunksize=(65, 267), meta=np.ndarray>
longitude (y, x) float64 278kB dask.array<chunksize=(65, 267), meta=np.ndarray>
resolution float64 8B ...
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: y, x
Data variables:
ocean_mask (y, x) float64 278kB dask.array<chunksize=(130, 267), meta=np.ndarray>
temp (time_counter, s_rho, y, x) float64 56MB dask.array<chunksize=(1, 40, 130, 267), meta=np.ndarray>
Attributes:
grid_type: healpix
lat: 0
level: 12
lon: 0
nside: 4096
rot_lat: 0
rot_lon: 0dout = (
dout.load()
.drop_vars(["latitude", "longitude"])
.stack(cell=["x", "y"], create_index=False)
)
dout.cell_ids.attrs = {
"grid_name": "healpix",
"nside": nside,
"nest": True,
}
dout
<xarray.Dataset> Size: 56MB
Dimensions: (cell: 34710, s_rho: 40, time_counter: 5)
Coordinates:
cell_ids (cell) int64 278kB 56389452 56389453 ... 56569828 56569829
resolution float64 8B 0.0002498
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
Dimensions without coordinates: cell
Data variables:
ocean_mask (cell) float64 278kB nan nan nan nan nan ... nan nan nan nan
temp (time_counter, s_rho, cell) float64 56MB nan nan ... nan nan
Attributes:
grid_type: healpix
lat: 0
level: 12
lon: 0
nside: 4096
rot_lat: 0
rot_lon: 0dout_idx = dout.set_xindex("cell_ids", xdggs.DGGSIndex)
dout_idx
<xarray.Dataset> Size: 56MB
Dimensions: (cell: 34710, s_rho: 40, time_counter: 5)
Coordinates:
* cell_ids (cell) int64 278kB 56389452 56389453 ... 56569828 56569829
resolution float64 8B 0.0002498
* s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
* time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
time_instant (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
Dimensions without coordinates: cell
Data variables:
ocean_mask (cell) float64 278kB nan nan nan nan nan ... nan nan nan nan
temp (time_counter, s_rho, cell) float64 56MB nan nan ... nan nan
Indexes:
cell_ids HealpixIndex(nside=12, indexing_scheme=nested)
Attributes:
grid_type: healpix
lat: 0
level: 12
lon: 0
nside: 4096
rot_lat: 0
rot_lon: 0dout_idx.temp.isel(time_counter=0, s_rho=0).dggs.explore(center=0, cmap="viridis", alpha=0.8)