Skip to content

Instantly share code, notes, and snippets.

@jbusecke
Created February 16, 2022 17:30
Show Gist options
  • Save jbusecke/41ef62adf9995114b346b263be2ea4e4 to your computer and use it in GitHub Desktop.
Save jbusecke/41ef62adf9995114b346b263be2ea4e4 to your computer and use it in GitHub Desktop.
Playing around with grid_ufuncs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "41137c79",
"metadata": {},
"source": [
"# How to use custom grid ufuncs"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3c33d1fe",
"metadata": {},
"outputs": [],
"source": [
"# I still cant believe the pangeo notebook env does not have frigging pytest installed\n",
"!mamba install pytest -y\n",
"!pip install -e /home/jovyan/xgcm/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "d1aaf15b",
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "c5e2be58",
"metadata": {},
"outputs": [],
"source": [
"from xgcm import Grid\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "304d924e",
"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: (xu: 4, yt: 5, time: 10, xt: 4, yu: 5)\n",
"Coordinates: (12/25)\n",
" * xu (xu) float64 0.5 1.5 2.5 3.5\n",
" * yt (yt) int64 0 1 2 3 4\n",
" * time (time) int64 0 1 2 3 4 5 6 7 8 9\n",
" zt int64 0\n",
" * xt (xt) int64 0 1 2 3\n",
" * yu (yu) float64 0.5 1.5 2.5 3.5 4.5\n",
" ... ...\n",
" dz_w_e (xu, yt, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
" area_ne (xu, yu) float64 dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;\n",
" area_n (xt, yu) float64 dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;\n",
" area_e (xu, yt) float64 dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;\n",
" area_t (xt, yt) float64 dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;\n",
" volume_t (xt, yt, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
"Data variables:\n",
" u (xu, yt, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
" v (xt, yu, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
" wt (xt, yt, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
" tracer (xt, yt, time) float64 dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;\n",
" timeseries (time) float64 dask.array&lt;chunksize=(1,), meta=np.ndarray&gt;</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-2193c49a-b9ef-4743-9f20-ca165bfdc914' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-2193c49a-b9ef-4743-9f20-ca165bfdc914' 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'>xu</span>: 4</li><li><span class='xr-has-index'>yt</span>: 5</li><li><span class='xr-has-index'>time</span>: 10</li><li><span class='xr-has-index'>xt</span>: 4</li><li><span class='xr-has-index'>yu</span>: 5</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-215af622-3223-40a1-a0d7-60861e86e742' class='xr-section-summary-in' type='checkbox' ><label for='section-215af622-3223-40a1-a0d7-60861e86e742' class='xr-section-summary' >Coordinates: <span>(25)</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'>xu</span></div><div class='xr-var-dims'>(xu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.5 1.5 2.5 3.5</div><input id='attrs-635324c7-95d2-4f9a-abee-75983c4de7ed' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-635324c7-95d2-4f9a-abee-75983c4de7ed' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a0302939-610e-40d9-914e-360eb5620c66' class='xr-var-data-in' type='checkbox'><label for='data-a0302939-610e-40d9-914e-360eb5620c66' 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>axis :</span></dt><dd>X</dd><dt><span>c_grid_axis_shift :</span></dt><dd>0.5</dd></dl></div><div class='xr-var-data'><pre>array([0.5, 1.5, 2.5, 3.5])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>yt</span></div><div class='xr-var-dims'>(yt)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4</div><input id='attrs-a32ead8c-069e-491e-a802-3aa20f37bfd1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a32ead8c-069e-491e-a802-3aa20f37bfd1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-485405b9-6ed4-4127-aa0d-567d06efe88e' class='xr-var-data-in' type='checkbox'><label for='data-485405b9-6ed4-4127-aa0d-567d06efe88e' 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>axis :</span></dt><dd>Y</dd></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-ac07b42a-e0f7-4390-b80a-6ea5ef0b4237' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ac07b42a-e0f7-4390-b80a-6ea5ef0b4237' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-674b825b-ca7c-420e-9853-59b869259c39' class='xr-var-data-in' type='checkbox'><label for='data-674b825b-ca7c-420e-9853-59b869259c39' 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>axis :</span></dt><dd>T</dd></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>zt</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-551106cc-6ceb-48e3-860a-a1ecc3009369' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-551106cc-6ceb-48e3-860a-a1ecc3009369' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-07d16039-589c-4c47-870d-620261b8f9a6' class='xr-var-data-in' type='checkbox'><label for='data-07d16039-589c-4c47-870d-620261b8f9a6' 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>axis :</span></dt><dd>Z</dd></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'>xt</span></div><div class='xr-var-dims'>(xt)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3</div><input id='attrs-53c22703-0b95-4659-8c7b-074f25c31822' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-53c22703-0b95-4659-8c7b-074f25c31822' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bad94f16-5a89-4c8e-97f1-8d453d013f80' class='xr-var-data-in' type='checkbox'><label for='data-bad94f16-5a89-4c8e-97f1-8d453d013f80' 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>axis :</span></dt><dd>X</dd></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>yu</span></div><div class='xr-var-dims'>(yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.5 1.5 2.5 3.5 4.5</div><input id='attrs-1dd98960-88a1-441d-a7fa-02e45168049c' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1dd98960-88a1-441d-a7fa-02e45168049c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4c14a430-009c-4931-b7c7-bfa6a0a1a125' class='xr-var-data-in' type='checkbox'><label for='data-4c14a430-009c-4931-b7c7-bfa6a0a1a125' 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>axis :</span></dt><dd>Y</dd><dt><span>c_grid_axis_shift :</span></dt><dd>0.5</dd></dl></div><div class='xr-var-data'><pre>array([0.5, 1.5, 2.5, 3.5, 4.5])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>zw</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.5</div><input id='attrs-31ea69b1-e3ee-4579-ba2a-f4ea23504db9' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-31ea69b1-e3ee-4579-ba2a-f4ea23504db9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-befe0ca5-5f11-44fe-bc4c-30ed7f636a13' class='xr-var-data-in' type='checkbox'><label for='data-befe0ca5-5f11-44fe-bc4c-30ed7f636a13' 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>axis :</span></dt><dd>Z</dd><dt><span>c_grid_axis_shift :</span></dt><dd>0.5</dd></dl></div><div class='xr-var-data'><pre>array(0.5)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dx_ne</span></div><div class='xr-var-dims'>(xu, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-e0402bc2-e2ce-4214-912a-b99fe04556a1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e0402bc2-e2ce-4214-912a-b99fe04556a1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b35f84b5-3088-443e-98e4-22781dd781da' class='xr-var-data-in' type='checkbox'><label for='data-b35f84b5-3088-443e-98e4-22781dd781da' 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>tracked_name :</span></dt><dd>dx_ne</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dx_n</span></div><div class='xr-var-dims'>(xt, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-7c31fd45-6aee-4e14-903c-484401d93f9f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7c31fd45-6aee-4e14-903c-484401d93f9f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-933ba81f-8800-483a-9c70-a6cf05d7e983' class='xr-var-data-in' type='checkbox'><label for='data-933ba81f-8800-483a-9c70-a6cf05d7e983' 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>tracked_name :</span></dt><dd>dx_n</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dx_e</span></div><div class='xr-var-dims'>(xu, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-9227ff5c-b9e4-4a24-8102-b7c8b41ee055' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-9227ff5c-b9e4-4a24-8102-b7c8b41ee055' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bbff6cdb-47db-4847-82ed-179afe23d8bb' class='xr-var-data-in' type='checkbox'><label for='data-bbff6cdb-47db-4847-82ed-179afe23d8bb' 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>tracked_name :</span></dt><dd>dx_e</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dx_t</span></div><div class='xr-var-dims'>(xt, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-678b3949-9502-4676-a189-e7b289ec1ac3' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-678b3949-9502-4676-a189-e7b289ec1ac3' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a2ac604b-81ae-4dec-abed-ebb7daa20beb' class='xr-var-data-in' type='checkbox'><label for='data-a2ac604b-81ae-4dec-abed-ebb7daa20beb' 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>tracked_name :</span></dt><dd>dx_t</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dy_ne</span></div><div class='xr-var-dims'>(xu, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-b67e6f15-6baa-4469-86af-ce586d0d39f0' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b67e6f15-6baa-4469-86af-ce586d0d39f0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-285c6b01-a1b0-42aa-a22d-74524af4a7c5' class='xr-var-data-in' type='checkbox'><label for='data-285c6b01-a1b0-42aa-a22d-74524af4a7c5' 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>tracked_name :</span></dt><dd>dy_ne</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dy_n</span></div><div class='xr-var-dims'>(xt, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-e58d0788-6eb5-4987-996e-0a2c9391c115' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e58d0788-6eb5-4987-996e-0a2c9391c115' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-242564b5-4844-44a2-91ca-a05a121510e7' class='xr-var-data-in' type='checkbox'><label for='data-242564b5-4844-44a2-91ca-a05a121510e7' 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>tracked_name :</span></dt><dd>dy_n</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dy_e</span></div><div class='xr-var-dims'>(xu, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-50b23c26-65fc-4b32-ae04-ec7a433fb650' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-50b23c26-65fc-4b32-ae04-ec7a433fb650' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4afed94c-e912-4495-a22a-bd5b8bcf1c78' class='xr-var-data-in' type='checkbox'><label for='data-4afed94c-e912-4495-a22a-bd5b8bcf1c78' 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>tracked_name :</span></dt><dd>dy_e</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dy_t</span></div><div class='xr-var-dims'>(xt, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-84bd4d28-1d3e-44e2-9d3e-73b3f8bb3205' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-84bd4d28-1d3e-44e2-9d3e-73b3f8bb3205' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-72a852bc-bdf7-439e-a6d9-20810be3cc75' class='xr-var-data-in' type='checkbox'><label for='data-72a852bc-bdf7-439e-a6d9-20810be3cc75' 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>tracked_name :</span></dt><dd>dy_t</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dz_t</span></div><div class='xr-var-dims'>(xt, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-d78d9c56-b341-4678-bc45-54e1eeadd393' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d78d9c56-b341-4678-bc45-54e1eeadd393' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1b6710d6-32f2-4d4d-9828-974f7a42481a' class='xr-var-data-in' type='checkbox'><label for='data-1b6710d6-32f2-4d4d-9828-974f7a42481a' 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>tracked_name :</span></dt><dd>dz_t</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dz_w</span></div><div class='xr-var-dims'>(xt, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-aced4489-3e94-421d-91f7-135e00d8582e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-aced4489-3e94-421d-91f7-135e00d8582e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-14037197-939e-4eaa-bc23-a71928f0514b' class='xr-var-data-in' type='checkbox'><label for='data-14037197-939e-4eaa-bc23-a71928f0514b' 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>tracked_name :</span></dt><dd>dz_w</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dz_w_ne</span></div><div class='xr-var-dims'>(xu, yu, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-e1d80a22-b1f8-4f0b-b6ff-a28a5379416f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e1d80a22-b1f8-4f0b-b6ff-a28a5379416f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f0756c09-d29c-4144-a040-5e86fe17d18e' class='xr-var-data-in' type='checkbox'><label for='data-f0756c09-d29c-4144-a040-5e86fe17d18e' 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>tracked_name :</span></dt><dd>dz_w_ne</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dz_w_n</span></div><div class='xr-var-dims'>(xt, yu, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-e1dae187-1677-4940-b09b-eb1ca53acb4a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e1dae187-1677-4940-b09b-eb1ca53acb4a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-05ad0f43-be7c-4636-8eb9-482ffc92668b' class='xr-var-data-in' type='checkbox'><label for='data-05ad0f43-be7c-4636-8eb9-482ffc92668b' 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>tracked_name :</span></dt><dd>dz_w_n</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dz_w_e</span></div><div class='xr-var-dims'>(xu, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-81a0df85-e60a-431d-b306-114b0057f893' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-81a0df85-e60a-431d-b306-114b0057f893' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3933f0e0-833d-410d-95ee-96c32b45b6e7' class='xr-var-data-in' type='checkbox'><label for='data-3933f0e0-833d-410d-95ee-96c32b45b6e7' 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>tracked_name :</span></dt><dd>dz_w_e</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>area_ne</span></div><div class='xr-var-dims'>(xu, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-db63ce21-bd85-4282-bd6b-b4b5267de20f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-db63ce21-bd85-4282-bd6b-b4b5267de20f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0eacc169-64d1-411b-bdd2-1fb5464ec4c3' class='xr-var-data-in' type='checkbox'><label for='data-0eacc169-64d1-411b-bdd2-1fb5464ec4c3' 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>tracked_name :</span></dt><dd>area_ne</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>area_n</span></div><div class='xr-var-dims'>(xt, yu)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-a5d88bb3-b47a-4e4c-a0d7-cd2a4f7de842' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a5d88bb3-b47a-4e4c-a0d7-cd2a4f7de842' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8cc78877-c835-4fcd-bdb5-9c21b7b89482' class='xr-var-data-in' type='checkbox'><label for='data-8cc78877-c835-4fcd-bdb5-9c21b7b89482' 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>tracked_name :</span></dt><dd>area_n</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>area_e</span></div><div class='xr-var-dims'>(xu, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-8cdb3a6b-0a51-436f-98c4-7fed609835f0' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8cdb3a6b-0a51-436f-98c4-7fed609835f0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d9b3a4ce-49ea-4fe2-8fc8-8d2946b8a932' class='xr-var-data-in' type='checkbox'><label for='data-d9b3a4ce-49ea-4fe2-8fc8-8d2946b8a932' 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>tracked_name :</span></dt><dd>area_e</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>area_t</span></div><div class='xr-var-dims'>(xt, yt)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5), meta=np.ndarray&gt;</div><input id='attrs-d0b7e25b-e398-4650-a8d4-02ba50a0cda4' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d0b7e25b-e398-4650-a8d4-02ba50a0cda4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-66a65ee6-5120-4647-b268-bbd93f7027d4' class='xr-var-data-in' type='checkbox'><label for='data-66a65ee6-5120-4647-b268-bbd93f7027d4' 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>tracked_name :</span></dt><dd>area_t</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 160 B </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5) </td>\n",
" <td> (4, 5) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 1 Tasks </td>\n",
" <td> 1 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"96\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,96.0 0.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"116.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"140.000000\" y=\"48.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,48.000000)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>volume_t</span></div><div class='xr-var-dims'>(xt, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-a888bf28-0461-4a70-9d70-3bf2d8952061' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a888bf28-0461-4a70-9d70-3bf2d8952061' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-38061c87-83d3-4f76-b4be-5f1e2c808d60' class='xr-var-data-in' type='checkbox'><label for='data-38061c87-83d3-4f76-b4be-5f1e2c808d60' 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>tracked_name :</span></dt><dd>volume_t</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-c787f9b2-a8c1-4db8-b259-7d04cf83d969' class='xr-section-summary-in' type='checkbox' checked><label for='section-c787f9b2-a8c1-4db8-b259-7d04cf83d969' class='xr-section-summary' >Data variables: <span>(5)</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>u</span></div><div class='xr-var-dims'>(xu, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-88d62130-8229-40b4-a14c-d8cb6ba74a52' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-88d62130-8229-40b4-a14c-d8cb6ba74a52' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2cace943-f24a-4b33-a8e0-f6abff128fb4' class='xr-var-data-in' type='checkbox'><label for='data-2cace943-f24a-4b33-a8e0-f6abff128fb4' 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'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>v</span></div><div class='xr-var-dims'>(xt, yu, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-2ad5eba6-b0c0-49fe-bab8-6ac5b43020d0' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2ad5eba6-b0c0-49fe-bab8-6ac5b43020d0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8bb9e5fe-6cfa-4a4e-aa41-2cffa110418d' class='xr-var-data-in' type='checkbox'><label for='data-8bb9e5fe-6cfa-4a4e-aa41-2cffa110418d' 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'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>wt</span></div><div class='xr-var-dims'>(xt, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-dc505ac1-b643-414f-ae39-a7f140d8cc6a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-dc505ac1-b643-414f-ae39-a7f140d8cc6a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4515e7c8-c2ad-48da-ac20-2536cfb3b986' class='xr-var-data-in' type='checkbox'><label for='data-4515e7c8-c2ad-48da-ac20-2536cfb3b986' 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'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>tracer</span></div><div class='xr-var-dims'>(xt, yt, time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(4, 5, 1), meta=np.ndarray&gt;</div><input id='attrs-8b6c5d41-4372-44f6-bd00-8cc4986f9858' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8b6c5d41-4372-44f6-bd00-8cc4986f9858' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e7c41009-2b30-49b4-af2c-a1d74bd4b301' class='xr-var-data-in' type='checkbox'><label for='data-e7c41009-2b30-49b4-af2c-a1d74bd4b301' 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'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>timeseries</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1,), meta=np.ndarray&gt;</div><input id='attrs-58c6db7a-dc0d-4ece-9f04-7fcb7fe023cb' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-58c6db7a-dc0d-4ece-9f04-7fcb7fe023cb' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5f5844ea-aa8f-40e3-a3a9-8772aeade5b6' class='xr-var-data-in' type='checkbox'><label for='data-5f5844ea-aa8f-40e3-a3a9-8772aeade5b6' 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'><table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 80 B </td>\n",
" <td> 8 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (10,) </td>\n",
" <td> (1,) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"170\" height=\"88\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"38\" x2=\"120\" y2=\"38\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"38\" style=\"stroke-width:2\" />\n",
" <line x1=\"12\" y1=\"0\" x2=\"12\" y2=\"38\" />\n",
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"38\" />\n",
" <line x1=\"36\" y1=\"0\" x2=\"36\" y2=\"38\" />\n",
" <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"38\" />\n",
" <line x1=\"60\" y1=\"0\" x2=\"60\" y2=\"38\" />\n",
" <line x1=\"72\" y1=\"0\" x2=\"72\" y2=\"38\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"84\" y2=\"38\" />\n",
" <line x1=\"96\" y1=\"0\" x2=\"96\" y2=\"38\" />\n",
" <line x1=\"108\" y1=\"0\" x2=\"108\" y2=\"38\" />\n",
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"38\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,38.596863036086 0.0,38.596863036086\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"60.000000\" y=\"58.596863\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"140.000000\" y=\"19.298432\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,19.298432)\">1</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-24ef1cec-7c3d-4a8d-ad7e-dbef4a88a815' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-24ef1cec-7c3d-4a8d-ad7e-dbef4a88a815' 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: (xu: 4, yt: 5, time: 10, xt: 4, yu: 5)\n",
"Coordinates: (12/25)\n",
" * xu (xu) float64 0.5 1.5 2.5 3.5\n",
" * yt (yt) int64 0 1 2 3 4\n",
" * time (time) int64 0 1 2 3 4 5 6 7 8 9\n",
" zt int64 0\n",
" * xt (xt) int64 0 1 2 3\n",
" * yu (yu) float64 0.5 1.5 2.5 3.5 4.5\n",
" ... ...\n",
" dz_w_e (xu, yt, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
" area_ne (xu, yu) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
" area_n (xt, yu) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
" area_e (xu, yt) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
" area_t (xt, yt) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
" volume_t (xt, yt, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
"Data variables:\n",
" u (xu, yt, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
" v (xt, yu, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
" wt (xt, yt, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
" tracer (xt, yt, time) float64 dask.array<chunksize=(4, 5, 1), meta=np.ndarray>\n",
" timeseries (time) float64 dask.array<chunksize=(1,), meta=np.ndarray>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load a sample dataset\n",
"from xgcm.test.datasets import datasets_grid_metric\n",
"ds, coords, metrics = datasets_grid_metric('C')\n",
"# cut to just one vertical slice\n",
"ds = ds.isel(zt=0, zw=0)\n",
"_ = coords.pop('Z')\n",
"\n",
"# @Tom: I think once the two issues I raised are solved this is the tuning parameter, \n",
"# to show when we can really reduce the number of dask tasks produced.\n",
"ds = ds.chunk({'time':1, 'xt':-1, 'yt':-1})\n",
"ds"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "206edef2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<xgcm.Grid>\n",
"X Axis (periodic, boundary=None):\n",
" * center xt --> right\n",
" * right xu --> center\n",
"Y Axis (periodic, boundary=None):\n",
" * center yt --> right\n",
" * right yu --> center"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create a grid object\n",
"grid = Grid(ds, coords=coords)\n",
"grid"
]
},
{
"cell_type": "markdown",
"id": "37460749",
"metadata": {},
"source": [
"Lets start simple. Lets say we want to implement a simple forwards difference along the X axis on a single timestep, we could use 'bare-bones' numpy. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6216b118",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 160 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (4, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 10 Tasks </td>\n",
" <td> 10 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table>"
],
"text/plain": [
"dask.array<xarray-tracer, shape=(4, 5, 10), dtype=float64, chunksize=(4, 5, 1), chunktype=numpy.ndarray>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data = ds.tracer.data\n",
"raw_data"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "18d93764",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.56 kiB </td>\n",
" <td> 120 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (4, 5, 10) </td>\n",
" <td> (3, 5, 1) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 110 Tasks </td>\n",
" <td> 20 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"208\" height=\"138\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"60\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"60\" style=\"stroke-width:2\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"67\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 38.23529411764706,28.235294117647058 38.23529411764706,88.23529411764706 10.0,60.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"137\" y2=\"7\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"38\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"50\" y2=\"28\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"62\" y2=\"28\" />\n",
" <line x1=\"46\" y1=\"0\" x2=\"74\" y2=\"28\" />\n",
" <line x1=\"58\" y1=\"0\" x2=\"86\" y2=\"28\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"98\" y2=\"28\" />\n",
" <line x1=\"82\" y1=\"0\" x2=\"110\" y2=\"28\" />\n",
" <line x1=\"94\" y1=\"0\" x2=\"122\" y2=\"28\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"134\" y2=\"28\" />\n",
" <line x1=\"118\" y1=\"0\" x2=\"146\" y2=\"28\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 158.23529411764707,28.235294117647058 38.23529411764706,28.235294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" style=\"stroke-width:2\" />\n",
" <line x1=\"38\" y1=\"88\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"88\" style=\"stroke-width:2\" />\n",
" <line x1=\"50\" y1=\"28\" x2=\"50\" y2=\"88\" />\n",
" <line x1=\"62\" y1=\"28\" x2=\"62\" y2=\"88\" />\n",
" <line x1=\"74\" y1=\"28\" x2=\"74\" y2=\"88\" />\n",
" <line x1=\"86\" y1=\"28\" x2=\"86\" y2=\"88\" />\n",
" <line x1=\"98\" y1=\"28\" x2=\"98\" y2=\"88\" />\n",
" <line x1=\"110\" y1=\"28\" x2=\"110\" y2=\"88\" />\n",
" <line x1=\"122\" y1=\"28\" x2=\"122\" y2=\"88\" />\n",
" <line x1=\"134\" y1=\"28\" x2=\"134\" y2=\"88\" />\n",
" <line x1=\"146\" y1=\"28\" x2=\"146\" y2=\"88\" />\n",
" <line x1=\"158\" y1=\"28\" x2=\"158\" y2=\"88\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"38.23529411764706,28.235294117647058 158.23529411764707,28.235294117647058 158.23529411764707,88.23529411764706 38.23529411764706,88.23529411764706\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"98.235294\" y=\"108.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n",
" <text x=\"178.235294\" y=\"58.235294\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,178.235294,58.235294)\">5</text>\n",
" <text x=\"14.117647\" y=\"94.117647\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,14.117647,94.117647)\">4</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table>"
],
"text/plain": [
"dask.array<sub, shape=(4, 5, 10), dtype=float64, chunksize=(3, 5, 1), chunktype=numpy.ndarray>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# treat the array boundary along axis 0 as periodic (xgcm's default)\n",
"raw_diff = np.roll(raw_data, 1, 0) - raw_data\n",
"raw_diff"
]
},
{
"cell_type": "markdown",
"id": "4d9237e1",
"metadata": {},
"source": [
"This is very easy, and close to what many users might be familiar with.\n",
"It is very intuitive to encode really any kind of [stencil operation]() in this way, and it is very close to the way this type of operation is implemented in many modern climate models.\n",
"\n",
"But there are some major downsides to this approach:\n",
"- We need to know which dimension/numpy-axis corresponds to the 'x' axis. There is no guarantee that this is always the same axis. This bookkeeping is prone to errors.\n",
"- Here we left the realm of xarray, loosing all of the labels etc.\n",
"- This does not scale to large datasets, because we do not use dask here.\n",
"\n",
"xgcm has solved these issues in the past, but was limited to simple diff/interp operations, that were not easiluy customizable and [could lead to performance issues on large datasets]().\n",
"\n",
"The new `grid_ufunc` functionality combines the best of these two worlds: Write complex operators in simple numpy, and by providing a 'grid_ufunc signature' you can apply this simple function using xgcm, retaining the awareness of axes, efficient parallelization with dask, and most other features of xgcm.\n",
"\n",
"On a very basic level `grid_ufunc` is a simple numpy function, that is specially decorated. See [here]() for more details."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d506e54e",
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'xgcm.grid_ufunc'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_340/1733346838.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# create a super simple ufunc (recoding the internal diff)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mxgcm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgrid_ufunc\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mas_grid_ufunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#The signature needs to tell xgcm the source (from) and target (to)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m# axis(axes) and grid position(s) as well as the boundary_width\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'xgcm.grid_ufunc'"
]
}
],
"source": [
"# create a super simple ufunc (recoding the internal diff)\n",
"from xgcm.grid_ufunc import as_grid_ufunc\n",
"\n",
"#The signature needs to tell xgcm the source (from) and target (to) \n",
"# axis(axes) and grid position(s) as well as the boundary_width \n",
"\n",
"\n",
"# simple forward difference\n",
"@as_grid_ufunc(\n",
" signature=\"(ax0:center)->(ax0:right)\",\n",
" boundary_width={\"ax0\": (1, 0)},\n",
" dask='allowed',\n",
" map_overlap=True\n",
"# dask='parallelized'\n",
")\n",
"def test_ufunc(a):\n",
" # the axis we are acting on is always the last numpy axis!\n",
" # This is different from the simple example above\n",
" out =a[..., :-1] - a[..., 1:]\n",
" # Note that the output always needs to be 'cut' in the expected size for the \n",
" return out\n",
"\n",
"ufunc_diff = test_ufunc(grid, ds.tracer, axis='X')\n",
"ufunc_diff"
]
},
{
"cell_type": "markdown",
"id": "f34f434a",
"metadata": {},
"source": [
"We can see that the results are the same as applying the numpy function!"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "b7266ebd",
"metadata": {},
"outputs": [],
"source": [
"raw_test = raw_diff[...,0].compute()\n",
"ufunc_test = ufunc_diff.isel(time=0).T.data.compute()\n",
"\n",
"assert np.isclose(raw_test, ufunc_test).all()"
]
},
{
"cell_type": "markdown",
"id": "17351b7e",
"metadata": {},
"source": [
"## implement a naive gradient amplitude (without metrics for now)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "07dc1add",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
" <tr>\n",
" <td>\n",
" <table>\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 480 B </td>\n",
" <td> 48 B </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (3, 4, 5) </td>\n",
" <td> (1, 2, 3) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Count </th>\n",
" <td> 339 Tasks </td>\n",
" <td> 27 Chunks </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Type </th>\n",
" <td> float64 </td>\n",
" <td> numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"222\" height=\"188\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"52\" y2=\"42\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"52\" y2=\"66\" />\n",
" <line x1=\"10\" y1=\"72\" x2=\"52\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"96\" x2=\"52\" y2=\"138\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"96\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"110\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"124\" />\n",
" <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"138\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 52.35294117647059,42.35294117647059 52.35294117647059,138.35294117647058 10.0,96.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" />\n",
" <line x1=\"38\" y1=\"28\" x2=\"158\" y2=\"28\" />\n",
" <line x1=\"52\" y1=\"42\" x2=\"172\" y2=\"42\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"52\" y2=\"42\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"76\" y2=\"42\" />\n",
" <line x1=\"106\" y1=\"0\" x2=\"148\" y2=\"42\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"172\" y2=\"42\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 172.35294117647058,42.35294117647059 52.35294117647059,42.35294117647059\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"52\" y1=\"42\" x2=\"172\" y2=\"42\" style=\"stroke-width:2\" />\n",
" <line x1=\"52\" y1=\"66\" x2=\"172\" y2=\"66\" />\n",
" <line x1=\"52\" y1=\"114\" x2=\"172\" y2=\"114\" />\n",
" <line x1=\"52\" y1=\"138\" x2=\"172\" y2=\"138\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"138\" style=\"stroke-width:2\" />\n",
" <line x1=\"76\" y1=\"42\" x2=\"76\" y2=\"138\" />\n",
" <line x1=\"148\" y1=\"42\" x2=\"148\" y2=\"138\" />\n",
" <line x1=\"172\" y1=\"42\" x2=\"172\" y2=\"138\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"52.35294117647059,42.35294117647059 172.35294117647058,42.35294117647059 172.35294117647058,138.35294117647058 52.35294117647059,138.35294117647058\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"112.352941\" y=\"158.352941\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >5</text>\n",
" <text x=\"192.352941\" y=\"90.352941\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,192.352941,90.352941)\">4</text>\n",
" <text x=\"21.176471\" y=\"137.176471\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,21.176471,137.176471)\">3</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table>"
],
"text/plain": [
"dask.array<add, shape=(3, 4, 5), dtype=float64, chunksize=(1, 2, 3), chunktype=numpy.ndarray>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# # simple forward difference in two dimensions\n",
"@as_grid_ufunc(\n",
" signature=\"(ax0:center, ax1:center)->(ax0:center, ax1:center)\",\n",
" dask='allowed',\n",
" map_overlap=True\n",
")\n",
"def naive_gradient_amplitude(a):\n",
" d0 = np.roll(a,-1, -2) - a\n",
" d1 = np.roll(a,-1, -1) - a\n",
" # interpolate back onto the center grid\n",
" d0 = (d0 + np.roll(d0, 1, -2)) / 2\n",
" d1 = (d1 + np.roll(d1, 1, -1)) / 2\n",
" mag = d0**2 + d1**2\n",
" return mag\n",
"\n",
"ufunc_grad = naive_gradient_amplitude(grid, ds.tracer, axis=[['X', 'Y']]) \n",
"# NOTE: the axis needs to be a list of lists if not just a str\n",
"ufunc_grad.data"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "d5f2af9f",
"metadata": {},
"outputs": [
{
"ename": "NotImplementedError",
"evalue": "Could not find any pre-defined diff grid ufuncs",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_2409/3526234028.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# compare to 'old' style xgcm code\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtracer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'X'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'X'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtracer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Y'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Y'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mold_grad\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdx\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdy\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mold_grad\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36mdiff\u001b[0;34m(self, da, axis, **kwargs)\u001b[0m\n\u001b[1;32m 1960\u001b[0m \u001b[0;34m>>\u001b[0m\u001b[0;34m>\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mda\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"X\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Y\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"X\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Y\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1961\u001b[0m \"\"\"\n\u001b[0;32m-> 1962\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_1d_grid_ufunc_dispatch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"diff\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mda\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1963\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1964\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mdocstrings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdedent\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36m_1d_grid_ufunc_dispatch\u001b[0;34m(self, funcname, da, axis, to, keep_coords, metric_weighted, **kwargs)\u001b[0m\n\u001b[1;32m 1767\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msignature_1d\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max_name\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msignatures\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1768\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1769\u001b[0;31m grid_ufunc, remaining_kwargs = _select_grid_ufunc(\n\u001b[0m\u001b[1;32m 1770\u001b[0m \u001b[0mfuncname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msignature_1d\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgridops\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1771\u001b[0m )\n",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36m_select_grid_ufunc\u001b[0;34m(funcname, signature, module, **kwargs)\u001b[0m\n\u001b[1;32m 2336\u001b[0m ]\n\u001b[1;32m 2337\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname_matching_ufuncs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2338\u001b[0;31m raise NotImplementedError(\n\u001b[0m\u001b[1;32m 2339\u001b[0m \u001b[0;34mf\"Could not find any pre-defined {funcname} grid ufuncs\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2340\u001b[0m )\n",
"\u001b[0;31mNotImplementedError\u001b[0m: Could not find any pre-defined diff grid ufuncs"
]
}
],
"source": [
"# compare to 'old' style xgcm code\n",
"dx = grid.interp(grid.diff(ds.tracer, 'X'), 'X')\n",
"dy = grid.interp(grid.diff(ds.tracer, 'Y'), 'Y')\n",
"old_grad = dx**2 + dy**2\n",
"old_grad.data"
]
},
{
"cell_type": "markdown",
"id": "22a5a77d",
"metadata": {},
"source": [
"I wanted to demonstrate how we end up with less dask chunks, but I think I am currently blocked by: https://github.com/xgcm/xgcm/issues/429"
]
},
{
"cell_type": "markdown",
"id": "5c14947d",
"metadata": {},
"source": [
"The lesson for me here was that it was wayyyy easier to use the old xgcm high level syntax!\n",
"Should we emphasize this for simple problems and then recommend the ufuncs for more complex (computionally) problems?"
]
},
{
"cell_type": "markdown",
"id": "22a523e6",
"metadata": {},
"source": [
"# Archive"
]
},
{
"cell_type": "markdown",
"id": "ffb3026d",
"metadata": {},
"source": [
"## Issue: ✅ Dask parallelized not working as expected on chunked data"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "385f0cce",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "dimension X_c on 0th function argument to apply_ufunc with dask='parallelized' consists of multiple chunks, but is also a core dimension. To fix, either rechunk into a single dask array chunk along this dimension, i.e., ``.chunk(dict(X_c=-1))``, or pass ``allow_rechunk=True`` in ``dask_gufunc_kwargs`` but beware that this may significantly increase memory usage.",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_2409/2481888569.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0mufunc_diff\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtest_ufunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mda\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'X'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0mufunc_diff\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/xgcm/xgcm/grid_ufunc.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, grid, axis, *args, **kwargs)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0mdask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"dask\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdask\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0mmap_overlap\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"map_overlap\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap_overlap\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 160\u001b[0;31m return apply_as_grid_ufunc(\n\u001b[0m\u001b[1;32m 161\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mufunc\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/xgcm/xgcm/grid_ufunc.py\u001b[0m in \u001b[0;36mapply_as_grid_ufunc\u001b[0;34m(func, axis, grid, signature, boundary_width, boundary, fill_value, keep_coords, dask, map_overlap, *args, **kwargs)\u001b[0m\n\u001b[1;32m 477\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 478\u001b[0m \u001b[0;31m# Perform operation via xarray.apply_ufunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 479\u001b[0;31m results = xr.apply_ufunc(\n\u001b[0m\u001b[1;32m 480\u001b[0m \u001b[0mmapped_func\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 481\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mrechunked_padded_args\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py\u001b[0m in \u001b[0;36mapply_ufunc\u001b[0;34m(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, *args)\u001b[0m\n\u001b[1;32m 1157\u001b[0m \u001b[0;31m# feed DataArray apply_variable_ufunc through apply_dataarray_vfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1158\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDataArray\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1159\u001b[0;31m return apply_dataarray_vfunc(\n\u001b[0m\u001b[1;32m 1160\u001b[0m \u001b[0mvariables_vfunc\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1161\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py\u001b[0m in \u001b[0;36mapply_dataarray_vfunc\u001b[0;34m(func, signature, join, exclude_dims, keep_attrs, *args)\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[0mdata_vars\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"variable\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 286\u001b[0;31m \u001b[0mresult_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mdata_vars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 287\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msignature\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_outputs\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py\u001b[0m in \u001b[0;36mapply_variable_ufunc\u001b[0;34m(func, signature, exclude_dims, dask, output_dtypes, vectorize, keep_attrs, dask_gufunc_kwargs, *args)\u001b[0m\n\u001b[1;32m 670\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdim\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_dims\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_dims\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 671\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchunks\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 672\u001b[0;31m raise ValueError(\n\u001b[0m\u001b[1;32m 673\u001b[0m \u001b[0;34mf\"dimension {dim} on {n}th function argument to \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 674\u001b[0m \u001b[0;34m\"apply_ufunc with dask='parallelized' consists of \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: dimension X_c on 0th function argument to apply_ufunc with dask='parallelized' consists of multiple chunks, but is also a core dimension. To fix, either rechunk into a single dask array chunk along this dimension, i.e., ``.chunk(dict(X_c=-1))``, or pass ``allow_rechunk=True`` in ``dask_gufunc_kwargs`` but beware that this may significantly increase memory usage."
]
}
],
"source": [
"from xgcm.grid_ufunc import as_grid_ufunc\n",
"from xgcm.test.test_grid_ufunc import create_1d_test_grid_ds, create_1d_test_grid\n",
"\n",
"ds = create_1d_test_grid_ds('X')\n",
"grid = create_1d_test_grid('X')\n",
"da = np.sin(grid._ds.X_c)\n",
"da = da.chunk({'X_c':-1})\n",
"da \n",
"\n",
"\n",
"# simple forward difference\n",
"@as_grid_ufunc(\n",
" signature=\"(ax0:center)->(ax0:right)\",\n",
" boundary_width={\"ax0\": (1, 0)},\n",
" dask='parallelized'\n",
")\n",
"def test_ufunc(a):\n",
" out = a[..., :-1] - a[..., 1:]\n",
" return out\n",
"\n",
"ufunc_diff = test_ufunc(grid, da, axis='X')\n",
"ufunc_diff"
]
},
{
"cell_type": "markdown",
"id": "1b2d6236",
"metadata": {},
"source": [
"## ✅ Issue: Basic grid methods failing on chunked data"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "f8562c5a",
"metadata": {},
"outputs": [
{
"ename": "NotImplementedError",
"evalue": "Could not find any pre-defined diff grid ufuncs",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_2409/1917141936.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchunk\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mgrid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcoords\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcoords\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtracer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'X'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36mdiff\u001b[0;34m(self, da, axis, **kwargs)\u001b[0m\n\u001b[1;32m 1960\u001b[0m \u001b[0;34m>>\u001b[0m\u001b[0;34m>\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mda\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"X\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Y\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"X\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Y\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1961\u001b[0m \"\"\"\n\u001b[0;32m-> 1962\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_1d_grid_ufunc_dispatch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"diff\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mda\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1963\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1964\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mdocstrings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdedent\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36m_1d_grid_ufunc_dispatch\u001b[0;34m(self, funcname, da, axis, to, keep_coords, metric_weighted, **kwargs)\u001b[0m\n\u001b[1;32m 1767\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msignature_1d\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max_name\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msignatures\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1768\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1769\u001b[0;31m grid_ufunc, remaining_kwargs = _select_grid_ufunc(\n\u001b[0m\u001b[1;32m 1770\u001b[0m \u001b[0mfuncname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msignature_1d\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgridops\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1771\u001b[0m )\n",
"\u001b[0;32m~/xgcm/xgcm/grid.py\u001b[0m in \u001b[0;36m_select_grid_ufunc\u001b[0;34m(funcname, signature, module, **kwargs)\u001b[0m\n\u001b[1;32m 2336\u001b[0m ]\n\u001b[1;32m 2337\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname_matching_ufuncs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2338\u001b[0;31m raise NotImplementedError(\n\u001b[0m\u001b[1;32m 2339\u001b[0m \u001b[0;34mf\"Could not find any pre-defined {funcname} grid ufuncs\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2340\u001b[0m )\n",
"\u001b[0;31mNotImplementedError\u001b[0m: Could not find any pre-defined diff grid ufuncs"
]
}
],
"source": [
"# load a sample dataset\n",
"from xgcm import Grid\n",
"from xgcm.test.datasets import datasets_grid_metric\n",
"ds, coords, metrics = datasets_grid_metric('C')\n",
"ds = ds.chunk({'time':1})\n",
"grid = Grid(ds, coords=coords)\n",
"grid.diff(ds.tracer, 'X')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "76884690",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"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.8.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment