{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MITgcm Example \n", "\n", "xgcm is developed in close coordination with the [xmitgcm](http://xmitgcm.readthedocs.io/) package.\n", "The metadata in datasets constructed by xmitgcm should always be compatible with xgcm's expectations.\n", "xmitgcm is necessary for reading MITgcm's binary MDS file format.\n", "However, for this example, the MDS files have already been converted and saved as netCDF.\n", "\n", "Below are some example of how to make calculations on mitgcm-style datasets using xgcm.\n", "\n", "First we import xarray and xgcm:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "import numpy as np\n", "import xgcm\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10,6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we open the example dataset which is stored in a [zenodo archive](https://zenodo.org/record/4421428#.X_XP7y1h3x9)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n", "Dimensions: (XC: 90, XG: 90, YC: 40, YG: 40, Z: 15, Zl: 15, time: 1)\n", "Coordinates:\n", " * time (time) timedelta64[ns] 11:00:00\n", " maskC (Z, YC, XC) bool False False False False ... False False False\n", " dyC (YG, XC) float32 4.447e+05 4.447e+05 ... 4.447e+05 4.447e+05\n", " hFacC (Z, YC, XC) float32 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0\n", " rA (YC, XC) float32 4.111e+10 4.111e+10 ... 4.111e+10 4.111e+10\n", " hFacS (Z, YG, XC) float32 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0\n", " Depth (YC, XC) float32 0.0 0.0 0.0 0.0 ... 187.5 1.917e+03 2.995e+03\n", " * YG (YG) float32 -80.0 -76.0 -72.0 -68.0 -64.0 ... 64.0 68.0 72.0 76.0\n", " * Z (Z) float32 -25.0 -85.0 -170.0 ... -3.575e+03 -4.19e+03 -4.855e+03\n", " PHrefC (Z) float32 245.2 833.8 1.668e+03 ... 3.507e+04 4.11e+04 4.763e+04\n", " dyG (YC, XG) float32 4.447e+05 4.447e+05 ... 4.447e+05 4.447e+05\n", " rAw (YC, XG) float32 4.111e+10 4.111e+10 ... 4.111e+10 4.111e+10\n", " drF (Z) float32 50.0 70.0 100.0 140.0 190.0 ... 540.0 590.0 640.0 690.0\n", " * YC (YC) float32 -78.0 -74.0 -70.0 -66.0 -62.0 ... 66.0 70.0 74.0 78.0\n", " dxG (YG, XC) float32 7.722e+04 7.722e+04 ... 1.076e+05 1.076e+05\n", " * XG (XG) float32 0.0 4.0 8.0 12.0 16.0 ... 344.0 348.0 352.0 356.0\n", " iter (time) int64 39600\n", " maskW (Z, YC, XG) bool False False False False ... False False False\n", " * Zl (Zl) float32 0.0 -50.0 -120.0 ... -3.28e+03 -3.87e+03 -4.51e+03\n", " rAs (YG, XC) float32 3.433e+10 3.433e+10 ... 4.783e+10 4.783e+10\n", " rAz (YG, XG) float32 3.433e+10 3.433e+10 ... 4.783e+10 4.783e+10\n", " maskS (Z, YG, XC) bool False False False False ... False False False\n", " dxC (YC, XG) float32 9.246e+04 9.246e+04 ... 9.246e+04 9.246e+04\n", " hFacW (Z, YC, XG) float32 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0\n", " * XC (XC) float32 2.0 6.0 10.0 14.0 18.0 ... 346.0 350.0 354.0 358.0\n", "Data variables:\n", " UVEL (time, Z, YC, XG) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " VVEL (time, Z, YG, XC) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " WVEL (time, Zl, YC, XC) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " SALT (time, Z, YC, XC) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " THETA (time, Z, YC, XC) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " PH (time, Z, YC, XC) float32 -8.3 -8.3 -8.3 ... -470.8 -202.8\n", " Eta (time, YC, XC) float32 0.0 0.0 0.0 0.0 ... -0.6293 -0.6234 -0.649\n", "Attributes:\n", " Conventions: CF-1.6\n", " title: netCDF wrapper of MITgcm MDS binary data\n", " source: MITgcm\n", " history: Created by calling `open_mdsdataset(extra_metadata=None, ll...
array([39600000000000], dtype='timedelta64[ns]')
array([[[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " ...,\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]]])
array([[444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " ...,\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9]],\n", " dtype=float32)
array([[[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " ...,\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]]], dtype=float32)
array([[4.110970e+10, 4.110970e+10, 4.110970e+10, ..., 4.110970e+10,\n", " 4.110970e+10, 4.110970e+10],\n", " [5.450087e+10, 5.450087e+10, 5.450087e+10, ..., 5.450087e+10,\n", " 5.450087e+10, 5.450087e+10],\n", " [6.762652e+10, 6.762652e+10, 6.762652e+10, ..., 6.762652e+10,\n", " 6.762652e+10, 6.762652e+10],\n", " ...,\n", " [6.762652e+10, 6.762652e+10, 6.762652e+10, ..., 6.762652e+10,\n", " 6.762652e+10, 6.762652e+10],\n", " [5.450087e+10, 5.450087e+10, 5.450087e+10, ..., 5.450087e+10,\n", " 5.450087e+10, 5.450087e+10],\n", " [4.110970e+10, 4.110970e+10, 4.110970e+10, ..., 4.110970e+10,\n", " 4.110970e+10, 4.110970e+10]], dtype=float32)
array([[[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " ...,\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]]], dtype=float32)
array([[ 0. , 0. , 0. , ..., 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , ..., 0. , 0. , 0. ],\n", " [3740. , 3671.5, 1732.5, ..., 3821. , 4047.5, 4047.5],\n", " ...,\n", " [2144. , 2214.5, 2414. , ..., 1586.5, 2703. , 2048.5],\n", " [2995. , 2414. , 2414. , ..., 1183. , 1569.5, 2995. ],\n", " [2995. , 2354.5, 2087. , ..., 187.5, 1917. , 2995. ]], dtype=float32)
array([-80., -76., -72., -68., -64., -60., -56., -52., -48., -44., -40., -36.,\n", " -32., -28., -24., -20., -16., -12., -8., -4., 0., 4., 8., 12.,\n", " 16., 20., 24., 28., 32., 36., 40., 44., 48., 52., 56., 60.,\n", " 64., 68., 72., 76.], dtype=float32)
array([ -25., -85., -170., -290., -455., -670., -935., -1250., -1615.,\n", " -2030., -2495., -3010., -3575., -4190., -4855.], dtype=float32)
array([ 245.25, 833.85, 1667.7 , 2844.9 , 4463.55, 6572.7 , 9172.35,\n", " 12262.5 , 15843.15, 19914.3 , 24475.95, 29528.1 , 35070.75, 41103.9 ,\n", " 47627.55], dtype=float32)
array([[444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " ...,\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9],\n", " [444709.9, 444709.9, 444709.9, ..., 444709.9, 444709.9, 444709.9]],\n", " dtype=float32)
array([[4.110970e+10, 4.110970e+10, 4.110970e+10, ..., 4.110970e+10,\n", " 4.110970e+10, 4.110970e+10],\n", " [5.450087e+10, 5.450087e+10, 5.450087e+10, ..., 5.450087e+10,\n", " 5.450087e+10, 5.450087e+10],\n", " [6.762652e+10, 6.762652e+10, 6.762652e+10, ..., 6.762652e+10,\n", " 6.762652e+10, 6.762652e+10],\n", " ...,\n", " [6.762652e+10, 6.762652e+10, 6.762652e+10, ..., 6.762652e+10,\n", " 6.762652e+10, 6.762652e+10],\n", " [5.450087e+10, 5.450087e+10, 5.450087e+10, ..., 5.450087e+10,\n", " 5.450087e+10, 5.450087e+10],\n", " [4.110970e+10, 4.110970e+10, 4.110970e+10, ..., 4.110970e+10,\n", " 4.110970e+10, 4.110970e+10]], dtype=float32)
array([ 50., 70., 100., 140., 190., 240., 290., 340., 390., 440., 490., 540.,\n", " 590., 640., 690.], dtype=float32)
array([-78., -74., -70., -66., -62., -58., -54., -50., -46., -42., -38., -34.,\n", " -30., -26., -22., -18., -14., -10., -6., -2., 2., 6., 10., 14.,\n", " 18., 22., 26., 30., 34., 38., 42., 46., 50., 54., 58., 62.,\n", " 66., 70., 74., 78.], dtype=float32)
array([[ 77223.06, 77223.06, 77223.06, ..., 77223.06, 77223.06, 77223.06],\n", " [107585.06, 107585.06, 107585.06, ..., 107585.06, 107585.06, 107585.06],\n", " [137422.92, 137422.92, 137422.92, ..., 137422.92, 137422.92, 137422.92],\n", " ...,\n", " [166591.27, 166591.27, 166591.27, ..., 166591.27, 166591.27, 166591.27],\n", " [137422.92, 137422.92, 137422.92, ..., 137422.92, 137422.92, 137422.92],\n", " [107585.06, 107585.06, 107585.06, ..., 107585.06, 107585.06, 107585.06]],\n", " dtype=float32)
array([ 0., 4., 8., 12., 16., 20., 24., 28., 32., 36., 40., 44.,\n", " 48., 52., 56., 60., 64., 68., 72., 76., 80., 84., 88., 92.,\n", " 96., 100., 104., 108., 112., 116., 120., 124., 128., 132., 136., 140.,\n", " 144., 148., 152., 156., 160., 164., 168., 172., 176., 180., 184., 188.,\n", " 192., 196., 200., 204., 208., 212., 216., 220., 224., 228., 232., 236.,\n", " 240., 244., 248., 252., 256., 260., 264., 268., 272., 276., 280., 284.,\n", " 288., 292., 296., 300., 304., 308., 312., 316., 320., 324., 328., 332.,\n", " 336., 340., 344., 348., 352., 356.], dtype=float32)
array([39600])
array([[[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " ...,\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]]])
array([ 0., -50., -120., -220., -360., -550., -790., -1080., -1420.,\n", " -1810., -2250., -2740., -3280., -3870., -4510.], dtype=float32)
array([[3.433489e+10, 3.433489e+10, 3.433489e+10, ..., 3.433489e+10,\n", " 3.433489e+10, 3.433489e+10],\n", " [4.783442e+10, 4.783442e+10, 4.783442e+10, ..., 4.783442e+10,\n", " 4.783442e+10, 4.783442e+10],\n", " [6.110092e+10, 6.110092e+10, 6.110092e+10, ..., 6.110092e+10,\n", " 6.110092e+10, 6.110092e+10],\n", " ...,\n", " [7.406974e+10, 7.406974e+10, 7.406974e+10, ..., 7.406974e+10,\n", " 7.406974e+10, 7.406974e+10],\n", " [6.110092e+10, 6.110092e+10, 6.110092e+10, ..., 6.110092e+10,\n", " 6.110092e+10, 6.110092e+10],\n", " [4.783442e+10, 4.783442e+10, 4.783442e+10, ..., 4.783442e+10,\n", " 4.783442e+10, 4.783442e+10]], dtype=float32)
array([[3.433489e+10, 3.433489e+10, 3.433489e+10, ..., 3.433489e+10,\n", " 3.433489e+10, 3.433489e+10],\n", " [4.783442e+10, 4.783442e+10, 4.783442e+10, ..., 4.783442e+10,\n", " 4.783442e+10, 4.783442e+10],\n", " [6.110092e+10, 6.110092e+10, 6.110092e+10, ..., 6.110092e+10,\n", " 6.110092e+10, 6.110092e+10],\n", " ...,\n", " [7.406974e+10, 7.406974e+10, 7.406974e+10, ..., 7.406974e+10,\n", " 7.406974e+10, 7.406974e+10],\n", " [6.110092e+10, 6.110092e+10, 6.110092e+10, ..., 6.110092e+10,\n", " 6.110092e+10, 6.110092e+10],\n", " [4.783442e+10, 4.783442e+10, 4.783442e+10, ..., 4.783442e+10,\n", " 4.783442e+10, 4.783442e+10]], dtype=float32)
array([[[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [ True, True, ..., True, True],\n", " [ True, True, ..., True, True]],\n", "\n", " ...,\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]],\n", "\n", " [[False, False, ..., False, False],\n", " [False, False, ..., False, False],\n", " ...,\n", " [False, False, ..., False, False],\n", " [False, False, ..., False, False]]])
array([[ 92460.38, 92460.38, 92460.38, ..., 92460.38, 92460.38, 92460.38],\n", " [122578.66, 122578.66, 122578.66, ..., 122578.66, 122578.66, 122578.66],\n", " [152099.73, 152099.73, 152099.73, ..., 152099.73, 152099.73, 152099.73],\n", " ...,\n", " [152099.73, 152099.73, 152099.73, ..., 152099.73, 152099.73, 152099.73],\n", " [122578.66, 122578.66, 122578.66, ..., 122578.66, 122578.66, 122578.66],\n", " [ 92460.38, 92460.38, 92460.38, ..., 92460.38, 92460.38, 92460.38]],\n", " dtype=float32)
array([[[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [1., 1., ..., 1., 1.],\n", " [1., 1., ..., 1., 1.]],\n", "\n", " ...,\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]],\n", "\n", " [[0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.],\n", " ...,\n", " [0., 0., ..., 0., 0.],\n", " [0., 0., ..., 0., 0.]]], dtype=float32)
array([ 2., 6., 10., 14., 18., 22., 26., 30., 34., 38., 42., 46.,\n", " 50., 54., 58., 62., 66., 70., 74., 78., 82., 86., 90., 94.,\n", " 98., 102., 106., 110., 114., 118., 122., 126., 130., 134., 138., 142.,\n", " 146., 150., 154., 158., 162., 166., 170., 174., 178., 182., 186., 190.,\n", " 194., 198., 202., 206., 210., 214., 218., 222., 226., 230., 234., 238.,\n", " 242., 246., 250., 254., 258., 262., 266., 270., 274., 278., 282., 286.,\n", " 290., 294., 298., 302., 306., 310., 314., 318., 322., 326., 330., 334.,\n", " 338., 342., 346., 350., 354., 358.], dtype=float32)
array([[[[ 0. , ..., 0. ],\n", " ...,\n", " [-0.005508, ..., -0.00823 ]],\n", "\n", " ...,\n", "\n", " [[ 0. , ..., 0. ],\n", " ...,\n", " [ 0. , ..., 0. ]]]], dtype=float32)
array([[[[ 0. , ..., 0. ],\n", " ...,\n", " [ 0.003407, ..., -0.002983]],\n", "\n", " ...,\n", "\n", " [[ 0. , ..., 0. ],\n", " ...,\n", " [ 0. , ..., 0. ]]]], dtype=float32)
array([[[[ 0.000000e+00, ..., 0.000000e+00],\n", " ...,\n", " [ 2.502884e-09, ..., -1.597719e-09]],\n", "\n", " ...,\n", "\n", " [[ 0.000000e+00, ..., 0.000000e+00],\n", " ...,\n", " [ 0.000000e+00, ..., 0.000000e+00]]]], dtype=float32)
array([[[[ 0. , ..., 0. ],\n", " ...,\n", " [34.48869 , ..., 34.226387]],\n", "\n", " ...,\n", "\n", " [[ 0. , ..., 0. ],\n", " ...,\n", " [ 0. , ..., 0. ]]]], dtype=float32)
array([[[[ 0. , ..., 0. ],\n", " ...,\n", " [ 0.010286, ..., -0.237801]],\n", "\n", " ...,\n", "\n", " [[ 0. , ..., 0. ],\n", " ...,\n", " [ 0. , ..., 0. ]]]], dtype=float32)
array([[[[ -8.300195, ..., -8.300195],\n", " ...,\n", " [ -8.130636, ..., -8.112844]],\n", "\n", " ...,\n", "\n", " [[-1062.0314 , ..., -1062.0314 ],\n", " ...,\n", " [ -202.76265 , ..., -202.77208 ]]]], dtype=float32)
array([[[ 0. , 0. , ..., 0. , 0. ],\n", " [ 0. , 0. , ..., 0. , 0. ],\n", " ...,\n", " [-0.702411, -0.694586, ..., -0.694789, -0.709546],\n", " [-0.656158, -0.659816, ..., -0.623395, -0.649 ]]], dtype=float32)