{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting started with xgcm for MOM6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* MOM6 variables are staggered according to the Arakawa C-grid \n", "* It uses a north-east index convention\n", "* center points are labelled (xh, yh) and corner points are labelled (xq, yq)\n", "* important: variables xh/yh, xq/yq that are named \"nominal\" longitude/latitude **are not** the true geographical coordinates and are not suitable for plotting (more later)\n", "\n", "See [indexing](https://mom6.readthedocs.io/en/dev-gfdl/api/generated/pages/Horizontal_indexing.html) for details." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "from xgcm import Grid\n", "import warnings\n", "import matplotlib.pylab as plt\n", "from cartopy import crs as ccrs\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "warnings.filterwarnings(\"ignore\")\n", "_ = xr.set_options(display_style='text')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this tutorial, we use sample data for the $\\frac{1}{2}^{\\circ}$ global model OM4p05 hosted on a GFDL thredds server:" ] }, { "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}, drop_variables=['average_DT',\n", " 'average_T1',\n", " 'average_T2'],\n", " engine='pydap')" ] }, { "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", " 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.Dataset>\n", "Dimensions: (xh: 720, xq: 721, yh: 576, yq: 577)\n", "Coordinates:\n", " * xh (xh) float64 -299.8 -299.2 -298.8 -298.2 ... 58.75 59.25 59.75\n", " * xq (xq) float64 -300.0 -299.5 -299.0 -298.5 ... 58.5 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 -78.0 -77.82 -77.63 -77.45 ... 89.37 89.58 89.79 90.0\n", "Data variables:\n", " geolat (yh, xh) float32 ...\n", " geolat_c (yq, xq) float32 ...\n", " geolon (yh, xh) float32 ...\n", " geolon_c (yq, xq) float32 ...\n", "Attributes:\n", " filename: 19000101.ocean_static.nc\n", " title: OM4_SIS2_cgrid_05\n", " grid_type: regular\n", " grid_tile: N/A\n", " history: Tue Mar 3 13:41:58 2020: ncks -v geolon,geolon_c,geolat,geol...\n", " NCO: 4.0.3" ], "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": [ "