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>
[10]:
da_x1_on_x3.plot()
[10]:
<matplotlib.collections.QuadMesh at 0x2aab6a5b8240>
[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