Tutorial

esmlab-regrid supports a regridding workflow that is based on named grid files saved in SCRIP format.

[1]:
%matplotlib inline
import xarray as xr
import numpy as np

import esmlab_regrid
import esmlab

Load some dummy data.

[2]:
dsx1 = xr.open_dataset('/glade/work/mclong/grids/POP_gx1v7.nc')
dsx1 = dsx1.drop([v for v in dsx1.variables if v not in ['z_t','HT','KMT']])

dsx3 = xr.open_dataset('/glade/work/mclong/grids/pop-grid-g37.nc')
dsx3 = dsx3.drop([v for v in dsx3.variables if v not in ['z_t','HT','KMT']])

dsx1.HT.values = np.where(dsx1.KMT > 0,dsx1.HT.values,np.nan)
dsx3.HT.values = np.where(dsx3.KMT > 0,dsx3.HT.values,np.nan)
[3]:
esmlab.config.get('regrid.gridfile-directory')
[3]:
'/glade/u/home/abanihi/.esmlab/esmlab-grid-files'
[4]:
esmlab.config.set({'regrid.gridfile-directory': '/glade/work/abanihi/esmlab-regrid'})
[4]:
<esmlab.config.set at 0x2aaaafa85eb8>
[5]:
esmlab.config.get('regrid.gridfile-directory')
[5]:
'/glade/work/abanihi/esmlab-regrid'

Instantiate the regridding object

The regridder is initialized with a specific source grid and destination grid. The grid files describeing this must be present (future work will enable on-the-fly generation).

[6]:
method = 'bilinear'
src_grid_name = 'POP_gx1v7'
dst_grid_name = 'POP_gx3v7'
[7]:
%%time
R = esmlab_regrid.regridder(name_grid_src=src_grid_name, name_grid_dst=dst_grid_name,
                            method=method, overwrite_existing=False)
/glade/work/abanihi/esmlab-regrid
/glade/work/abanihi/esmlab-regrid
Generating /glade/work/abanihi/esmlab-regrid/weights/POP_gx1v7_to_POP_gx3v7_bilinear
CPU times: user 2.22 s, sys: 88 ms, total: 2.3 s
Wall time: 2.37 s

Perform the regridding

[8]:
da_x1_on_x3 = R(dsx1.HT, renormalize=True)
da_x1_on_x3
/glade/work/abanihi/softwares/miniconda3/envs/analysis/lib/python3.7/site-packages/esmlab_regrid/core.py:203: RuntimeWarning: invalid value encountered in greater
  data_dst = np.where(ones_dst > 0.0, data_dst, np.nan)
[8]:
<xarray.DataArray 'HT' (nlat: 116, nlon: 100)>
array([[         nan,          nan,          nan, ...,          nan,
                 nan,          nan],
       [82960.6956  ,          nan,          nan, ...,          nan,
        36713.721329, 74816.301981],
       [80975.451175, 69774.160175, 37670.737975, ..., 30221.084719,
        33983.806102, 52968.637226],
       ...,
       [         nan,          nan,          nan, ...,          nan,
                 nan,          nan],
       [         nan,          nan,          nan, ...,          nan,
                 nan,          nan],
       [         nan,          nan,          nan, ...,          nan,
                 nan,          nan]])
Dimensions without coordinates: nlat, nlon
Attributes:
    long_name:      ocean depth at T points
    units:          centimeter
    regrid_method:  bilinear
    history:        \n2019-05-01 13:54:11.162852 esmlab.regrid <regrid>
[9]:
dsx3.HT.plot()
[9]:
<matplotlib.collections.QuadMesh at 0x2aab67c7c710>
../_images/notebooks_tutorial_12_1.png
[10]:
da_x1_on_x3.plot()
[10]:
<matplotlib.collections.QuadMesh at 0x2aab6a5b8240>
../_images/notebooks_tutorial_13_1.png
[11]:
%load_ext watermark
%watermark --iversion -g  -m -v -u -d
esmlab        v2019.3.16+140.gd3ce9a5
numpy         1.15.4
esmlab_regrid 0+untagged.19.gb8b7182
xarray        0.12.1
last updated: 2019-05-01

CPython 3.7.3
IPython 7.1.1

compiler   : GCC 7.3.0
system     : Linux
release    : 3.12.62-60.64.8-default
machine    : x86_64
processor  : x86_64
CPU cores  : 72
interpreter: 64bit
Git hash   : 5a8cedcec68d55c4b9dbe48f778b44b444db5297