Skip to content

Instantly share code, notes, and snippets.

@matt-long
Last active April 23, 2021 15:22
Show Gist options
  • Save matt-long/89bfc79db294e5c13ce2e60bbba601a3 to your computer and use it in GitHub Desktop.
Save matt-long/89bfc79db294e5c13ce2e60bbba601a3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "joint-slovenia",
"metadata": {},
"source": [
"# How to use `xarray.map_blocks` to compute the MLD based on $\\Delta\\sigma_{\\theta}$ criterion"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "steady-seating",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"from scipy import interpolate\n",
"import numpy as np\n",
"import xarray as xr\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import pop_tools"
]
},
{
"cell_type": "markdown",
"id": "transsexual-candidate",
"metadata": {},
"source": [
"## Read some monthly temperature and salinity data"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "olympic-aquatic",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2 {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (member_id: 2, month: 12, nlat: 3, nlon: 4, z_t: 60)\n",
"Coordinates:\n",
" * z_t (z_t) float32 500.0 1.5e+03 2.5e+03 ... 5.125e+05 5.375e+05\n",
" TLONG (nlat, nlon) float64 321.7 322.8 323.9 ... 322.8 323.9 325.1\n",
" TLAT (nlat, nlon) float64 -78.15 -78.15 -78.15 ... -77.08 -77.08\n",
" * member_id (member_id) int64 1 2\n",
" ULONG (nlat, nlon) float64 322.3 323.4 324.5 ... 323.4 324.5 325.6\n",
" ULAT (nlat, nlon) float64 -77.88 -77.88 -77.88 ... -76.82 -76.82\n",
" * month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12\n",
"Dimensions without coordinates: nlat, nlon\n",
"Data variables:\n",
" TEMP (month, member_id, z_t, nlat, nlon) float32 -1.89 -1.89 ... nan\n",
" SALT (month, member_id, z_t, nlat, nlon) float32 33.89 33.89 ... nan</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-bf1851d1-e24b-4ded-9b28-c968f9f8aec0' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-bf1851d1-e24b-4ded-9b28-c968f9f8aec0' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>member_id</span>: 2</li><li><span class='xr-has-index'>month</span>: 12</li><li><span>nlat</span>: 3</li><li><span>nlon</span>: 4</li><li><span class='xr-has-index'>z_t</span>: 60</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-b3461976-4880-43cf-9bfb-a49766509e6e' class='xr-section-summary-in' type='checkbox' checked><label for='section-b3461976-4880-43cf-9bfb-a49766509e6e' class='xr-section-summary' >Coordinates: <span>(7)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>z_t</span></div><div class='xr-var-dims'>(z_t)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>500.0 1.5e+03 ... 5.375e+05</div><input id='attrs-af1fd48a-17a7-4637-bdf1-387de4bbb20b' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-af1fd48a-17a7-4637-bdf1-387de4bbb20b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b70c38ee-3ca3-4cbe-8458-e4d756188111' class='xr-var-data-in' type='checkbox'><label for='data-b70c38ee-3ca3-4cbe-8458-e4d756188111' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>depth from surface to midpoint of layer</dd><dt><span>units :</span></dt><dd>centimeters</dd><dt><span>positive :</span></dt><dd>down</dd><dt><span>valid_min :</span></dt><dd>500.0</dd><dt><span>valid_max :</span></dt><dd>537500.0</dd></dl></div><div class='xr-var-data'><pre>array([5.000000e+02, 1.500000e+03, 2.500000e+03, 3.500000e+03, 4.500000e+03,\n",
" 5.500000e+03, 6.500000e+03, 7.500000e+03, 8.500000e+03, 9.500000e+03,\n",
" 1.050000e+04, 1.150000e+04, 1.250000e+04, 1.350000e+04, 1.450000e+04,\n",
" 1.550000e+04, 1.650984e+04, 1.754790e+04, 1.862913e+04, 1.976603e+04,\n",
" 2.097114e+04, 2.225783e+04, 2.364088e+04, 2.513702e+04, 2.676542e+04,\n",
" 2.854837e+04, 3.051192e+04, 3.268680e+04, 3.510935e+04, 3.782276e+04,\n",
" 4.087846e+04, 4.433777e+04, 4.827367e+04, 5.277280e+04, 5.793729e+04,\n",
" 6.388626e+04, 7.075633e+04, 7.870025e+04, 8.788252e+04, 9.847059e+04,\n",
" 1.106204e+05, 1.244567e+05, 1.400497e+05, 1.573946e+05, 1.764003e+05,\n",
" 1.968944e+05, 2.186457e+05, 2.413972e+05, 2.649001e+05, 2.889385e+05,\n",
" 3.133405e+05, 3.379793e+05, 3.627670e+05, 3.876452e+05, 4.125768e+05,\n",
" 4.375392e+05, 4.625190e+05, 4.875083e+05, 5.125028e+05, 5.375000e+05],\n",
" dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>TLONG</span></div><div class='xr-var-dims'>(nlat, nlon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>321.7 322.8 323.9 ... 323.9 325.1</div><input id='attrs-c05025c8-6a1b-4bc6-b278-e308f7796863' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-c05025c8-6a1b-4bc6-b278-e308f7796863' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-01b12915-cf05-4d85-bb9c-fb2243f4282a' class='xr-var-data-in' type='checkbox'><label for='data-01b12915-cf05-4d85-bb9c-fb2243f4282a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>array of t-grid longitudes</dd><dt><span>units :</span></dt><dd>degrees_east</dd></dl></div><div class='xr-var-data'><pre>array([[321.68750895, 322.81250898, 323.93750901, 325.06250905],\n",
" [321.68750895, 322.81250898, 323.93750901, 325.06250905],\n",
" [321.68750895, 322.81250898, 323.93750901, 325.06250905]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>TLAT</span></div><div class='xr-var-dims'>(nlat, nlon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-78.15 -78.15 ... -77.08 -77.08</div><input id='attrs-9d1b160d-a19f-4ef2-b7b0-9a743279a533' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-9d1b160d-a19f-4ef2-b7b0-9a743279a533' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0b5fcec2-83bc-4c88-8f70-e72f011dc31c' class='xr-var-data-in' type='checkbox'><label for='data-0b5fcec2-83bc-4c88-8f70-e72f011dc31c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>array of t-grid latitudes</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>array([[-78.15208992, -78.15208992, -78.15208992, -78.15208992],\n",
" [-77.61787338, -77.61787338, -77.61787338, -77.61787338],\n",
" [-77.08365664, -77.08365664, -77.08365664, -77.08365664]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>member_id</span></div><div class='xr-var-dims'>(member_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2</div><input id='attrs-e7db72d6-242d-47f7-99fd-44ee0c34a230' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e7db72d6-242d-47f7-99fd-44ee0c34a230' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0beea264-0774-4811-b96c-0056e10eb883' class='xr-var-data-in' type='checkbox'><label for='data-0beea264-0774-4811-b96c-0056e10eb883' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1, 2])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>ULONG</span></div><div class='xr-var-dims'>(nlat, nlon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>322.3 323.4 324.5 ... 324.5 325.6</div><input id='attrs-eaaba982-cbe1-46aa-8ddd-c0eb6ecc2158' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-eaaba982-cbe1-46aa-8ddd-c0eb6ecc2158' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3d58cfcd-915d-4bf0-a334-850f688a88be' class='xr-var-data-in' type='checkbox'><label for='data-3d58cfcd-915d-4bf0-a334-850f688a88be' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>array of u-grid longitudes</dd><dt><span>units :</span></dt><dd>degrees_east</dd></dl></div><div class='xr-var-data'><pre>array([[322.25000897, 323.375009 , 324.50000903, 325.62500906],\n",
" [322.25000897, 323.375009 , 324.50000903, 325.62500906],\n",
" [322.25000897, 323.375009 , 324.50000903, 325.62500906]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>ULAT</span></div><div class='xr-var-dims'>(nlat, nlon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-77.88 -77.88 ... -76.82 -76.82</div><input id='attrs-3ad7f56a-2501-46d0-bae6-e87fc8f2c0af' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3ad7f56a-2501-46d0-bae6-e87fc8f2c0af' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5e1c68f4-5fbf-484e-bcc6-61a2979f4f25' class='xr-var-data-in' type='checkbox'><label for='data-5e1c68f4-5fbf-484e-bcc6-61a2979f4f25' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>array of u-grid latitudes</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>array([[-77.88441506, -77.88441506, -77.88441506, -77.88441506],\n",
" [-77.35017504, -77.35017504, -77.35017504, -77.35017504],\n",
" [-76.81593503, -76.81593503, -76.81593503, -76.81593503]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>month</span></div><div class='xr-var-dims'>(month)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 8 9 10 11 12</div><input id='attrs-5abe1bfa-809f-49e8-8355-25e0240ae05d' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-5abe1bfa-809f-49e8-8355-25e0240ae05d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-70eeaaa8-4bb1-4e48-93e7-6eb46c9b2cb1' class='xr-var-data-in' type='checkbox'><label for='data-70eeaaa8-4bb1-4e48-93e7-6eb46c9b2cb1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-154c4e86-5fa7-47d7-8d2f-597a0da56d7a' class='xr-section-summary-in' type='checkbox' checked><label for='section-154c4e86-5fa7-47d7-8d2f-597a0da56d7a' class='xr-section-summary' >Data variables: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>TEMP</span></div><div class='xr-var-dims'>(month, member_id, z_t, nlat, nlon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-e6377d95-be80-4cb6-b0a1-29308cd9d143' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e6377d95-be80-4cb6-b0a1-29308cd9d143' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-598d90fb-2497-49fb-a9bd-6961e78066a7' class='xr-var-data-in' type='checkbox'><label for='data-598d90fb-2497-49fb-a9bd-6961e78066a7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[[[[-1.890488, ..., nan],\n",
" ...,\n",
" [-1.827651, ..., -1.790375]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]],\n",
"\n",
"\n",
" [[[-1.891997, ..., nan],\n",
" ...,\n",
" [-1.831525, ..., -1.805189]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]]],\n",
"\n",
"\n",
"\n",
" ...,\n",
"\n",
"\n",
"\n",
" [[[[-1.905098, ..., nan],\n",
" ...,\n",
" [-1.893062, ..., -1.888636]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]],\n",
"\n",
"\n",
" [[[-1.904504, ..., nan],\n",
" ...,\n",
" [-1.897517, ..., -1.893112]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>SALT</span></div><div class='xr-var-dims'>(month, member_id, z_t, nlat, nlon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-cb47116a-fc02-4cf7-bb24-a591832563e4' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-cb47116a-fc02-4cf7-bb24-a591832563e4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-93ef9300-d5ec-4869-bf01-2ad68ac802cc' class='xr-var-data-in' type='checkbox'><label for='data-93ef9300-d5ec-4869-bf01-2ad68ac802cc' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[[[[33.885674, ..., nan],\n",
" ...,\n",
" [33.79524 , ..., 33.766953]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]],\n",
"\n",
"\n",
" [[[33.886307, ..., nan],\n",
" ...,\n",
" [33.80596 , ..., 33.782864]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]]],\n",
"\n",
"\n",
"\n",
" ...,\n",
"\n",
"\n",
"\n",
" [[[[34.031586, ..., nan],\n",
" ...,\n",
" [34.00603 , ..., 33.994095]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]],\n",
"\n",
"\n",
" [[[34.007915, ..., nan],\n",
" ...,\n",
" [33.974957, ..., 33.95925 ]],\n",
"\n",
" ...,\n",
"\n",
" [[ nan, ..., nan],\n",
" ...,\n",
" [ nan, ..., nan]]]]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-bab00a53-e994-43c0-9c8c-bd3c59b23d5e' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-bab00a53-e994-43c0-9c8c-bd3c59b23d5e' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (member_id: 2, month: 12, nlat: 3, nlon: 4, z_t: 60)\n",
"Coordinates:\n",
" * z_t (z_t) float32 500.0 1.5e+03 2.5e+03 ... 5.125e+05 5.375e+05\n",
" TLONG (nlat, nlon) float64 321.7 322.8 323.9 ... 322.8 323.9 325.1\n",
" TLAT (nlat, nlon) float64 -78.15 -78.15 -78.15 ... -77.08 -77.08\n",
" * member_id (member_id) int64 1 2\n",
" ULONG (nlat, nlon) float64 322.3 323.4 324.5 ... 323.4 324.5 325.6\n",
" ULAT (nlat, nlon) float64 -77.88 -77.88 -77.88 ... -76.82 -76.82\n",
" * month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12\n",
"Dimensions without coordinates: nlat, nlon\n",
"Data variables:\n",
" TEMP (month, member_id, z_t, nlat, nlon) float32 ...\n",
" SALT (month, member_id, z_t, nlat, nlon) float32 ..."
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds = xr.merge((\n",
" xr.open_dataset('/glade/p/cgd/oce/projects/cesm2-marbl/xpersist_cache/3d_fields/TEMP-presentday-monclim.nc'),\n",
" xr.open_dataset('/glade/p/cgd/oce/projects/cesm2-marbl/xpersist_cache/3d_fields/SALT-presentday-monclim.nc'), \n",
"))\n",
"\n",
"ds = ds[['TEMP', 'SALT']]\n",
"\n",
"# subset for testing purposes\n",
"ds = ds.isel(member_id=slice(0, 2), nlat=slice(2, 5), nlon=slice(1, 5)) \n",
"ds "
]
},
{
"cell_type": "markdown",
"id": "another-traveler",
"metadata": {},
"source": [
"## Quick plot \n",
"\n",
"Confirm that we have a field with some land points included."
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "ready-banana",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x2ae36ddaf710>"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ds.SALT.isel(month=0, member_id=0, z_t=0).plot()"
]
},
{
"cell_type": "markdown",
"id": "beautiful-matthew",
"metadata": {},
"source": [
"## Define functions for computing MLD\n",
"\n",
"### Define the user-facing function\n",
"\n",
"`mld_dsigma` first computes density from salinity (`SALT`) and temperature (`TEMP`). It then computes the MLD using [xarray.map_blocks](http://xarray.pydata.org/en/stable/generated/xarray.map_blocks.html)."
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "super-atlanta",
"metadata": {},
"outputs": [],
"source": [
"def mld_dsigma(SALT, TEMP, dsigma=0.03, rho_chunks={'nlat': 16, 'nlon': 16}):\n",
" \"\"\"\n",
" Compute MLD based on ∆σ criterion. Uses xarray.map_blocks.\n",
" \n",
" Parameters\n",
" ----------\n",
" \n",
" SALT : xarray.DataArray\n",
" Salinity\n",
" TEMP : xarray.DataArray\n",
" Potential temperature\n",
" dsigma : float, optional\n",
" The value for ∆σ.\n",
" \n",
" Returns\n",
" -------\n",
" \n",
" MLD : xarray.DataArray\n",
" The MLD (m) defined as the point in the water column where\n",
" density exceeds rho[0] + dsigma. \n",
" \"\"\"\n",
" \n",
" # determine dimensionality\n",
" dims_in = SALT.dims\n",
" assert dims_in == TEMP.dims, 'dimension mismatch'\n",
" assert 'z_t' in SALT.coords, 'z_t not found in SALT coords'\n",
"\n",
" # drop ancillary coordinates (this may not be necessary)\n",
" SALT = SALT.reset_coords(drop=True)\n",
" TEMP = TEMP.reset_coords(drop=True)\n",
" \n",
" # compute density\n",
" rho = pop_tools.eos(SALT.chunk(rho_chunks), \n",
" TEMP.chunk(rho_chunks), \n",
" depth=SALT.z_t * 0.)\n",
" \n",
" # add these coordinates which creep in somewhere, I think when xarray does the unstack\n",
" # without these, I get an error: not expecting {'nlat', 'nlon'}\n",
" # chunking here is arbitrary and maybe suitable for the global POP_gx1v7 grid\n",
" # there's probably a better way to do this.\n",
" if 'nlat' in rho.dims and 'nlon' in rho.dims:\n",
" rho = rho.assign_coords({\n",
" 'nlat': xr.DataArray(np.arange(len(SALT.nlat)), dims=('nlat')),\n",
" 'nlon': xr.DataArray(np.arange(len(SALT.nlon)), dims=('nlon')),\n",
" })\n",
" \n",
" rho = rho.persist()\n",
" \n",
" # compute and return MLD\n",
" return xr.map_blocks(\n",
" interp_mld_dsigma, rho,\n",
" kwargs=dict(dsigma=dsigma), \n",
" template=rho.isel(z_t=0).drop('z_t'),\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "capable-fundamentals",
"metadata": {},
"source": [
"### Actual MLD computation\n",
"\n",
"This function, `interp_mld_dsigma` is designed to be called within `xr.map_blocks`. It assumes that `rho_in` has a depth dimension, `z_t` and some number of unspecified other dimensions, `non_vertical_dims`. \n",
"\n",
"The `non_vertical_dims` are \"stacked\" using [xarray.stack](http://xarray.pydata.org/en/stable/generated/xarray.DataArray.stack.html) and the code loops over these dimensions, performing linear interpolation in `z_t` at each location.\n",
"\n",
"The data are return `unstacked` with the dimensions ordered as the arrived in `rho_in`.\n",
"\n",
"\n",
"We define the function here, then immediately call it to test it; arbitrarily, we're calling it on `TEMP` rather than density."
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "exterior-mauritius",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2 {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray &#x27;TEMP&#x27; (month: 1, member_id: 1, nlat: 1, nlon: 1)&gt;\n",
"array([[[[223.72537]]]], dtype=float32)\n",
"Coordinates:\n",
" * month (month) int64 1\n",
" * member_id (member_id) int64 1\n",
" * nlat (nlat) int64 0\n",
" * nlon (nlon) int64 0</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'TEMP'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>month</span>: 1</li><li><span class='xr-has-index'>member_id</span>: 1</li><li><span class='xr-has-index'>nlat</span>: 1</li><li><span class='xr-has-index'>nlon</span>: 1</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-b5eedf8f-503a-406a-8dc3-a588d385288b' class='xr-array-in' type='checkbox' checked><label for='section-b5eedf8f-503a-406a-8dc3-a588d385288b' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>223.7</span></div><div class='xr-array-data'><pre>array([[[[223.72537]]]], dtype=float32)</pre></div></div></li><li class='xr-section-item'><input id='section-b4d79f56-eef1-4748-a259-bd9c866bc408' class='xr-section-summary-in' type='checkbox' checked><label for='section-b4d79f56-eef1-4748-a259-bd9c866bc408' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>month</span></div><div class='xr-var-dims'>(month)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1</div><input id='attrs-0317cd86-8ad0-4902-97d3-f3e53143fdde' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-0317cd86-8ad0-4902-97d3-f3e53143fdde' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7bf75ce8-299b-42a5-a150-135b55faa948' class='xr-var-data-in' type='checkbox'><label for='data-7bf75ce8-299b-42a5-a150-135b55faa948' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>member_id</span></div><div class='xr-var-dims'>(member_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1</div><input id='attrs-6e1d3757-1824-466b-a0d7-17f13f8ede47' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-6e1d3757-1824-466b-a0d7-17f13f8ede47' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-fb5861fe-e5f0-428b-863e-127fd105840b' class='xr-var-data-in' type='checkbox'><label for='data-fb5861fe-e5f0-428b-863e-127fd105840b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlat</span></div><div class='xr-var-dims'>(nlat)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-53f14246-e244-41f2-a868-98e3fd1f92af' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-53f14246-e244-41f2-a868-98e3fd1f92af' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-846d07c1-18bd-4a6c-81c8-82a902e229b5' class='xr-var-data-in' type='checkbox'><label for='data-846d07c1-18bd-4a6c-81c8-82a902e229b5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlon</span></div><div class='xr-var-dims'>(nlon)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-adc5bc39-e191-4f2f-80ae-25e919f85412' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-adc5bc39-e191-4f2f-80ae-25e919f85412' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-07d6c00d-84aa-4ab5-8c98-c77f51a1f563' class='xr-var-data-in' type='checkbox'><label for='data-07d6c00d-84aa-4ab5-8c98-c77f51a1f563' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0afa78c5-6c27-4972-aa06-d53d1d00398e' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-0afa78c5-6c27-4972-aa06-d53d1d00398e' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray 'TEMP' (month: 1, member_id: 1, nlat: 1, nlon: 1)>\n",
"array([[[[223.72537]]]], dtype=float32)\n",
"Coordinates:\n",
" * month (month) int64 1\n",
" * member_id (member_id) int64 1\n",
" * nlat (nlat) int64 0\n",
" * nlon (nlon) int64 0"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def interp_mld_dsigma(rho_in, dsigma=0.03):\n",
" \"\"\"compute MLD at point using interpolation\"\"\"\n",
" \n",
" # TODO: this will probably fail if non_vertical_dims = []\n",
" # In that case, we might use `expand_dims` to add a dummy dimension\n",
" non_vertical_dims = [d for d in rho_in.dims if d not in ['z_t']] \n",
" rho_stack = rho_in.stack(non_vertical_dims=non_vertical_dims)\n",
" mld_stack = xr.full_like(rho_stack.isel(z_t=0, drop=True), fill_value=np.nan)\n",
" N = len(rho_stack.non_vertical_dims)\n",
" z_t = rho_in.z_t * 1e-2\n",
" \n",
" for i in range(N):\n",
" # if all NaN, skip this column\n",
" if rho_stack[:, i].isnull().all():\n",
" continue\n",
"\n",
" # if the whole column has density less than the threshold, set MLD to deepest point\n",
" if (rho_stack[:, i] < rho_stack[0, i] + dsigma).all():\n",
" k = np.where(~np.isnan(rho_stack[:, i]))[0]\n",
" mld_stack[i] = z_t[k[-1]]\n",
" \n",
" # linearly interpolate\n",
" else: \n",
" f = interpolate.interp1d(\n",
" rho_stack[:, i], z_t, \n",
" assume_sorted=False,\n",
" )\n",
" mld_stack[i] = f(rho_stack[0, i] + dsigma)\n",
"\n",
" return mld_stack.unstack().transpose(*non_vertical_dims)\n",
"\n",
"# simulate what happens in map_blocks\n",
"subset_to_singletons = dict(nlat=slice(0, 1), nlon=slice(0, 1), member_id=slice(0, 1), month=slice(0, 1))\n",
"\n",
"dsigma=0.5\n",
"temp_depth = interp_mld_dsigma(ds.TEMP.isel(subset_to_singletons).reset_coords(drop=True), dsigma=dsigma)\n",
"temp_depth"
]
},
{
"cell_type": "markdown",
"id": "joint-translator",
"metadata": {},
"source": [
"### Visualize the behavior of the code\n",
"\n",
"Here's a plot of the MLD diagnosed using `TEMP` by the linear interpolation method above."
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "behind-lending",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAGDCAYAAADDFBAFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAABTsklEQVR4nO3deXhURbr48e/bCQRIWBIIEBJI2AICghqEuIuA4jbuKypu48jo6IzjXHUWx5nfeEfvdZx70eu+IYPjwuioICriLqISVPYl7EvYA4SdkPf3x6nGpu10OqQ73Um/n+fpJ33qnDpdp/vk7eo6dapEVTHGGJNcfPEugDHGmPpnwd8YY5KQBX9jjElCFvyNMSYJWfA3xpgkZMHfGGOSkAV/Y4xJQrUO/iKyI+BRJSK7A5ZHish9IvKPavK2EZHHRWSdiOwSkdkicl3QNstFZL2IpAek3SgiHwcsi4jcKiKz3H7WicjHInJ5bY8nguP9SEQ2ish2EfleRM4LWHe2iHwuIltdGZ4WkZYB6y8VkWmujB+HfIFDXytbRF5y+ysXkfEB67JE5BUR2eQe40WklVt3UtDnskNEVEQucuuvFZEDQetPDdr3GyKyU0RWiMiVQeW6VETmi0iFiMwTkfMD1rURkbEissE97gvKuzzoHHk/YF2OiLwlImtdeQuC8s4NKnOliLwdyTG7bX7lPpdtIvKciKQFrLtVRGaIyF4ReSHEZ9FCRB5z7/U2Efk0gs+vS4jy7AxYPklEXhCRv9SwnxfcsXZyy78N2MeeoM9ybk3lqosQ7/EBEXkkYH2150aIfVX7notIgXu/Al/rDwHrfyMic9zrLBOR34TI/5F4/2sLRGRY0PpfuHzbXRlODFiXKyJvisgWEVktIjcH5T3XvfYO8f6f+wSs6yci77nzpGHdNKWqh/0AlgPDgtLuA/4RYtumwAzgHaAr0AQYAawH7gja52bgtwFpNwIfByw/ApQCw4HmQApwIvBCXY6nmmPsD6S654OBCiDHLV/pjqEFkAlMBp4IyDsMuBS4N7D8YV7rM+BhoLV7f44OWPcY8D7Qyq3/AHi4mv2c6sqZ7pavBT4P87r/BF4BMtz7uA3o69blAvuAMwEBzgZ2Ae3d+ueB19x7UAAsAa4Ld44ErOsA/Bw4DlCgIEwZBVgKXBPhMZ/hzq2+7rP5GHggYPsLgfOBx0OdN8A/gJeBbHd+FR3GuaNAj6C0F4C/hMmT7o5jM/CbEOvDfpaxfLiy7QBOjuTcCJG/2vfcnTuK+18Lkfc/gGOAVKAXsAK4PGD9l3j/O82Bi4CtQHbA/+1OoMiVczSwEUhx6z8C/gfvf24AsAUY4tb1BLbj/V+kAvfgxR5/TOgF3ACcB2g8PpfD/jzreDL86B+b6oP/DcAG/z9nQPpl7oRqFbDPu90H0MalHQz+QCFwABgYh5N/ELAHGBTm5J4dIv2QL69q8p7ujj2lmvWTgZ8HLN8CvFfNts8DzwcsVxsw3D/0PqAwIG0cLlC6f5wNQXk2Ase555uAYwPW/Rb4LNw5EqIMqdQc/E9x50l6NeuDj/kl4D8DlocC60Lk+ws/DkS93D98qzqeL4cT/K8BVgG3A3NCrK/2s4z1AxiF9wUskZwbYfYT6j0vIEzwD7GPMcAj7nkhsBdoGbD+M+Bm9/wy4Ougc16BHLwKj+K+KNz6p4Bx7vmtwKSAdT5gNzA0qDw9aGDBvz7b/IcDk1V1Z1D6v4BmeLU/vxl4NbU7Q+znNGCVqs6ozYuLyETxmlNCPSZGkHcP8JUrV3WvfTJwuD/Di4GFwFgR2Swi34jIKQHr/w84R0QyRSQTr3YzOURZWwAXA2ODVh3tfpouEpE/iEiqSy8EDqjqooBtv8erMYN3rPNF5CcikuJ+1u8FZgW+bNDzfkGvPV68prP3RWRA+LehWqOACSHOn+qOua87Dr/vgQ4i0jaC1xqMV7P8k3vPZgc2J8XYKLxfYi8DvUXkmMPZSZhzfauI3F2Hsr2oLtoR2blRWytc08vzItIu1AYiIsBJ/PC/1hdYqqoVAZsFnsOTgRQRGSwiKcD1wHfAOn44d6s7hyXEulDneIOTWvMmUdOOEEFTVStFZJNbH+he4AsR+d8Q+1kXmCAiq/G+wZsBvVR1RYjXOedwC66q54hIE7xmnN6qWhW8jYgMx/vnGHyYL5OHV/u/EbgOL7i/KSI9VHUTMBOv6Wyz234qXlNQsIvwauOfBKR9ineyrsD7h3gFqAT+ive+bQvaxzagJYCqHhCRF/Fq0s3wfiVcEhCE3wXuFpFReM041+M1AfmNdGUXvNrseyLSW1W3RvSucEhw/0k1m4Q65uDj8j9vyQ/vYXXy8N6vfwGd8Comk0RknqrOj7TctSUiXYAhwK9Vdb2ITMU7p2bWdl+q2iYGZTsF7xe8/zVqOjdqYxNwLF5QbotX2RmP13wX7D68Gvjzbrm6czjXPa/A+yw/xzsPtwJnui+xChH5AviDu47QB+982ujyTgEeEO8a2TTgLrz/w8BzvEGqz5r/JryfWYdwNdB2bv1BqjoHmIjXBBRoc/B+VDXP7SONQ7+lo0ZV96vqZOAMETkkCIlIMd4/wMVBNeja2A0sV9Vn3Wu9jPfz/wS3/jVgEV7waoXXth7qwnpw7QxVXaqqy1S1SlVnA3/GC6bgmtyC9tEK7x8Gd+Hsv/Da1JviBYBnROQot+1truyLgTfxaq2rA177C1Xdraq7VPWveP94J9XifQGvOW0Lhwb3sMcc4rj8zwNrh9XZDezHa57Zp6qf4LULn16rUtfe1cB8Vf3OLY8HrnQVj5gTkckBF1tHBq2+Bq+5aVnA9jWdGxFT1R2qOkNVK1V1PV5zy+niOjUEvOatrixnq+pelxz2HMarUF2PV/FpClwFTBR3QR2vgtIV7//tcbz3fbUr1wK88+tRoAwvzswj4BxvqOoz+H8AnCkBvXici/B+Kk4PkeePwE/54Rsc4EMgT0QG1ubFg07s4MePmk/CSAW6B+z3aOAt4HpVnVqbMgWZhdf2WJ0BwJOqulNVdwBPAGcFbiAinfH+EV+s4bWUH74kFwGpItIz6LX8P6mPAj51/5hVqvoNXvPXMABV3aKqI1W1o6r2xTunvo7wtSMVKrgDYY95rjuOwGNar6o11fqhbs0WdXEN0E28Hkrr8C5gtsO7oForYc71HSLy21B5VPVMVc1wj/FBq6/hx02JRxHm3Kgj/2d98FwRkevxKoNDVTUw+M7Fe99aBqQFnsMDgLdVdZEr57t4gfx4AFVdoarnqGq2qg7G++Vx8BxW1Qmq2k9V2+LFpHzgmygcY3zV5YIB1V/w9f8M9D/S3GMmXm+fArwr6/4eGb+pbp/A03i1/Y8D0h7jx719TqaGi4aHcXy98f7xmrvyXoX30/YYt76fK/9l1eRPccd/M17TSzOgSTXbZgHleIEuBa9mvgVo59Z/hNfLqbl7PAZ8EbSP3+L9Mwbv+0ygQ8AxzQH+GLD+ZbwaezreL43A3j6n4P0qO8otH+0+j9Pdcne8f5YU9zqbAvJ2cftr6o79N3g/p9sGvHYzfrgA1wtoFlT2PLwmqu7VvG/VHfMIvObBPni9fT7k0N4+qe61/4p3gbsZP/TgaOLOrz+47U7Aq0X2duuvxfuVVtP5U90F379y6P9HU7ympUrgSKBjwGM88K+A/NdSzxd88YLkTgIuqEZyboTYT7j3fLD7/H3ufHoF+Cgg70j3eR5Rzb6nAw+5fV7Aob19RuFVcrrhfZkMx+uV5P88j8D7Re3/VbCJQy8AF+Gd39muXC8FrBP3mn3c590MSKvPz+ewP9c6nhTLCR38Neix2q3LAp7EC5i78b6Zbwy3T6AzXg+bj4Pe8NuA2W4/ZXhNApcCviie9Efg1WQq3Mn0DXBBwPrngSq8n53+x9yA9deGeC9eCFi/AzgpYPkkd0w78K6PBK7rCrzt/rm24LW19wwq7wLghhDH8ZB7z3fi9db4MwFfQu5z+bdbvxK4Mij/rXjBsMLl/3XAukuBte6f6TvgjIB1ffFq0TtduacS1EsrxPujQevvIaD3UIhjC3nMbt0d7ri3u88qLWBdqPP0vqCyf+nKPi/oc/8DMD6C86e64B/8up/j/ZL7V4h9DML7ZZwVcE7Vd/B/Etf7JcS6cOfGb/E6edT4ngNXAMvc+12G90uuY0DeZXhNcYH/a4HdqgvwOmPsxus4ERhDBO+cX+nKOR+4OmD9L/EqJTvdZxF8jn7u8m1x70V60OsGH9PygPWTObTb+sH/ebz/9x31+VkGPvxdtowxERLvRrXbNYYXf42JNQv+xhiThGxsH2OMSUIW/I0xJglZ8DfGmCRkwd8YY5JQfQ7v0CC1a9dOCwoKatzuwNatpLRpE/PyJIryXfvIbNE03sUwjVhJSckmVc2OdzkaKwv+NSgoKGDGjJrHkNv4yKNk/+LWeihRYvj7lEX8anhhvIthGjER+dEYXSZ6rNnHGGOSkAV/Y4xJQhb8jTEmCVnwN8aYJGTB3xhjkpAFf2OMSUIW/I0xJgklXfAXkREislBESuswkbUxxjRoSRX8RSQFb2LoM/Fm3rlCRPrEt1TGGFP/kir4482KVKrehOb78KYvPC/OZTLGmHqXbME/F1gVsLyaQyeHPywlK8r5ZvkWSlaU13VXxhhTL5It+EuItB9NZSYiN4nIDBGZsXHjxrA7LFlRzhVPT2fakk2MfGa6fQEYYxqEZAv+q/EmhPfLw5t8/BCq+pSqDlTVgdnZ4QcV/GzRRvZVVqEK+yurmL50c3RLbIwxMZBswf8boKeIdBWRpsDlwFt12eFJhdmk+rwfFCk+H8Xd2ta9lMYYE2NJFfxVtRK4FXgPmA+8qqpz67LPovxMXrx+EE1TfOS0bsb0pZus6ccYk/CSbjx/VX0HeCea+zy+RzvW5bXm+S27eOi9RaQ1KWX8jcUU5WdG82WMMSZqkqrmH0tpqd5bqVjbvzEm8Vnwj5J2GWmA152oSaq1/RtjElvSNfvEyvY9+8EHQ3pnc8uQntbkY4xJaFbzj4KSFeV8umgTAF+UWnOPMSbxWfCPgulLN6Pq3StWecDa+40xic+CfxQUd2uLz/X1T02x9n5jTOKz4B8FRfmZDOqaBcCwIzrEuTTGGFMzC/5R0jTFeysnzymzMX6MMQnPgn+U7N5/AIAqG+PHGNMAWPCPkq7t0nHN/tbP3xiT8Cz4R0lO6+bcNaI3AIO7WuA3xiQ2C/5RdHSXNgB8smijtfsbYxKaBf8o+mb5D8He2v2NMYnMgn8UFXdre7DdP8Un1u5vjElYFvyjTMSL/j+aG9IYYxKIBf8oChzm4UCVWrOPMSZhWfCPouJubWnibvayZh9jTCKz4B9FRfmZvHDdsQAc0bFVnEtjjDHVs+AfZU1TUwCYtWabdfc0xiQsC/5RFtjOb909jTGJyoJ/lAV297RhHowxicqCf5QV5Wdyaq9sAH57Vm+bztEYk5As+EdZyYpyPlvsTel4/6QF1uZvjElIFvyjbPrSzRyo8vr677cpHY0xCcqCf5QVd2t7cGIXn1hff2NMYrLgH2VF+ZmM/2kxGWkp5LRuFu/iGGNMSBb8Y2TXvgOsKt9tff2NMQnJgn8MeGP8eM+tr78xJhFZ8I+BwDF+fDbGjzEmASVM8BeR50Rkg4jMCUjLEpEpIrLY/c0MWHePiJSKyEIROSMgvUhEZrt1Y8SNsSwiaSLyikv/SkQKYnUsRfmZvHjDsfgEemRnxOpljDHmsCVM8AdeAEYEpd0NTFXVnsBUt4yI9AEuB/q6PI+JSIrL8zhwE9DTPfz7vAEoV9UewN+BB2N2JECTlBQUmL+uwtr9jTEJJ2GCv6p+CmwJSj4PGOuejwXOD0h/WVX3quoyoBQYJCI5QCtV/VK9gfVfDMrj39cEYKj/V0EsTF+6+eCMLtbub4xJNAkT/KvRQVXLANzf9i49F1gVsN1ql5brngenH5JHVSuBbUDIxngRuUlEZojIjI0bNx5WwYu7taVpqvf2KpDZoulh7ccYY2Ih0YN/dULV2DVMerg8P05UfUpVB6rqwOzs7MMqYFF+Jn88pw8AVQp/njjXmn6MMQkj0YP/eteUg/u7waWvBjoHbJcHrHXpeSHSD8kjIqlAa37czBRV5bv3H3xuTT/GmESS6MH/LWCUez4KeDMg/XLXg6cr3oXdr13TUIWIFLv2/GuC8vj3dTHwofon3I2RwKYf6/JpjEkkCRP8ReSfwJdALxFZLSI3AA8Aw0VkMTDcLaOqc4FXgXnAu8AtqnrA7Wo08AzeReAlwGSX/izQVkRKgTtwPYdiqSg/k3/eOJjsjKa0b9WM6Us3W9OPMSYhpMa7AH6qekU1q4ZWs/39wP0h0mcA/UKk7wEuqUsZD0dRQRZn98/hhWkr+Nv7C2ma6mP8jcU2zr8xJq4SpubfmKWned+xVWpt/8aYxGDBvx6c1rsDKe6WgtQUm9rRGBN/FvzrQVF+Jn+7dAAAvTq0jHNpjDHGgn+96ZzVAp/ArDXbGPm0DfdgjIkvC/71JLCdf6+1+xtj4syCfz0JHu6hf17r+BbIGJPULPjXk6L8TMbfWMw1x+UD8NhHpdb0Y4yJGwv+9agoP5PzjsrFJ/Dl0i1caW3/xpg4seBfz4Lb/r9csimOpTHGJCsL/vXM3/bvH2J0W8Dgb8YYU18SZniHZOFv+5++dBNT5m1g7LQVAIzol2NDPhhj6o3V/OOgKD+TW4b05JZTe7DvQBVPf7bM+v4bY+qVBf84WrSh4mDzzx5r/zfG1CNr9omj4m5tSWviY+/+KhT4cslmRLxx/60JyBgTSxb84+iH9v/NfL54I18s2cy0JZtJa2LDPhtjYsuCf5wV5WdSlJ+JqvLl0i0osHe/N/yDBX9jTKxYm3+COK57O5oFDP+wfNMOYjzLpDEmiVnNP0EU5Wcy/qfFTFuyie9WbuW1kjVs211J/7zWHNe9nf0KMMZElQX/BBLYBPSrV77n39+t4f1562mWWsr4n9o1AGNM9FizTwISEXp2yDikG+hb362Ja5mMMY2LBf8E5e8G6nPfAOO/WsnzXyyz6wDGmKiwZp8EFdgNtE+nVoz7cgV/enseX5RuYmRxPvPWbrf7AYwxh82CfwLzXwMAOLUwm+e+WM5/vjOPD+ZvwCfQNNXuBzDGHB5r9mkgRIQbTuzKyMHeZDBVCnv2V/HhgvVxLpkxpiGy4N/AnHdULs0ChoQeO205r81YZdcCjDG1Ys0+DYz/foDpSzeT26Y546av4DcTZvHGt2u4cnAXVmzeZdcCjDE1suDfAAVeC/jJgE689PVK/nPSfKYt2YwAaak+uy/AGBOWNfs0cD6fcFVxPqNOKAC8oSH2VFbxj+krrCnIGFMtC/6NxLAjOtDM3RcgwBvfruGa576mdENFvItmjElACRP8RaSziHwkIvNFZK6I3O7Ss0Rkiogsdn8zA/LcIyKlIrJQRM4ISC8Skdlu3RgREZeeJiKvuPSvRKSg3g80Rvz3Bfz69F688rNi/nBOH75btZUR//MZf357ns0VbIw5RI3BX0QejCQtCiqBX6vqEUAxcIuI9AHuBqaqak9gqlvGrbsc6AuMAB4TkRS3r8eBm4Ce7jHCpd8AlKtqD+DvQCyOI2686SF7MKhrW244sSsf33kqlwzM4/lpyzjtoY95cPJ8Hv1wsU0XaYyJqOY/PETamdEuiKqWqepM97wCmA/kAucBY91mY4Hz3fPzgJdVda+qLgNKgUEikgO0UtUv1Wv0fjEoj39fE4Ch/l8FjVHbjDT+emF/3r71RLJbpvH4J0t56P1FXPGUzRdsTLKrNviLyGgRmQ30EpFZAY9lwKxYFso1xxwNfAV0UNUy8L4ggPZus1xgVUC21S4t1z0PTj8kj6pWAtuAtiFe/yYRmSEiMzZu3Bilo4qffrmtOXdAzsF7A/YdqOLO175n0Xq7HmBMsgpX838JOBd4y/31P4pU9apYFUhEMoB/Ab9U1e3hNg2RpmHSw+U5NEH1KVUdqKoDs7Ozaypyg1DcrR1pTXykCKT6hPXb9zDifz7lntdns6FiT7yLZ4ypZ9X281fVbXg14ytcW3oHt32GiGSo6spoF0ZEmuAF/vGq+rpLXi8iOapa5pp0Nrj01UDngOx5wFqXnhciPTDPahFJBVoDW6J9HIkocKC44m5t6dYunTEfLmbclyt487s13HxKdwbmZ/Ltqq12k5gxSaDGm7xE5FbgPmA9UOWSFegfzYK4tvdngfmq+nDAqreAUcAD7u+bAekvicjDQCe8C7tfq+oBEakQkWK8ZqNrgEeC9vUlcDHwoSZRZ/jAm8MA/nhuX645roD/encBD09ZBHg/jWwCeWMav0gu+P4S6KWqfVX1SPeIauB3TgCuBk4Tke/c4yy8oD9cRBbjXXx+AEBV5wKvAvOAd4FbVPWA29do4Bm8i8BLgMku/VmgrYiUAnfgeg4ls67t0nn8qiKuHNQFcDeJ7a/iuc+XcqAqab4XjUk6kQzvsAqv+SemVPVzQrfJAwytJs/9wP0h0mcA/UKk7wEuqUMxG62LivJ4/dvV7KusQhUmzV7HwvWfcsfwQkb07YjP12g7RRmTlCIJ/kuBj0VkErDXnxjUNGMauMBrAoO7ZrGhYi8PT1nEz8fPpG+nVvz69EKG9GpPI+4Za0xSiST4r3SPpu5hGqngawJn9O3Im9+t4X8+WMz1L8zg6C5tOG9AJ3buO0DZtt1xLKkxpq5qDP6q+qf6KIhJPCk+4cJj8jh3QCcmlKzmofcWct/b8wDwCVw2sDNFBVlxLqUx5nBIdZ1dROR/VPWXIvI2ofvC/yTWhUsEImJXPY2JjxJVHRjvQjRW4Wr+49zfh+qjIImqqKiIGTNm1LjdxkceJfsXt9ZDieKnZEU5I5+Zzv7KKhTIbdOcVeW76dS6Gdef2JXLB3UhI82miDDRYdeXYivcTV4l7u8nItIUKHSrFqqqDRGZhAIvCq/YvJMHL+rPxws38sQnS/jLpPmMmbqYq4rzufaEAtq3bBbv4hpjwojkJq9T8QZDW47XFbOziIxS1U9jWjKTkPwXhf8+ZREiwpDe7RnSuz3friznqU+X8vgnS3jms2VceEwuPz25G1t37T94V7HdNGZM4ojkN/rfgNNVdSGAiBQC/wSKYlkw07Ac3SWTx68qYtmmnTzz2VJeK1nNy9+swn97QNNUu2vYmEQSyR2+TfyBH0BVFwFNYlck05B1bZfO/RccybS7T+O4bllUKVSpd9fw36cssi6ixiSISIL/DBF5VkROdY+ngZJYF8w0bO0y0rjzjN40S/WmlvQJfF66iRMe+JDrX/iG9+euY/+Bqpp3ZIyJiUiafUYDtwC34bX5fwo8FstCmcahKD+T8T/9YSTRdhlNeXXGKl6bsZqbFmwgu2UaFxflcenAznRtlx7v4hqTVCK5yWuviDyKN4ViFV5vn30xL5lpFILvGv7NGb351bBCPl64kZe/WeVdJP54CcXdsrj82C6M6NeRZk1SwuzRGBMNkfT2ORt4Am90TAG6isjPVHVy+JzGhJaa4mNYnw4M69OB9dv3MKFkNa98s4pfvvIdrd5M5YKjc+mf14Z12/dYLyFjYiTS3j5DVLUUQES6A5P4YZhkYw5bh1bNuGVID0af0p3pyzbzyjerGP/1SsZ+uQLwZh175IqjOfPInDiX1JjGJZLgv8Ef+J2l/DCbljFR4fMJx3dvx/Hd29ElqwWPfliKApVVyujxMxmQ15pz+nfirP455LZpHu/iGtPgRdLbZ66IvCMi14rIKOBt4BsRuVBELoxx+UwSOrVX+4PzDael+ri6OJ8qhfvfmc8JD3zIBY99wTOfLWXtVus2aszhiqTm3wxvCsdT3PJGIAtvMncFXq8mnzGHJXi+YX+b/4rNO5k4q4xJs8r4y6T5/GXSfAbmZ3J2/xzOOjKHDq1sSAljIhVJb5/rItmRiGyvaROgTFULa9jOmB/1EgLIb5vOLUN6cMuQHizduIN3ZpcxcVYZf3p7Hn+eOI9jC7I4p38OI/p1tLGFjKlBtcFfRB4hxFDOfqp6W1DSElU9OtyLici3tSueMaF1y87g1tN6cutpPSndUMGkWeuYNHst9745lz++NZfBXbM4p38nOrVpxvyyCus1ZEyQcDV//zjGJwB9gFfc8iWEvsP3ogheL5JtjKmVHu1bcvuwltw+rCeL1lcwcVYZE2et5ff/nnNwmyYpwlPXDGRIr/ZxLKkxiaPaC76qOlZVxwI98bp6PqKqj+BNpn5UiO2XAohIuoj43PNCEfmJiDQJ3MaYWCns0JI7hhcy9Y5TuPb4Avwjwu8/oFz/wjdc/exXvPLNSrbusvsUTXKLpLdPJ6BlwHKGS6vOp0AzEcnFuyv4OuCFwy2gMYdDRDh3QKeDvYaapvq44KhcVmzexV3/ms3Av3zAtc9/zWszVrFtt01PYZJPJL19HgC+FZGP3PIpwH1hthdV3SUiNwCPqOp/WVu/iYdQvYZUlTlrtjNx9lomzSrjNxNm8ds3ZnNyz2zO7p/D8D4daNnMBq01jV8kvX2eF5HJwGCXdLeqrguTRUTkOGAkcEOkr2NMLAT3GhIRjsxrzZF5rbl7RG++X72NSbO8L4KpCzbQNNXHKYXZnNM/h6FHdLBpKU2jFa63T29VXSAix7ikVe5vJxHppKozq8l6O3AP8IaqzhWRbsBH1WxrTNyICEd1bsNRndtwz5lH8O2qrUyaVcY7s8uYMm89aak+hvRqz9n9cxh6RHtaNLUvAtN4hDub7wBuwhvbJ5gCpwUnikgKcK6q/uTght5F3uBuocYkFJ9PDv5K+P3ZR1CyspxJs8qYNLuMd+euo1kTH0N7d+Ds/jm0ad6Eb1dtte6jpkELN4H7Te7vkEh3pqoHRMSmdzQNms8nHFuQxbEFWfzhnD58s3wLk2aVMXmO92Xgl5bq46Wf2tSUpmGKZEjnFOBsoCBwe1V9uJos34rIW8BrwM6A7W0YCNPgpPiE4m5tKe7Wlvt+0pffvj6LV2asBmBvZRX/MWEW91/Qj8FdsxCRGvZmTOKIpBHzbWAPMBtvMpeaZAGbObRZyMYAMg1eik+49NguvPn9WvZXViEibNi+m8ufmk6/3FbceGI3zu6fQ5OUSHpQGxNfkQT/PFXtH+kOIx0LKJiINMO7RyDNlWuCqv5RRLLw7i4uAJYDl6pquctzD16PogPAbar6nksvwru3oDnwDnC7qqqIpAEvAkV4X1CXqerywymvSU7B3Uf75LTijW/X8OznS/nlK9/xwOQFjDq+gCsHdaF1C+syahJXJFWUySJyeqQ7dHf1ThWROW65v4j8PoKse4HTVHUA3h3EI0SkGLgbmKqqPfFuGrvb7bcPcDnQFxgBPOaaqAAex7tY3dM9Rrj0G4ByVe0B/B14MNLjMsavKD+TW4b0oCg/k+ZNU7hycBem/OoUnr/2WLq3T+fBdxdQ/Nep/PHNOSzftLPmHRoTB5EE/+nAGyKyW0S2i0hFDSN4Po3X1XM/gKrOwgvSYalnh1ts4h4KnAeMdeljgfPd8/OAl1V1r6ouA0qBQSKSA7RS1S9VVfFq+oF5/PuaAAwVa6g1UeDzCUN6t2f8jcW8c9tJnHVkDi99vZIhf/uYm16cwVdLN+OdjsYkhkincTwOmK2Rnb0tVPXroJhaGUlhXM29BOgB/J+qfiUiHVS1DEBVy0TEPzJXLt4Xk99ql7bfPQ9O9+dZ5fZVKSLbgLbApqBy3IT3y4EuXbpEUnRjDurTqRV/u3QAd43oxYtfrmD8Vyt4f956jsxtzY0ndSWndTO+WV5uXUVNXEUS/BcDcyIM/ACb3Dy/CiAiFwNl4bN4VPUAcJSItMH7tdEvzOahauwaJj1cnuByPAU8BTBw4ECrrpnD0r5VM+48oxe3DOnB69+u5tnPl3H7y98B3omY1sTH+Butq6iJj0iCfxnwsRviYa8/MUxXz1vwAmdvEVkDLMMb6iFiqrpVRD7Ga6tfLyI5rtafww/zB68GOgdkywPWuvS8EOmBeVaLSCrQGthSm7IZU1vNm6YwcnA+Vxzbhd9M+J5/zVyDAnv2V/Hmt2ss+Ju4iKTNfxnehdameKN7+h/VUVUdBmQDvVX1xEheR0SyXY0fEWkODAMWAG8Bo9xmo4A33fO3gMtFJE1EuuJd2P3aNRFViEixa8+/JiiPf18XAx/W4heNMXXi8wlXDs6nWRMfPvcbdNz0Ffx18nz27D8Q38KZpBPJwG5/quU+/wUco6qB3Rwm4HWvDCcHGOva/X3Aq6o6UUS+BF51o4SuxJtMBjdu0KvAPLxrCre4ZiOA0fzQ1XOyewA8C4wTkVK8Gn+NF6KNiabArqJH5rZm8pwynvxkKe/PXc8DFx7J4G5t411EkySiNlKViPTG63bZWkQuDFjVCm8S+LBcr6AfTQOpqpvxJpAJled+4P4Q6TOAH10vUNU9uC8PY+IlcKTRkwuzObd/J+5+fTaXPTWdq4q7cNeI3jastIm5aA5T2As4B2gDnBuQXgH8NIqvY0yjcnyPdrz7y5N4+P1FPPfFMj6cv4H7LziSIb1tykkTO1EL/qr6JvCmiBynql9Ga7/GJIMWTVP5/Tl9OLt/Dv8xYRbXvfANFxydyx/O6UNWetN4F880QpFciM0TkTdEZKOIrBeRf4lIXpgsmw/zDl9jkt7RXTKZeNuJ3D60J29/v5bhD3/C29+vtRvETNRF0tvnebxeMjl4N0m97dKqc1h3+BpjPGmpKfxqeCETbzuR3Mzm/OKf33LJE1/y4LsLKFlRHu/imUYikuCfrarPq2qle7yA142zOi1U9eugtIju8DXG/KB3x1a8Pvp4Rh2Xz4wV5Tz+8RKufHq6fQGYqIgk+G8SkatEJMU9rsIbETPc9od1h68x5lCpKT7at2p28L6AvZVVTJ2/Pr6FMo1CJMH/euBSYB1eEL8YCDds8y3Ak/xwh+8v8frdG2MOQ3G3tjRN/eHGsEmzyti6a198C2UavEh6+3QOnJMXQEROwLvh6kfcnL3DRCQd8KlqRd2LaUzyCrwxrHkTHw9MXsi1z3/DP24cTEaaTSpvDk8kZ84jwDERpAHghmi4Bjfto390T1W1SdyNOUyBN4blZbZg9PiZ/HTsDJ6/7liaNUmpIbcxP1Zt8BeR44DjgWwRuSNgVSsg3Nn2Dt5Qy5FO+2iMqYXT+3bkb5cM4FevfsfPx8/kiauKaJpqU0ea2glX828KZLhtAgdy247X7l+dZqp6R5j1xpg6Ov/oXHbuq+R3b8zhV69+x5jLjybFZ/MSmchVG/xV9RPgExF5QVVX1GKf40Tkp8BEDh0C2oZONiaKRg7OZ+feSv7znQWkN03hgQv747MvABOhSEb1rE3gB9gH/DfwO36YKEWBbrXcjzGmBjed3J0deyoZ82EpO/ZW0rdTK4q7tbM5AkyNYtFV4A6gh6puqnFLY0yd/Wp4IUs37mTi7DImz15HWpNSmyHM1CgWV4nmArtisF9jTAgiwhGdvMtyCuyrrGL60nD3YRoTQc1fRAqBx4EOqtpPRPoDP1HVv1ST5QDwnYh8xKFt/tbV05gYKe7WjrTUUvZWVqEKRflt4l0kk+AiqfnXdqC2f+NNsDINKAl4GGNipCg/k5d+WsyFR+eiwEcLN8a7SCbBRdLm30JVv/bfrOVUO1Cbqo6tc6mMMbXmvxEsrYmPpz5dymm92tu0kKZakQ7sVuNAbW4+XURktojMCn5EtdTGmGr9/uw+5Ge14I5Xv2f7nv3xLo5JUJHU/G8BnuKHgdqWAVeF2O529/ecKJXNGHMY0tNSefiyo7j48Wnc99ZcHr70qHgXySSgGmv+qrpUVYfhjeHfW1VPVNXlIbbz/xr4uaquCHwAP49qqY0xYR3TJZNbh/Tg9ZlreGe2jahufiySaRz/U0TaqOpOVa0QkUwRqa6nD8DwEGlnHn4RjTGH4xdDezIgrzW/fWM267fviXdxTIKJpM3/TFXd6l9Q1XLgrOCNRGS0iMwGegW19y8DrM3fmHrWJMXHw5cdxZ79B/jZuBL+76PFNguYOSiSNv8UEUlT1b0AItIcSAux3UvAZOCvwN0B6RU2ro8x8dE9O4Orjyvg6U+X8v2qrXb3rzkokpr/P4CpInKDiFwPTAF+1J1TVbep6nJVvQJYjXdfgAIZItIlmoU2xkSuTXOvjqfAfrv71ziRDOz2X645ZyggwP9T1feq215EbgXuA9bzw3j+CvSvc2mNMbVW3K0dTVNL2VdZBSIUW99/Q4QDu6nqZLwmnUj8Euilqla9MCYBFOVn8s+fFnPvm3NYuL6CDq1CtdqaZBNJb59iEflGRHaIyD4ROSAi28NkWQVsi14RjTF1VZSfyTOjBpIiwkPvLYx3cUwCiKTm/yjeWD6vAQPx5uftEWb7pcDHIjKJQwd2e7gO5TTG1FFO6+bccGJXHvt4CTec2I0j81rHu0gmjiIa0llVS4EUVT2gqs8DQ8JsvhLvonBTvOkf/Y8aiUiKiHwrIhPdcpaITBGRxe5vZsC294hIqYgsFJEzAtKL3BATpSIyRtygRCKSJiKvuPSvRKQgkjIZ05jcfGp3stKb8p/vzEdVa85gGq1Iav67RKQp3jDN/4U3rk96dRur6p8ARCRdVXfWsjy3A/PxJokHr8voVFV9QETudst3iUgfvF8jfYFOwAciUqiqB/CGn74JbxL5d4AReNcrbgDKVbWHiFwOPAhcVsvyGdOgtWrWhNuH9uSPb83lo4UbOK13h3gXycRJJDX/q912twI7gc7ARdVtLCLHicg8vCCOiAwQkcdqehERyQPOBp4JSD6PH7qVjgXOD0h/WVX3quoyoBQYJCI5QCtV/VK9as2LQXn8+5oADPX/KjAmmVw5uAtd26Xz13cWUHmgquYMplGqNviLyFT39OequkdVt6vqn1T1DtcMVJ3/Ac4ANgOo6vfAyRGU5X+A/+CH7qHgTSBT5vZTBrR36bl4F5b9Vru0XPc8OP2QPKpaiXdROmSfNxG5SURmiMiMjRttXHTTuDRJ8XHXiN4s3rCDV2esrjmDaZTC1fxzROQU4CcicrSIHBP4CLdTVV0VlHQg3PYicg6wQVUjnfQlVI1dw6SHy/PjRNWnVHWgqg7Mzs6OsEjGNBxn9O3AwPxMHp6yiJ17q52ewzRi4dr878VrY88D/sahwVOB06rJt0pEjgfUXSu4DdcEFMYJeF8yZwHNgFYi8g9gvYjkqGqZa9LZ4LZfjdf85JcHrHXpeSHSA/OsFpFUoDVgw06YpCQi/PbsI7jwsWn89MUZ/Pr0XjbkQ5KptuavqhPwBnD7b1U9TVWHBDyqC/wAN+PNAeBvgjnKLVdLVe9R1TxVLcC7kPuhql4FvAWMcpuNAt50z98CLnc9eLoCPYGvXdNQhbs3QfC6pQbm8e/rYvca1t3BJC1V8AlMW7KZK5+eboO+JZmwvX1UVUXkPODPke5QVTcBI+taMOcB4FURuQGvC+kl7jXmupnD5uFNKXmL6+kDMBp4AWiO18vHf2fys8A4ESnFq/GHm4fYmEYvcIyffW7MH6v9J49IunpOF5FjVfWbSHYoImOB2/3DQLu++X9T1esjya+qHwMfu+eb8cYUCrXd/XgTxQenzwD6hUjfg/vyMMZAcbe2NE31sWd/FQoU5beJd5FMPYqkq+cQ4EsRWeLG559dw5y8/UOM/390HctpjImyovxMxt9YzKUDvctkKzfvjnOJTH2KpOZf21m4fCKS6YI+IpIV4esYY+pZUX4mx3Rpw5w123nqs6VcXJSHz2e3vySDSGr+Ws2jOn8DponI/xORPwPTgP+qa0GNMbEhItx0cjdKN+zgk0V2X0uyiCT4TwImur9T8QZuq3Z4Z1V9Ee8O4PXARuBCVR1X96IaY2Ll7P455LRuxlOfLo13UUw9iWQylyMDl90NXj+rIc88vJ44xpgGoEmKj+tP6Mr978xn9uptNuJnEohoVM9AqjoTODY4XURm1pQ3km2MMfFx+aDOtExL5enPrPafDGqs+YvIHQGLPqAIrzkn2BE19AISvLtqjTEJqGWzJlwxuAvPfr6M/xjRi7zMFvEukomhSHrhBI7FX4nX/v+vENv1jmBfYcf4McbE17XHF/Dc58t4/ovl/OGcPvEujomhSNr8/+R/LiI+IMPdMBW83Yool80YU886tWnOuQM68fLXK7ltaE9aN28S7yKZGIlkDt+XRKSViKTjXcRdKCK/iX3RjDHxcONJXdm57wC3/fNbG++nEYvkgm8fVd2ONynKO0AXvAlejDGN0J79VfgEPlm0kZHP2IBvjVUkwb+JiDTBC/5vqup+qrnJy83B+0EUy2eMqWfTl27GP96tf8A30/hEEvyfBJbjzdv7qYjkA9tDbehG1twlItarx5gGqrhbW5qkeqEhxScUdws54Z1p4CK54DsGGONfFpGVeIO9VWcPMFtEpuDN+evfz211KKcxpp4U5WfyjxsGceXTXzG8Twcb5rmRqvWAa24ClHDzvk1yD2NMAzWoa1uK8jNZU24jfTZWUR9tU1XHikhzoIuqLoz2/o0x9eOY/Eye/nQpe/YfoFmTlHgXx0RZrYd3qImInAt8B7zrlo8Skbei/TrGmNg6pksmlVXK7DXb4l0UEwORDO+QApwNFARur6oPV5PlPmAQP8zG9Z2bZ9cY04Ac3aUNADNXlHNsQVZ8C2OiLpJmn7dxF3GBqgi2r1TVbd786QfZROnGNDDtMtLIb9uCmSutn39jFEnwz1PV/rXY5xwRuRJIEZGewG14E7oYYxqYY7pk8nnpJlSVoAqdaeAiafOfLCKn12KfvwD6AnuBl4BtwC9rXzRjTLwd3aUNGyv2stp6/TQ6kdT8pwNvuEHd9uMNzayq2qqa7bup6u+A30WpjMaYODmmi9fHf+bKcjpn2RDPjUkkNf+/AccBLVS1laq2DBP4AZ4Qka9F5Oci0iYqpTTGxEXvji1p3iSFb1dujXdRTJRFEvwXA3PczV01UtUTgauAzsAMNyro8DqU0RgTJ6kpPvrnteZbu+jb6ETS7FMGfCwik/Ha8YGwXT1R1UUi8ntgBt7QEEeLd7Xot6r6eh3LbIypR53aNOfN79bw5ZJNHNe9XbyLY6Ikkpr/MmAq0BRvVi//IyQR6S8ifwfmA6cB56rqEe753+tcYmNMvSlZUc7EWWupUhj13Dc2vHMjEvFMXiLS0lvUHTVkeRR4Gq+Wf7CLgKqudb8GjDENxPSlmzlQ5bX47j/gDe9sA701DpHc4dsPGAdkueVNwDWqOjfU9qp6cnX7UtVxh1lOY0wcFHdrS9NUnzfBiw3v3KhE0uzzFHCHquaraj7wa7yafUgi0lNEJojIPBFZ6n9Eq8DGmPpTlJ/J+BuL6dSmGYXtM6zW34hEEvzTVfUj/4Kqfow3sUt1ngcexxv2eQjwIt4vhxqJyHIRmS0i34nIDJeWJSJTRGSx+5sZsP09IlIqIgtF5IyA9CK3n1IRGeMuNiMiaSLyikv/SkQKIimXMcmsKD+TU3u1Z83W3UTY6c80AJEE/6Ui8gcRKXCP3+NdBK5Oc1WdCoiqrlDV+/Au9kZqiKoepaoD3fLdwFRV7Yl34fluABHpA1yOdzfxCOAxNwgdeF8+NwE93WOES78BKFfVHngXnx+sRbmMSVq9O7Zk+55K1m/fW/PGpkGIJPhfD2QDr7tHO+C6MNvvcXcDLxaRW0XkAqB9Hcp4HjDWPR+LN5ewP/1lVd2rqsuAUmCQiOQArVT1S3dvwotBefz7mgAM9f8qMMZUr7CD18FvwbqQM7iaBijsBV9Xk35NVYfVYp+/BFrgDej2//Bq/aMizKvA+yKiwJOq+hTQQVXLAFS1TET8XyS5eENP+K12afvd8+B0f55Vbl+VIrINaAtsCiyEiNyE98uBLl26RFh0Yxqv3h294L9wXQWn9qpLXc4kirDBX1UPiMguEWmtqhHN6KCq37inOwj/CyGUE1yX0PbAFBFZEGbbUDV2DZMeLs+hCd6XzlMAAwcOtEZOk/TatGhKh1ZpLFxfEe+imCiJ5A7fiCZkF5G3CTNuv6r+pKYXUtW17u8GEXkDb1KY9SKS42r9OcAGt/lqvCEk/PKAtS49L0R6YJ7VIpIKtAa21FQuYwz06tiKhess+DcWkQT/SCdkf6guBRGRdMCnqhXu+enAn4G38JqNHnB/33RZ3gJeEpGHgU54F3a/dr9WKkSkGPgKuAZ4JCDPKOBL4GLgw0jHLDIm2fXu2JIXpm2m8kAVqSlRnwHW1LNqg7+ITFXVoUAfVb2rph2p6id1LEsHvKGj/eV6SVXfFZFvgFdF5AZgJXCJe725IvIqMA+vW+ktqnrA7Ws08ALQHJjsHgDPAuNEpBSvxn95HctsTNIo7NCSfZVVLN+8ix7tM+JdHFNH4Wr+OSJyCvATEXmZoPZyVZ0ZzYKo6lJgQIj0zcDQavLcD9wfIn0G0C9E+h7cl4cxpnb8F30Xra+w4N8IhAv+9+L1qc8DgkfwVGrXd98Y08D1aJ+BT2DBugrOOjIn3sUxdVRtw52qTlDVM4H/UtUhQY8fBX4RGef+3h7D8hpj4qRZkxQK2qWz0Pr6Nwo1XrVR1f8X4b6KRCQfuF5EMt2wDAcfdSumMSYR9O7YkkXraxrY1zQEkfT2idQTwLtAN6CEQ68RqEs3xjRgGWmpLNu0k2mlmzi+h03s0pBFrb+Wqo5xk7Y8p6rdVLVrwMMCvzENXMmKct74dg0A175gE7s0dBHV/N0wDx0Ct1fVlaG2VdXRIjIAOMklfaqqs+paUGNMfNnELo1LjTV/EfkFsB6Ywg83fE0Ms/1twHi8wdzaA+PdPowxDZh/YheAFLGJXRq6SGr+twO9XH/7SNwIDFbVnQAi8iDeHbWPhM1ljElo/oldbnpxBt2y063W38BF0ua/CohoUDdHgAMBywcIPaCaMaaBKcrPZHC3LDbt2Bfvopg6Cje8wx3u6VLgYxGZBBycyUFVg2/88nse+MoNzAbeWPrP1r2oxphE0CM7g3fnrGNv5QHSUlNqzmASUrhmn5bu70r3aOoeEH70zodF5GPgRLwa/3Wq+m3di2qMSQTd22dQpbB80y56dWxZcwaTkKoN/qr6JwARuURVXwtcJyJhx8dx4/5EdewfY0xi8I/rs3hDhQX/BiySNv97IkwzxiSB7tkZiEDpBrvTtyEL1+Z/JnAWkCsiYwJWtcIbQtkYk4SaNUmhc2YLFlvwb9DCtfmvBWYAP8EbrsGvAvhVLAtljElsPdpnsMSCf4MWrs3/e+B7EXkJ78Jtb7wLvQtV1fp5GZPEerbP4PPSTTarVwMWyac2HFgCjAEeBUpdk5AxJkl1b5/BvsoqVpXvjndRzGGK5A7fh4EhqloKICLd8YZ4mBw2lzGm0fL3+CndsIOu7dLjXBpzOCKp+W/wB35nKbAhRuUxxjQAgd09TcMUSc1/roi8A7yK1+Z/CfCNiFwIoKqvx7B8xpgE1KpZEzq0SrPung1YJMG/Gd6onqe45Y1AFnAu3peBBX9jklCP9hkW/BuwGoO/ql5XHwUxxjQsPdu35LUZq1BVRGzsxoYmkvH8C0VkqojMccv9ReT3sS+aMSaRdW+fwc59B3jw3QU2q1cDFMkF36fxhnPYD+Bm5bo8loUyxiS+Kjer11OfLmXkM9PtC6CBiST4t1DVr4PSbHgHY5Lchoo9AFQp7K/0pnU0DUckwX+T69uvACJyMVAW01IZYxLeab3aA97t/01SfTatYwMTSW+fW4CngN4isgZYBlwV01IZYxJeUUEWvTu2pGLPfsZccYxN69jARNLbZykwTETSAZ+q2l0dxhgAju7ShnfnrLPA3wBFMo1jcDoQdhpHY0yS6J6dQfmu/WzesZe2GWnxLo6phXBt/i3dYyAwGsh1j5uBPrEojIi0EZEJIrJAROaLyHEikiUiU0RksfubGbD9PSJSKiILReSMgPQiEZnt1o0R940lImki8opL/0pECmJxHMYki54dvJm8bGz/hqfa4K+qf3JTObYDjlHVX6vqr4EiIC9G5flf4F1V7Q0MAOYDdwNTVbUnMNUtIyJ98Lqc9gVGAI+JiH826ceBm4Ce7jHCpd8AlKtqD+DvwIMxOg5jkkLgAG+mYYmkt08XIHD8/n1AQbQLIiKtgJOBZwFUdZ+qbgXOA8a6zcYC57vn5wEvq+peVV0GlAKDRCQHaKWqX6qqAi8G5fHvawIw1P+rwBhTe51aN6NF0xQL/g1QJL19xgFfi8gbeN09L+CHABpN3fDGDXpeRAbgzR52O9BBVcsAVLVMRNq77XOB6QH5V7u0/e55cLo/zyq3r0oR2Qa0BTYFFkREbsL75UCXLl2idXzGNDoiYmP8NFA11vxV9X7gOqAc2Apcp6p/jUFZUoFjgMdV9WhgJ66JpxqhauwaJj1cnkMTVJ9S1YGqOjA7Ozt8qY1Jcj2yLfg3RBHNv6aqM1X1f93j2xiVZTWwWlW/cssT8L4M1rumHNzfDQHbdw7In4c37/BqDr0m4U8/JI+IpAKtgS1RPxJjkkj39hms276Hij37410UUwsJM/mmqq4DVolIL5c0FJgHvAWMcmmjgDfd87eAy10Pnq54F3a/dk1EFSJS7NrzrwnK49/XxcCH7rqAMeYw9bSLvg1SJG3+9ekXwHgRaYo3Y9h1eF9Qr4rIDcBKvMlkUNW5IvIq3hdEJXCLqh5w+xkNvAA0x5tu0j/l5LPAOBEpxavx2wB1xtRRYI+fo7vYzV4NRUIFf1X9Du++gmBDq9n+fuD+EOkzgH4h0vfgvjyMMdHRJasFTVN8lG60mn9DkjDNPsaYhik1xUfXdumUrrfg35BY8DfG1FmP9hlW829gLPgbY+qsR/sMVm3ZxZ79B2re2CQEC/7GmDrr0T6DKoWlG3fGuygmQhb8jTF1drDHjzX9NBgW/I0xdda1XTo+sb7+DYkFf2NMnTVrkkKXrBYsseDfYFjwN8ZERbuMNL5atpmSFeXxLoqJgAV/Y0ydlawo59tVW9m0Yx8jn5luXwANgAV/Y0ydTV+6maoqb5isfZVVTF+6Oc4lMjWx4G+MqbPibm1pkuqFkxSfUNytbZxLZGpiwd8YU2dF+Zk8c403LNflx3ahKN8GeEt0FvyNMVFxcmE22S3T2Ftpd/k2BBb8jTFR0z07nSV2l2+DYMHfGBM13d2UjjZHUuKz4G+MiZru2Rls272fzTv3xbsopgYW/I0xUdPdjfFjd/omvoSaycsY07B1z04HYMnGnQyOcnfPkpKS9qmpqc/gzdJnFdeaVQFzKisrbywqKtoQvNKCvzEmajq1bk6zJj6WxGB0z9TU1Gc6dux4RHZ2drnP57OLCjWoqqqSjRs39lm3bt0zwE+C19u3pzEmanw+oVu7jJgEf6Bfdnb2dgv8kfH5fJqdnb2NEPOZgwV/Y0yUdW8fs+Dvs8BfO+79ChnnLfgbY6Kqe3Y6q8t325SOITz33HOZ3bp16zt48ODCTz/9tMW1117bGWDMmDFtr7nmmi71WRZr8zfGRFX37AxUYdmmnRyR0yrexal3lZWVpKaGDq3PP/98u//93/9dee6551YAnHzyybvqtXABrOZvjImq7tmuu2cCTOn4eemm9AffXdDx89JN6dHY38KFC5t27dq174UXXlhQWFjYZ8SIEd0qKip8ubm5R9555505RUVFvZ577rnMJ598MquwsLBPz549+44ePToX4M4778wpKSnJ+MUvfpH/s5/9LG/ixIkthwwZ0iP4NdauXZt6xhlndO/Xr98R/fr1O+L999+PStmDWc3fGBNVXdulIwJLNsRumIffTPi+86J1FS3CbbNzb6VvyaadLVThiU+W0L1d+q70tNSq6rYv7Nhy139fPGBVTa+9fPnyZk8++eTy008/fecll1xS8N///d/ZAM2aNasqKSlZuHz58ibHHXdc75KSkvnZ2dmVJ510UuG4cePaPPTQQ2Wffvppq4ceemjVySefvGvixIktQ+3/Zz/7Wec77rhj/RlnnLFj8eLFTc8444yeS5cunVtTuWrLgr8xJqqaN00ht03zuNf8d+ytTPWPMqHqLaenpdb51uOOHTvuO/3003cCXH311ZvHjBnTHuCaa64pB/j888/Ti4uLKzp16lQJcNlll2355JNPMq6++uqtkez/iy++aLV48eLmB49jx46U8vJyX2ZmZrVfXIfDgr8xJuq6Z8esxw8AkdTQPy/dlH79C98UVh6o8qWm+KoeuvSopSf2aFfnnyMiEnK5ZcuWVUCdxzVSVWbMmDE/IyMjpj2brM3fGBN1PdpnsHTjzoOze8XDiT3a7Xzu2mMX/eyU7mueu/bYRdEI/ABlZWVNP/jgg3SAl156Kev4448/5Fvu5JNP3vnVV1+1LCsrS62srOS1117LOvXUUyP+JjzxxBO3P/jgg+39y9OmTWsebvvDZcHfGBN13bMz2L3/AGXb98S1HCf2aLfzrhG910Ur8AN069Ztz3PPPde2sLCwT3l5eeqdd965MXB9fn7+/nvvvXfNKaecUnjEEUf07d+//66rrrpqa6T7f+qpp1bNnDkzvbCwsE/37t37Pvroo9nRKnughGn2EZFewCsBSd2Ae4EXXXoBsBy4VFXLXZ57gBuAA8BtqvqeSy8CXgCaA+8At6uqikia218RsBm4TFWXx/jQjEk6B8f42bCD3DYxqbjGjc/n46WXXloZmLZmzZrZgcs333zzlptvvnlLcN6vv/56of/5OeecU3HOOedUANx2222b8WISOTk5lZMmTVoak8IHSJiav6ouVNWjVPUovOC8C3gDuBuYqqo9galuGRHpA1wO9AVGAI+JSIrb3ePATUBP9xjh0m8AylW1B/B34MF6ODRjko5/dM9SG90zYSVM8A8yFFiiqiuA84CxLn0scL57fh7wsqruVdVlQCkwSERygFaq+qV6V15eDMrj39cEYKgEX70xxtRZ2/SmtG7eJO49fqKtV69e+xYvXhz1bpfxkKjB/3Lgn+55B1UtA3B//RdCcoHAK/6rXVquex6cfkgeVa0EtgE/GndWRG4SkRkiMmPjxo3Bq40xNRARN6Vj4wr+jUnCBX8RaYo3/OhrNW0aIk3DpIfLc2iC6lOqOlBVB2Znx+RaizGNXpvmTZi9ehslK8rjXRQTQsIFf+BMYKaqrnfL611TDu6vf1KC1UDngHx5wFqXnhci/ZA8IpIKtAZ+dFHGGFM3JSvK+XTxJnbuO8CVT0+3L4AElIjB/wp+aPIBeAsY5Z6PAt4MSL9cRNJEpCvehd2vXdNQhYgUu/b8a4Ly+Pd1MfCh2kzTxkTd9KWbOeD6+O8/UMX0pZvjXCITLKGCv4i0AIYDrwckPwAMF5HFbt0DAKo6F3gVmAe8C9yiqv4xZEcDz+BdBF4CTHbpzwJtRaQUuAPXc8gYE13F3drSNNULLyk+oTjKUzo2VOeee27XwsLCPn/605/a17x1bCVMP38AVd1F0AVYVd2M1/sn1Pb3A/eHSJ9BiNlrVHUPcElUCmuMqVZRfiYvXHcsVzz9FRccnUtRfma8ixRX+/fvp6ysLLWkpCRj7dq1s2vOEXsJVfM3xjQex3VvR26b5uytjOp4ZHG1fft236mnntqjV69efXr27Nn36aefzszNzT2yrKwsFeDTTz9tMWjQoF4Ad9xxR6crrrgi/4QTTuh54YUXdh02bFjhli1bmvTu3bvPu+++m/G3v/2tXb9+/Y7o1atXnzPOOKN7RUWFD2DVqlWpw4cP796rV68+vXr16jNlypR0gMceeyzryCOPPKJ37959rrzyyvzKyso6HYsFf2NMzHRtl87yTbEb2rm+vf766606duy4f+HChfMWL14898ILL9webvtZs2a1eO+990rffvvtZW+//XZp586d9y5YsGDeiBEjdowcObJ8zpw58xcuXDivV69eu8eMGdMO4Oabb+5y0kknVSxcuHDe3Llz5x1zzDF7Zs6c2WzChAlZM2bMWLBgwYJ5Pp9Pn3jiiTq1pSVUs48xpnEpaNeCt75bi6r+aDTMutoyblzb/avXpEVrf03ycvdmXX112CvTxxxzzO7f/e53nUePHp173nnnbRsxYkTYGxlGjBixtbrROUtKSprfe++9uRUVFSk7d+5MOeWUU7YBTJs2reWECROWAaSmptK2bdsDTz75ZNacOXNaDBgw4AiAPXv2+Nq3b1+nqr8Ff2NMzBS0TWf7nkrKd+0nK71pVPddU6COhf79+++dOXPmvH/961+tf/e73+V+8MEH21NSUrSqymva2r179yGtKenp6dW2ed10001dJ0yYUHrcccftHjNmTNtPPvkk5OQuAKoql1xyyeb/+7//WxOtY7FmH2NMzHRt5w3wtqyRNP0sX768ScuWLat+/vOfb/nlL3+5/rvvvmuRl5e374svvmgB8Oqrr0Z8ZXvXrl2+Ll267N+7d6+8/PLLWf70E044ocI/O1hlZSVbtmzxjRgxYvvEiRMz16xZkwqwfv36lEWLFtXp29Rq/saYmClwwX/5pp2NosdPSUlJ83vuuSfP5/ORmpqqjz322Ipdu3b5br755oIHH3xwf1FRUcTfcnfffffaQYMGHZGbm7vviCOO2LVjx44UgMcff3zltddem19YWNjO5/Px6KOPrhg2bNjO3//+92uGDh1aWFVVRZMmTXTMmDErCwsLD3tmMrF7nMIbOHCgzpgxo8btNj7yKNm/uLUeSpQY/j5lEb8aXhjvYpgEt6+yit5/mMzPT+3BnWf0qlVeESlR1YH+5e+//375gAEDNkW9kI3c999/327AgAEFwenW7GOMiZmmqT46Z7Vg2ebG0ezTmFjwN8bEVEHbxtXds7Gw4G+MiSl/X39rYk4sFvyNMTFV0LYFO/cdYOOOvfEuiglgwd8YE1M/9PjZFeeSmEAW/I0xMdWtnTefr7X7JxYL/saYmOrUphlNUoSljSD433XXXR179OjRt7CwsE/v3r37fPjhh+mR5h03blybkpKSZnV5/cBB5ALdcccdne69994OtdmX3eRljImp1BSvu2dDr/l/8MEH6e+9916b2bNnz2vevLmWlZWl7t27N+IBi/7973+3qays3FZUVLQnluWMlNX8jTEx17VtOssbeF//NWvWNMnKyqps3ry5AuTk5FQWFBTsD94u1FDNU6ZMSf/ggw/a/P73v8/r3bt3n7lz5x4yIN1FF11UMHLkyC6D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\n",
"text/plain": [
"<Figure size 288x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(4, 6))\n",
"\n",
"ds.TEMP.isel(subset_to_singletons).T.plot(y='z_t', marker='.', label='profile')\n",
"\n",
"plt.axvline(ds.TEMP.isel(subset_to_singletons).isel(z_t=0), \n",
" linewidth=0.5, c='tab:red', label='surface')\n",
"\n",
"plt.axvline(ds.TEMP.isel(subset_to_singletons).isel(z_t=0)+dsigma, \n",
" linewidth=0.5, c='tab:blue', label='S at mld')\n",
"\n",
"plt.axhline(temp_depth*1e2, linewidth=1., c='k', label='MLD')\n",
"\n",
"plt.legend(loc=(1.02, 0));\n",
"ylm = plt.ylim()\n",
"plt.ylim(ylm[::-1]);"
]
},
{
"cell_type": "markdown",
"id": "silver-bacteria",
"metadata": {},
"source": [
"## Whole workflow \n",
"\n",
"Now let's put everything together, call the `mld_dsigma` routine on our single point."
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "acute-pharmacology",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 23.4 ms, sys: 1.03 ms, total: 24.4 ms\n",
"Wall time: 26.2 ms\n"
]
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2 {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray &#x27;density&#x27; (month: 1, member_id: 1, nlat: 1, nlon: 1)&gt;\n",
"array([[[[9.49623843]]]])\n",
"Coordinates:\n",
" * member_id (member_id) int64 1\n",
" * month (month) int64 1\n",
" * nlat (nlat) int64 0\n",
" * nlon (nlon) int64 0\n",
"Attributes:\n",
" units: kg/m^3\n",
" long_name: Density</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'density'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>month</span>: 1</li><li><span class='xr-has-index'>member_id</span>: 1</li><li><span class='xr-has-index'>nlat</span>: 1</li><li><span class='xr-has-index'>nlon</span>: 1</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-e6f3b851-c2ea-4276-94dc-e016bef4f6a4' class='xr-array-in' type='checkbox' checked><label for='section-e6f3b851-c2ea-4276-94dc-e016bef4f6a4' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>9.496</span></div><div class='xr-array-data'><pre>array([[[[9.49623843]]]])</pre></div></div></li><li class='xr-section-item'><input id='section-e47f63e6-1703-431c-8b43-b07688abda04' class='xr-section-summary-in' type='checkbox' checked><label for='section-e47f63e6-1703-431c-8b43-b07688abda04' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>member_id</span></div><div class='xr-var-dims'>(member_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1</div><input id='attrs-568b0b9d-5f62-44b3-880a-d4a688396750' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-568b0b9d-5f62-44b3-880a-d4a688396750' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8664e47b-d7f8-4b16-91da-758153d9943b' class='xr-var-data-in' type='checkbox'><label for='data-8664e47b-d7f8-4b16-91da-758153d9943b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>month</span></div><div class='xr-var-dims'>(month)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1</div><input id='attrs-cfd5923b-cbf1-4aa1-8351-e2bd1a8aa644' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-cfd5923b-cbf1-4aa1-8351-e2bd1a8aa644' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4e42524e-f776-4b6e-bd45-281a4bae6f09' class='xr-var-data-in' type='checkbox'><label for='data-4e42524e-f776-4b6e-bd45-281a4bae6f09' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlat</span></div><div class='xr-var-dims'>(nlat)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-e4a09be2-05a2-4948-9a1f-d00f0b15d5f3' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e4a09be2-05a2-4948-9a1f-d00f0b15d5f3' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e56b0787-a0a3-47f6-88b3-e1b6cef9ea29' class='xr-var-data-in' type='checkbox'><label for='data-e56b0787-a0a3-47f6-88b3-e1b6cef9ea29' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlon</span></div><div class='xr-var-dims'>(nlon)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-bb719c79-5a89-43b2-ae09-7dbad4eae1ec' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-bb719c79-5a89-43b2-ae09-7dbad4eae1ec' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-309f6702-c96f-46fd-b313-fec3411852d5' class='xr-var-data-in' type='checkbox'><label for='data-309f6702-c96f-46fd-b313-fec3411852d5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ef9b915c-8710-4c80-a594-46cf7440b2d9' class='xr-section-summary-in' type='checkbox' checked><label for='section-ef9b915c-8710-4c80-a594-46cf7440b2d9' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>kg/m^3</dd><dt><span>long_name :</span></dt><dd>Density</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray 'density' (month: 1, member_id: 1, nlat: 1, nlon: 1)>\n",
"array([[[[9.49623843]]]])\n",
"Coordinates:\n",
" * member_id (member_id) int64 1\n",
" * month (month) int64 1\n",
" * nlat (nlat) int64 0\n",
" * nlon (nlon) int64 0\n",
"Attributes:\n",
" units: kg/m^3\n",
" long_name: Density"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"mld_dsigma(ds.SALT.isel(subset_to_singletons), ds.TEMP.isel(subset_to_singletons)).compute()"
]
},
{
"cell_type": "markdown",
"id": "super-sequence",
"metadata": {},
"source": [
"And now on the \"full\" dataset."
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "formal-cherry",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 715 ms, sys: 0 ns, total: 715 ms\n",
"Wall time: 716 ms\n"
]
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2 {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray &#x27;density&#x27; (month: 12, member_id: 2, nlat: 3, nlon: 4)&gt;\n",
"array([[[[ 9.49623843, 9.42082407, nan, nan],\n",
" [ 8.26857565, 8.26893112, 8.24535414, 8.34914866],\n",
" [ 8.34846922, 8.31014324, 8.27159869, 8.29390142]],\n",
"\n",
" [[ 10.29269213, 10.18202932, nan, nan],\n",
" [ 9.06993741, 9.09982068, 9.1400155 , 9.31211524],\n",
" [ 8.63295011, 8.61650867, 8.64577135, 8.69570444]]],\n",
"\n",
"\n",
" [[[ 6.19467661, 6.20350444, nan, nan],\n",
" [ 6.18363831, 6.21523449, 6.26147219, 6.32057261],\n",
" [ 6.24571458, 6.27171221, 6.31632635, 6.38342811]],\n",
"\n",
" [[ 6.06197895, 6.06248599, nan, nan],\n",
" [ 6.03184481, 6.07590121, 6.13816916, 6.20054301],\n",
" [ 6.00641544, 6.02630957, 6.05831297, 6.10851719]]],\n",
"\n",
"\n",
" [[[ 6.49470798, 6.50145084, nan, nan],\n",
" [ 7.34204429, 7.51712861, 7.97580661, 8.42271319],\n",
"...\n",
" [160.76546338, 159.4336392 , 159.84973315, 162.43553991],\n",
" [143.4679867 , 144.01558208, 148.56692945, 156.45364621]]],\n",
"\n",
"\n",
" [[[168.7760371 , 171.35814063, nan, nan],\n",
" [184.7415625 , 184.65446694, 186.16870599, 189.2002252 ],\n",
" [168.68939954, 172.17055794, 177.92610634, 184.95142623]],\n",
"\n",
" [[143.92068638, 148.59562425, nan, nan],\n",
" [140.05857526, 135.66440508, 135.03501564, 139.77684601],\n",
" [120.80979342, 121.99707253, 128.62077395, 138.84719327]]],\n",
"\n",
"\n",
" [[[152.96607938, 155.13798958, nan, nan],\n",
" [127.35900639, 125.0774896 , 124.38560447, 129.25668738],\n",
" [ 98.07145095, 101.40046618, 107.68495092, 115.85115192]],\n",
"\n",
" [[104.84163106, 107.2606265 , nan, nan],\n",
" [ 80.65422141, 80.59990223, 81.55229885, 86.16904571],\n",
" [ 74.83123367, 77.33930887, 83.23741642, 91.53464446]]]])\n",
"Coordinates:\n",
" * member_id (member_id) int64 1 2\n",
" * month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12\n",
" * nlat (nlat) int64 0 1 2\n",
" * nlon (nlon) int64 0 1 2 3\n",
"Attributes:\n",
" units: kg/m^3\n",
" long_name: Density</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'density'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>month</span>: 12</li><li><span class='xr-has-index'>member_id</span>: 2</li><li><span class='xr-has-index'>nlat</span>: 3</li><li><span class='xr-has-index'>nlon</span>: 4</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-83c63b18-ee88-4d6e-8239-dbbe8366f5e6' class='xr-array-in' type='checkbox' checked><label for='section-83c63b18-ee88-4d6e-8239-dbbe8366f5e6' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>9.496 9.421 nan nan 8.269 8.269 ... 86.17 74.83 77.34 83.24 91.53</span></div><div class='xr-array-data'><pre>array([[[[ 9.49623843, 9.42082407, nan, nan],\n",
" [ 8.26857565, 8.26893112, 8.24535414, 8.34914866],\n",
" [ 8.34846922, 8.31014324, 8.27159869, 8.29390142]],\n",
"\n",
" [[ 10.29269213, 10.18202932, nan, nan],\n",
" [ 9.06993741, 9.09982068, 9.1400155 , 9.31211524],\n",
" [ 8.63295011, 8.61650867, 8.64577135, 8.69570444]]],\n",
"\n",
"\n",
" [[[ 6.19467661, 6.20350444, nan, nan],\n",
" [ 6.18363831, 6.21523449, 6.26147219, 6.32057261],\n",
" [ 6.24571458, 6.27171221, 6.31632635, 6.38342811]],\n",
"\n",
" [[ 6.06197895, 6.06248599, nan, nan],\n",
" [ 6.03184481, 6.07590121, 6.13816916, 6.20054301],\n",
" [ 6.00641544, 6.02630957, 6.05831297, 6.10851719]]],\n",
"\n",
"\n",
" [[[ 6.49470798, 6.50145084, nan, nan],\n",
" [ 7.34204429, 7.51712861, 7.97580661, 8.42271319],\n",
"...\n",
" [160.76546338, 159.4336392 , 159.84973315, 162.43553991],\n",
" [143.4679867 , 144.01558208, 148.56692945, 156.45364621]]],\n",
"\n",
"\n",
" [[[168.7760371 , 171.35814063, nan, nan],\n",
" [184.7415625 , 184.65446694, 186.16870599, 189.2002252 ],\n",
" [168.68939954, 172.17055794, 177.92610634, 184.95142623]],\n",
"\n",
" [[143.92068638, 148.59562425, nan, nan],\n",
" [140.05857526, 135.66440508, 135.03501564, 139.77684601],\n",
" [120.80979342, 121.99707253, 128.62077395, 138.84719327]]],\n",
"\n",
"\n",
" [[[152.96607938, 155.13798958, nan, nan],\n",
" [127.35900639, 125.0774896 , 124.38560447, 129.25668738],\n",
" [ 98.07145095, 101.40046618, 107.68495092, 115.85115192]],\n",
"\n",
" [[104.84163106, 107.2606265 , nan, nan],\n",
" [ 80.65422141, 80.59990223, 81.55229885, 86.16904571],\n",
" [ 74.83123367, 77.33930887, 83.23741642, 91.53464446]]]])</pre></div></div></li><li class='xr-section-item'><input id='section-f301e3b7-8f04-4519-95e7-802e5e47e50c' class='xr-section-summary-in' type='checkbox' checked><label for='section-f301e3b7-8f04-4519-95e7-802e5e47e50c' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>member_id</span></div><div class='xr-var-dims'>(member_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2</div><input id='attrs-19d032b6-0e40-4a9b-9964-622efef1a814' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-19d032b6-0e40-4a9b-9964-622efef1a814' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2fb20473-4a2f-4d8d-8b87-41697593a17f' class='xr-var-data-in' type='checkbox'><label for='data-2fb20473-4a2f-4d8d-8b87-41697593a17f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1, 2])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>month</span></div><div class='xr-var-dims'>(month)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 8 9 10 11 12</div><input id='attrs-666fa131-d7ad-415d-972e-d2b83d4a5f5a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-666fa131-d7ad-415d-972e-d2b83d4a5f5a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7edaf59c-5c7c-4c5a-9294-256696294eb3' class='xr-var-data-in' type='checkbox'><label for='data-7edaf59c-5c7c-4c5a-9294-256696294eb3' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlat</span></div><div class='xr-var-dims'>(nlat)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2</div><input id='attrs-4302c7d6-2a16-4178-8515-7ddb6881a053' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4302c7d6-2a16-4178-8515-7ddb6881a053' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-faf0c38f-7aa5-4489-95cd-8ef6b7161fab' class='xr-var-data-in' type='checkbox'><label for='data-faf0c38f-7aa5-4489-95cd-8ef6b7161fab' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nlon</span></div><div class='xr-var-dims'>(nlon)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3</div><input id='attrs-f224b6e0-7b78-40ad-846a-8c6502b5b3d6' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f224b6e0-7b78-40ad-846a-8c6502b5b3d6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8fa89d62-6a26-4cf1-b86c-1b11eb4f418f' class='xr-var-data-in' type='checkbox'><label for='data-8fa89d62-6a26-4cf1-b86c-1b11eb4f418f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-7da13f35-1bc6-48c0-905b-d8ff6a623b34' class='xr-section-summary-in' type='checkbox' checked><label for='section-7da13f35-1bc6-48c0-905b-d8ff6a623b34' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>kg/m^3</dd><dt><span>long_name :</span></dt><dd>Density</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray 'density' (month: 12, member_id: 2, nlat: 3, nlon: 4)>\n",
"array([[[[ 9.49623843, 9.42082407, nan, nan],\n",
" [ 8.26857565, 8.26893112, 8.24535414, 8.34914866],\n",
" [ 8.34846922, 8.31014324, 8.27159869, 8.29390142]],\n",
"\n",
" [[ 10.29269213, 10.18202932, nan, nan],\n",
" [ 9.06993741, 9.09982068, 9.1400155 , 9.31211524],\n",
" [ 8.63295011, 8.61650867, 8.64577135, 8.69570444]]],\n",
"\n",
"\n",
" [[[ 6.19467661, 6.20350444, nan, nan],\n",
" [ 6.18363831, 6.21523449, 6.26147219, 6.32057261],\n",
" [ 6.24571458, 6.27171221, 6.31632635, 6.38342811]],\n",
"\n",
" [[ 6.06197895, 6.06248599, nan, nan],\n",
" [ 6.03184481, 6.07590121, 6.13816916, 6.20054301],\n",
" [ 6.00641544, 6.02630957, 6.05831297, 6.10851719]]],\n",
"\n",
"\n",
" [[[ 6.49470798, 6.50145084, nan, nan],\n",
" [ 7.34204429, 7.51712861, 7.97580661, 8.42271319],\n",
"...\n",
" [160.76546338, 159.4336392 , 159.84973315, 162.43553991],\n",
" [143.4679867 , 144.01558208, 148.56692945, 156.45364621]]],\n",
"\n",
"\n",
" [[[168.7760371 , 171.35814063, nan, nan],\n",
" [184.7415625 , 184.65446694, 186.16870599, 189.2002252 ],\n",
" [168.68939954, 172.17055794, 177.92610634, 184.95142623]],\n",
"\n",
" [[143.92068638, 148.59562425, nan, nan],\n",
" [140.05857526, 135.66440508, 135.03501564, 139.77684601],\n",
" [120.80979342, 121.99707253, 128.62077395, 138.84719327]]],\n",
"\n",
"\n",
" [[[152.96607938, 155.13798958, nan, nan],\n",
" [127.35900639, 125.0774896 , 124.38560447, 129.25668738],\n",
" [ 98.07145095, 101.40046618, 107.68495092, 115.85115192]],\n",
"\n",
" [[104.84163106, 107.2606265 , nan, nan],\n",
" [ 80.65422141, 80.59990223, 81.55229885, 86.16904571],\n",
" [ 74.83123367, 77.33930887, 83.23741642, 91.53464446]]]])\n",
"Coordinates:\n",
" * member_id (member_id) int64 1 2\n",
" * month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12\n",
" * nlat (nlat) int64 0 1 2\n",
" * nlon (nlon) int64 0 1 2 3\n",
"Attributes:\n",
" units: kg/m^3\n",
" long_name: Density"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"mld = mld_dsigma(ds.SALT, ds.TEMP).compute()\n",
"mld"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "dramatic-playback",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x2ae36e0e86d0>"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"mld.isel(month=0, member_id=0).plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "connected-magnitude",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "documentary-indonesian",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:miniconda3-cesm2-marbl]",
"language": "python",
"name": "conda-env-miniconda3-cesm2-marbl-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.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment