{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Vorticity-based diagnostics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vorticity is an omnipresent physical quantity in GFD. Here we show how to compute it from the model output:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "from xgcm import Grid\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "dataurl = 'http://35.188.34.63:8080/thredds/dodsC/OM4p5/'\n", "\n", "ds = xr.open_dataset(f'{dataurl}/ocean_monthly_z.200301-200712.nc4',\n", " chunks={'time':1, 'z_l': 1}, engine='pydap')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A quick look at the coordinates in the dataset shows that the grid is saved in non-symetric mode (see https://mom6.readthedocs.io/en/dev-gfdl/api/generated/pages/Horizontal_indexing.html for details) and that the first vorticity point is located northeast of the first center point,\n", "in agreement with the model's conventions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n",
"Dimensions: (nv: 2, time: 60, xh: 720, xq: 720, yh: 576, yq: 576, z_i: 36, z_l: 35)\n",
"Coordinates:\n",
" * nv (nv) float64 1.0 2.0\n",
" * xh (xh) float64 -299.8 -299.2 -298.8 -298.2 ... 58.75 59.25 59.75\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 59.0 59.5 60.0\n",
" * yh (yh) float64 -77.91 -77.72 -77.54 -77.36 ... 89.47 89.68 89.89\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.58 89.79 90.0\n",
" * z_i (z_i) float64 0.0 5.0 15.0 25.0 ... 5.75e+03 6.25e+03 6.75e+03\n",
" * z_l (z_l) float64 2.5 10.0 20.0 32.5 ... 5.5e+03 6e+03 6.5e+03\n",
" * time (time) object 2003-01-16 12:00:00 ... 2007-12-16 12:00:00\n",
"Data variables:\n",
" Coriolis (yq, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" areacello (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" areacello_bu (yq, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" areacello_cu (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" areacello_cv (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" deptho (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dxCu (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dxCv (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dxt (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dyCu (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dyCv (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" dyt (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolat (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolat_c (yq, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolat_u (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolat_v (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolon (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolon_c (yq, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolon_u (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" geolon_v (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" hfgeou (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" sftof (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" thkcello (z_l, yh, xh) float32 dask.array<chunksize=(1, 576, 720), meta=np.ndarray>\n",
" wet (yh, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" wet_c (yq, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" wet_u (yh, xq) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" wet_v (yq, xh) float32 dask.array<chunksize=(576, 720), meta=np.ndarray>\n",
" average_DT (time) timedelta64[ns] dask.array<chunksize=(1,), meta=np.ndarray>\n",
" average_T1 (time) datetime64[ns] dask.array<chunksize=(1,), meta=np.ndarray>\n",
" average_T2 (time) datetime64[ns] dask.array<chunksize=(1,), meta=np.ndarray>\n",
" so (time, z_l, yh, xh) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" time_bnds (time, nv) timedelta64[ns] dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
" thetao (time, z_l, yh, xh) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" umo (time, z_l, yh, xq) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" uo (time, z_l, yh, xq) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" vmo (time, z_l, yq, xh) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" vo (time, z_l, yq, xh) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" volcello (time, z_l, yh, xh) float32 dask.array<chunksize=(1, 1, 576, 720), meta=np.ndarray>\n",
" zos (time, yh, xh) float32 dask.array<chunksize=(1, 576, 720), meta=np.ndarray>\n",
"Attributes:\n",
" filename: ocean_monthly.200301-200712.zos.nc\n",
" title: OM4p5_IAF_BLING_CFC_abio_csf_mle200\n",
" associated_files: areacello: 20030101.ocean_static.nc\n",
" grid_type: regular\n",
" grid_tile: N/A\n",
" external_variables: areacello\n",
" DODS_EXTRA.Unlimited_Dimension: time"
],
"text/plain": [
"<xarray.DataArray (time: 60, z_l: 35, yq: 576, xq: 720)>\n",
"dask.array<truediv, shape=(60, 35, 576, 720), dtype=float32, chunksize=(1, 1, 575, 719), chunktype=numpy.ndarray>\n",
"Coordinates:\n",
" * time (time) object 2003-01-16 12:00:00 ... 2007-12-16 12:00:00\n",
" * z_l (z_l) float64 2.5 10.0 20.0 32.5 ... 5e+03 5.5e+03 6e+03 6.5e+03\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.37 89.58 89.79 90.0\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 58.5 59.0 59.5 60.0"
],
"text/plain": [
"<xarray.DataArray (time: 1, yq: 576, xq: 720)>\n",
"array([[[nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" ...,\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
"Coordinates:\n",
" * time (time) object 2004-12-16 12:00:00\n",
" z_l float64 2.5\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.37 89.58 89.79 90.0\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 58.5 59.0 59.5 60.0"
],
"text/plain": [
"<xarray.DataArray 'mul-2e41182f53703b7dfb6668570b3584a4' (yq: 576, xq: 720)>\n",
"dask.array<mul, shape=(576, 720), dtype=float32, chunksize=(575, 719), chunktype=numpy.ndarray>\n",
"Coordinates:\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.37 89.58 89.79 90.0\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 58.5 59.0 59.5 60.0"
],
"text/plain": [
"<xarray.DataArray (time: 60, z_l: 35, yq: 576, xq: 720)>\n",
"dask.array<truediv, shape=(60, 35, 576, 720), dtype=float32, chunksize=(1, 1, 575, 719), chunktype=numpy.ndarray>\n",
"Coordinates:\n",
" * time (time) object 2003-01-16 12:00:00 ... 2007-12-16 12:00:00\n",
" * z_l (z_l) float64 2.5 10.0 20.0 32.5 ... 5e+03 5.5e+03 6e+03 6.5e+03\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.37 89.58 89.79 90.0\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 58.5 59.0 59.5 60.0"
],
"text/plain": [
"<xarray.DataArray (time: 1, yq: 576, xq: 720)>\n",
"array([[[nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" ...,\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
"Coordinates:\n",
" * time (time) object 2004-12-16 12:00:00\n",
" z_l float64 2.5\n",
" * yq (yq) float64 -77.82 -77.63 -77.45 -77.26 ... 89.37 89.58 89.79 90.0\n",
" * xq (xq) float64 -299.5 -299.0 -298.5 -298.0 ... 58.5 59.0 59.5 60.0"
],
"text/plain": [
"