Created
November 16, 2018 00:22
-
-
Save angus-g/d4556cfbb89e39446737926ed8ef3f7b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import xarray as xr\n", | |
"from xgcm import Grid" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Open dataset with u, v and h data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<xarray.Dataset>\n", | |
"Dimensions: (nv: 2, rho_i: 38, rho_l: 37, xh: 160, xq: 161, yh: 800, yq: 801)\n", | |
"Coordinates:\n", | |
" * xh (xh) float64 0.125 0.375 0.625 0.875 1.125 1.375 1.625 1.875 ...\n", | |
" * yh (yh) float64 -70.15 -70.07 -69.98 -69.89 -69.81 -69.72 ...\n", | |
" * rho_l (rho_l) float64 1.03e+03 1.031e+03 1.032e+03 1.033e+03 ...\n", | |
" * rho_i (rho_i) float64 1.029e+03 1.03e+03 1.032e+03 1.033e+03 ...\n", | |
" Time float64 2.047e+04\n", | |
" * nv (nv) float64 1.0 2.0\n", | |
" * xq (xq) float64 0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 2.25 ...\n", | |
" * yq (yq) float64 -70.19 -70.11 -70.02 -69.94 -69.85 -69.77 ...\n", | |
"Data variables:\n", | |
" h_rho (rho_l, yh, xh) float32 ...\n", | |
" uh_rho (rho_l, yh, xq) float32 ...\n", | |
" vh_rho (rho_l, yq, xh) float32 ...\n", | |
" average_T1 float64 ...\n", | |
" average_T2 float64 ...\n", | |
" average_DT float64 ...\n", | |
" Time_bnds (nv) float64 ...\n", | |
"Attributes:\n", | |
" filename: ave_cont_rho.nc\n", | |
" title: Global ALE Experiment\n", | |
" associated_files: area_t: ocean_static.nc\n", | |
" grid_type: regular\n", | |
" grid_tile: N/A" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"ds = xr.open_dataset('/g/data/v45/ahg157/mom6-archive/tub-spinup/output028/ave_cont_rho.nc',\n", | |
" decode_times=False).isel(Time=0)\n", | |
"ds" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Method 1: Define a grid with explicit coordinates (in documentation, but doesn't work)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "TypeError", | |
"evalue": "__init__() got an unexpected keyword argument 'coords'", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-3-f81961d5ddb3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m'X'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'center'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'xh'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'outer'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'xq'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m'Y'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'center'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'yh'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'outer'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'yq'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;34m'Z'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'center'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'rho_l'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'outer'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'rho_i'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m })\n", | |
"\u001b[0;31mTypeError\u001b[0m: __init__() got an unexpected keyword argument 'coords'" | |
] | |
} | |
], | |
"source": [ | |
"g = Grid(ds, coords={\n", | |
" 'X': {'center': 'xh', 'outer': 'xq'},\n", | |
" 'Y': {'center': 'yh', 'outer': 'yq'},\n", | |
" 'Z': {'center': 'rho_l', 'outer': 'rho_i'}\n", | |
"})" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Method 2: Set grid attributes on dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ds.coords['xh'].attrs.update(axis='X')\n", | |
"ds.coords['xq'].attrs.update(axis='X', c_grid_axis_shift=0.5)\n", | |
"ds.coords['yh'].attrs.update(axis='Y')\n", | |
"ds.coords['yq'].attrs.update(axis='Y', c_grid_axis_shift=0.5)\n", | |
"ds.coords['rho_l'].attrs.update(axis='Z')\n", | |
"ds.coords['rho_i'].attrs.update(axis='Z', c_grid_axis_shift=0.5)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<xgcm.Grid>\n", | |
"X Axis (periodic):\n", | |
" * center xh (160) --> outer\n", | |
" * outer xq (161) --> center\n", | |
"Y Axis (not periodic):\n", | |
" * center yh (800) --> outer\n", | |
" * outer yq (801) --> center\n", | |
"Z Axis (not periodic):\n", | |
" * center rho_l (37) --> outer\n", | |
" * outer rho_i (38) --> center" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"g = Grid(ds, periodic=['X'])\n", | |
"# if periodic isn't specified, it assumes all dimensions are...\n", | |
"# there's probably another attribute that modifies that behaviour\n", | |
"g" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Interpolation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<xarray.DataArray (rho_l: 37, yh: 800, xh: 160)>\n", | |
"array([[[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" ...,\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]]], dtype=float32)\n", | |
"Coordinates:\n", | |
" * rho_l (rho_l) float64 1.03e+03 1.031e+03 1.032e+03 1.033e+03 ...\n", | |
" * yh (yh) float64 -70.15 -70.07 -69.98 -69.89 -69.81 -69.72 -69.64 ...\n", | |
" * xh (xh) float64 0.125 0.375 0.625 0.875 1.125 1.375 1.625 1.875 ..." | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"g.interp(ds.uh_rho, 'X')**2 + g.interp(ds.vh_rho, 'Y')**2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Differencing" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<xarray.DataArray (rho_i: 38, yh: 800, xh: 160)>\n", | |
"array([[[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" ...,\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]],\n", | |
"\n", | |
" [[nan, nan, ..., nan, nan],\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" ...,\n", | |
" [nan, nan, ..., 0., nan],\n", | |
" [nan, nan, ..., nan, nan]]], dtype=float32)\n", | |
"Coordinates:\n", | |
" * rho_i (rho_i) float64 1.029e+03 1.03e+03 1.032e+03 1.033e+03 ...\n", | |
" * yh (yh) float64 -70.15 -70.07 -69.98 -69.89 -69.81 -69.72 -69.64 ...\n", | |
" * xh (xh) float64 0.125 0.375 0.625 0.875 1.125 1.375 1.625 1.875 ..." | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"g.diff(ds.h_rho, 'Z', boundary='extend')" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python [conda env:analysis3-18.10]", | |
"language": "python", | |
"name": "conda-env-analysis3-18.10-py" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment