.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/regridder_overview.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end <sphx_glr_download_examples_regridder_overview.py>` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_regridder_overview.py: Regridding overview =================== `Regridding`_ is the process of converting gridded data from one grid to another grid. Xugrid provides tools for 2D and 3D regridding of structured gridded data, represented as xarray objects, as well as (`layered`_) unstructured gridded data, represented as xugrid objects. A number of regridding methods are provided, based on area or volume overlap, as well as interpolation routines. It currently only supports Cartesian coordinates. See e.g. `xESMF`_ instead for regridding with a spherical Earth representation (note: EMSF is `not available`_ via conda-forge on Windows). Here are a number of quick examples of how to get started with regridding. We'll start by importing a few essential packages. .. GENERATED FROM PYTHON SOURCE LINES 20-26 .. code-block:: Python import matplotlib.pyplot as plt import xarray as xr import xugrid as xu .. GENERATED FROM PYTHON SOURCE LINES 27-29 We will take a look at a sample dataset: a triangular grid with the surface elevation of the Netherlands. .. GENERATED FROM PYTHON SOURCE LINES 29-33 .. code-block:: Python uda = xu.data.elevation_nl() uda.ugrid.plot(vmin=-20, vmax=90, cmap="terrain") .. image-sg:: /examples/images/sphx_glr_regridder_overview_001.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74d436bd10> .. GENERATED FROM PYTHON SOURCE LINES 34-37 Xugrid provides several "regridder" classes which can convert gridded data from one grid to another grid. Let's generate a very simple coarse mesh that covers the entire Netherlands. .. GENERATED FROM PYTHON SOURCE LINES 37-56 .. code-block:: Python def create_grid(bounds, nx, ny): """Create a simple grid of triangles covering a rectangle.""" import numpy as np from matplotlib.tri import Triangulation xmin, ymin, xmax, ymax = bounds dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny x = np.arange(xmin, xmax + dx, dx) y = np.arange(ymin, ymax + dy, dy) y, x = [a.ravel() for a in np.meshgrid(y, x, indexing="ij")] faces = Triangulation(x, y).triangles return xu.Ugrid2d(x, y, -1, faces) grid = create_grid(uda.ugrid.total_bounds, 7, 7) .. GENERATED FROM PYTHON SOURCE LINES 57-62 CentroidLocatorRegridder ------------------------ An easy way of regridding is by simply looking in which cell of the original the centroids of the new grid fall. .. GENERATED FROM PYTHON SOURCE LINES 62-68 .. code-block:: Python fig, ax = plt.subplots() uda.ugrid.plot(vmin=-20, vmax=90, cmap="terrain", ax=ax) grid.plot(ax=ax, color="red") ax.scatter(*grid.centroids.T, color="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_002.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PathCollection object at 0x7f74d40d6420> .. GENERATED FROM PYTHON SOURCE LINES 69-70 Xugrid provides the CentroidLocatorRegridder for this: .. GENERATED FROM PYTHON SOURCE LINES 70-75 .. code-block:: Python regridder = xu.CentroidLocatorRegridder(source=uda, target=grid) result = regridder.regrid(uda) result.ugrid.plot(vmin=-20, vmax=90, cmap="terrain", edgecolor="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_003.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_003.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74d3e164b0> .. GENERATED FROM PYTHON SOURCE LINES 76-81 OverlapRegridder ---------------- Such a regridding is not appropriate when the new grid cells are so large. Let's try the OverlapOverregridder instead. .. GENERATED FROM PYTHON SOURCE LINES 81-86 .. code-block:: Python regridder = xu.OverlapRegridder(source=uda, target=grid) mean = regridder.regrid(uda) mean.ugrid.plot(vmin=-20, vmax=90, cmap="terrain", edgecolor="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_004.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_004.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74dcf64980> .. GENERATED FROM PYTHON SOURCE LINES 87-89 By default, the OverlapRegridder computes an area weighted mean. Let's try again, now with the minimum: .. GENERATED FROM PYTHON SOURCE LINES 89-94 .. code-block:: Python regridder = xu.OverlapRegridder(source=uda, target=grid, method="minimum") minimum = regridder.regrid(uda) minimum.ugrid.plot(vmin=-20, vmax=90, cmap="terrain", edgecolor="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_005.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_005.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74d3e16090> .. GENERATED FROM PYTHON SOURCE LINES 95-96 Or the maximum: .. GENERATED FROM PYTHON SOURCE LINES 96-101 .. code-block:: Python regridder = xu.OverlapRegridder(source=uda, target=grid, method="maximum") maximum = regridder.regrid(uda) maximum.ugrid.plot(vmin=-20, vmax=90, cmap="terrain", edgecolor="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_006.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_006.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74ddbf6ae0> .. GENERATED FROM PYTHON SOURCE LINES 102-107 All regridders also work for multi-dimensional data. Let's pretend our elevation dataset contains multiple layers, for example to denote multiple geological strata. We'll generate five layers, each with a thickness of 10.0 meters. .. GENERATED FROM PYTHON SOURCE LINES 107-114 .. code-block:: Python thickness = xr.DataArray( data=[10.0, 10.0, 10.0, 10.0, 10.0], coords={"layer": [1, 2, 3, 4, 5]}, dims=["layer"], ) .. GENERATED FROM PYTHON SOURCE LINES 115-117 We need to make that the face dimension remains last, so we transpose the result. .. GENERATED FROM PYTHON SOURCE LINES 117-121 .. code-block:: Python bottom = (uda - thickness.cumsum("layer")).transpose() bottom .. raw:: html <div class="output_subarea output_html rendered_html output_result"> <div><svg style="position: absolute; width: 0; height: 0; overflow: hidden"> <defs> <symbol id="icon-database" viewBox="0 0 32 32"> <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> <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> <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> </symbol> <symbol id="icon-file-text2" viewBox="0 0 32 32"> <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> <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> <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> <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> </symbol> </defs> </svg> <style>/* CSS stylesheet for displaying xarray objects in jupyterlab. * */ :root { --xr-font-color0: var( --jp-content-font-color0, var(--pst-color-text-base rgba(0, 0, 0, 1)) ); --xr-font-color2: var( --jp-content-font-color2, var(--pst-color-text-base, rgba(0, 0, 0, 0.54)) ); --xr-font-color3: var( --jp-content-font-color3, var(--pst-color-text-base, rgba(0, 0, 0, 0.38)) ); --xr-border-color: var( --jp-border-color2, hsl(from var(--pst-color-on-background, white) h s calc(l - 10)) ); --xr-disabled-color: var( --jp-layout-color3, hsl(from var(--pst-color-on-background, white) h s calc(l - 40)) ); --xr-background-color: var( --jp-layout-color0, var(--pst-color-on-background, white) ); --xr-background-color-row-even: var( --jp-layout-color1, hsl(from var(--pst-color-on-background, white) h s calc(l - 5)) ); --xr-background-color-row-odd: var( --jp-layout-color2, hsl(from var(--pst-color-on-background, white) h s calc(l - 15)) ); } html[theme="dark"], html[data-theme="dark"], body[data-theme="dark"], body.vscode-dark { --xr-font-color0: var( --jp-content-font-color0, var(--pst-color-text-base, rgba(255, 255, 255, 1)) ); --xr-font-color2: var( --jp-content-font-color2, var(--pst-color-text-base, rgba(255, 255, 255, 0.54)) ); --xr-font-color3: var( --jp-content-font-color3, var(--pst-color-text-base, rgba(255, 255, 255, 0.38)) ); --xr-border-color: var( --jp-border-color2, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 10)) ); --xr-disabled-color: var( --jp-layout-color3, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 40)) ); --xr-background-color: var( --jp-layout-color0, var(--pst-color-on-background, #111111) ); --xr-background-color-row-even: var( --jp-layout-color1, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 5)) ); --xr-background-color-row-odd: var( --jp-layout-color2, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 15)) ); } .xr-wrap { display: block !important; min-width: 300px; max-width: 700px; } .xr-text-repr-fallback { /* fallback to plain text repr when CSS is not injected (untrusted notebook) */ display: none; } .xr-header { padding-top: 6px; padding-bottom: 6px; margin-bottom: 4px; border-bottom: solid 1px var(--xr-border-color); } .xr-header > div, .xr-header > ul { display: inline; margin-top: 0; margin-bottom: 0; } .xr-obj-type, .xr-array-name { margin-left: 2px; margin-right: 10px; } .xr-obj-type { color: var(--xr-font-color2); } .xr-sections { padding-left: 0 !important; display: grid; grid-template-columns: 150px auto auto 1fr 0 20px 0 20px; } .xr-section-item { display: contents; } .xr-section-item input { display: inline-block; opacity: 0; height: 0; } .xr-section-item input + label { color: var(--xr-disabled-color); border: 2px solid transparent !important; } .xr-section-item input:enabled + label { cursor: pointer; color: var(--xr-font-color2); } .xr-section-item input:focus + label { border: 2px solid var(--xr-font-color0) !important; } .xr-section-item input:enabled + label:hover { color: var(--xr-font-color0); } .xr-section-summary { grid-column: 1; color: var(--xr-font-color2); font-weight: 500; } .xr-section-summary > span { display: inline-block; padding-left: 0.5em; } .xr-section-summary-in:disabled + label { color: var(--xr-font-color2); } .xr-section-summary-in + label:before { display: inline-block; content: "►"; font-size: 11px; width: 15px; text-align: center; } .xr-section-summary-in:disabled + label:before { color: var(--xr-disabled-color); } .xr-section-summary-in:checked + label:before { content: "▼"; } .xr-section-summary-in:checked + label > span { display: none; } .xr-section-summary, .xr-section-inline-details { padding-top: 4px; padding-bottom: 4px; } .xr-section-inline-details { grid-column: 2 / -1; } .xr-section-details { display: none; grid-column: 1 / -1; margin-bottom: 5px; } .xr-section-summary-in:checked ~ .xr-section-details { display: contents; } .xr-array-wrap { grid-column: 1 / -1; display: grid; grid-template-columns: 20px auto; } .xr-array-wrap > label { grid-column: 1; vertical-align: top; } .xr-preview { color: var(--xr-font-color3); } .xr-array-preview, .xr-array-data { padding: 0 5px !important; grid-column: 2; } .xr-array-data, .xr-array-in:checked ~ .xr-array-preview { display: none; } .xr-array-in:checked ~ .xr-array-data, .xr-array-preview { display: inline-block; } .xr-dim-list { display: inline-block !important; list-style: none; padding: 0 !important; margin: 0; } .xr-dim-list li { display: inline-block; padding: 0; margin: 0; } .xr-dim-list:before { content: "("; } .xr-dim-list:after { content: ")"; } .xr-dim-list li:not(:last-child):after { content: ","; padding-right: 5px; } .xr-has-index { font-weight: bold; } .xr-var-list, .xr-var-item { display: contents; } .xr-var-item > div, .xr-var-item label, .xr-var-item > .xr-var-name span { background-color: var(--xr-background-color-row-even); border-color: var(--xr-background-color-row-odd); margin-bottom: 0; padding-top: 2px; } .xr-var-item > .xr-var-name:hover span { padding-right: 5px; } .xr-var-list > li:nth-child(odd) > div, .xr-var-list > li:nth-child(odd) > label, .xr-var-list > li:nth-child(odd) > .xr-var-name span { background-color: var(--xr-background-color-row-odd); border-color: var(--xr-background-color-row-even); } .xr-var-name { grid-column: 1; } .xr-var-dims { grid-column: 2; } .xr-var-dtype { grid-column: 3; text-align: right; color: var(--xr-font-color2); } .xr-var-preview { grid-column: 4; } .xr-index-preview { grid-column: 2 / 5; color: var(--xr-font-color2); } .xr-var-name, .xr-var-dims, .xr-var-dtype, .xr-preview, .xr-attrs dt { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 10px; } .xr-var-name:hover, .xr-var-dims:hover, .xr-var-dtype:hover, .xr-attrs dt:hover { overflow: visible; width: auto; z-index: 1; } .xr-var-attrs, .xr-var-data, .xr-index-data { display: none; border-top: 2px dotted var(--xr-background-color); padding-bottom: 20px !important; padding-top: 10px !important; } .xr-var-attrs-in + label, .xr-var-data-in + label, .xr-index-data-in + label { padding: 0 1px; } .xr-var-attrs-in:checked ~ .xr-var-attrs, .xr-var-data-in:checked ~ .xr-var-data, .xr-index-data-in:checked ~ .xr-index-data { display: block; } .xr-var-data > table { float: right; } .xr-var-data > pre, .xr-index-data > pre, .xr-var-data > table > tbody > tr { background-color: transparent !important; } .xr-var-name span, .xr-var-data, .xr-index-name div, .xr-index-data, .xr-attrs { padding-left: 25px !important; } .xr-attrs, .xr-var-attrs, .xr-var-data, .xr-index-data { grid-column: 1 / -1; } dl.xr-attrs { padding: 0; margin: 0; display: grid; grid-template-columns: 125px auto; } .xr-attrs dt, .xr-attrs dd { padding: 0; margin: 0; float: left; padding-right: 10px; width: auto; } .xr-attrs dt { font-weight: normal; grid-column: 1; } .xr-attrs dt:hover span { display: inline-block; background: var(--xr-background-color); padding-right: 10px; } .xr-attrs dd { grid-column: 2; white-space: pre-wrap; word-break: break-all; } .xr-icon-database, .xr-icon-file-text2, .xr-no-icon { display: inline-block; vertical-align: middle; width: 1em; height: 1.5em !important; stroke-width: 0; stroke: currentColor; fill: currentColor; } .xr-var-attrs-in:checked + label > .xr-icon-file-text2, .xr-var-data-in:checked + label > .xr-icon-database, .xr-index-data-in:checked + label > .xr-icon-database { color: var(--xr-font-color0); filter: drop-shadow(1px 1px 5px var(--xr-font-color2)); stroke-width: 0.8px; } </style><pre class='xr-text-repr-fallback'><xarray.DataArray (layer: 5, mesh2d_nFaces: 5248)> Size: 210kB array([[ -8.83000004, -0.18999958, 44.04000092, ..., -9.72 , -25.82999992, -10.44999999], [-18.83000004, -10.18999958, 34.04000092, ..., -19.72 , -35.82999992, -20.44999999], [-28.83000004, -20.18999958, 24.04000092, ..., -29.72 , -45.82999992, -30.44999999], [-38.83000004, -30.18999958, 14.04000092, ..., -39.72 , -55.82999992, -40.44999999], [-48.83000004, -40.18999958, 4.04000092, ..., -49.72 , -65.82999992, -50.44999999]], shape=(5, 5248)) Coordinates: mesh2d_face_x (mesh2d_nFaces) float64 42kB ... mesh2d_face_y (mesh2d_nFaces) float64 42kB ... * layer (layer) int64 40B 1 2 3 4 5 * mesh2d_nFaces (mesh2d_nFaces) int64 42kB 0 1 2 3 4 ... 5244 5245 5246 5247</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>layer</span>: 5</li><li><span class='xr-has-index'>mesh2d_nFaces</span>: 5248</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-cb73e63b-6dbf-4273-b5c2-ba372f52d55c' class='xr-array-in' type='checkbox' checked><label for='section-cb73e63b-6dbf-4273-b5c2-ba372f52d55c' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>-8.83 -0.19 44.04 -9.01 -7.4 ... -49.07 -13.81 -49.72 -65.83 -50.45</span></div><div class='xr-array-data'><pre>array([[ -8.83000004, -0.18999958, 44.04000092, ..., -9.72 , -25.82999992, -10.44999999], [-18.83000004, -10.18999958, 34.04000092, ..., -19.72 , -35.82999992, -20.44999999], [-28.83000004, -20.18999958, 24.04000092, ..., -29.72 , -45.82999992, -30.44999999], [-38.83000004, -30.18999958, 14.04000092, ..., -39.72 , -55.82999992, -40.44999999], [-48.83000004, -40.18999958, 4.04000092, ..., -49.72 , -65.82999992, -50.44999999]], shape=(5, 5248))</pre></div></div></li><li class='xr-section-item'><input id='section-c0ac154a-8af9-4de4-9e1d-e88076f6e87a' class='xr-section-summary-in' type='checkbox' checked><label for='section-c0ac154a-8af9-4de4-9e1d-e88076f6e87a' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>mesh2d_face_x</span></div><div class='xr-var-dims'>(mesh2d_nFaces)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-168da6a6-fc20-4d9e-92d1-a3b7172a5a27' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-168da6a6-fc20-4d9e-92d1-a3b7172a5a27' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-546d069e-da4c-4b15-95c8-ae8db3d095dd' class='xr-var-data-in' type='checkbox'><label for='data-546d069e-da4c-4b15-95c8-ae8db3d095dd' 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>standard_name :</span></dt><dd>projection_x_coordinate</dd></dl></div><div class='xr-var-data'><pre>[5248 values with dtype=float64]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>mesh2d_face_y</span></div><div class='xr-var-dims'>(mesh2d_nFaces)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-2b313852-18f7-48a5-a1a5-34506d0dc9c6' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2b313852-18f7-48a5-a1a5-34506d0dc9c6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7726c7d8-6631-4095-86ce-9747bdbc2d36' class='xr-var-data-in' type='checkbox'><label for='data-7726c7d8-6631-4095-86ce-9747bdbc2d36' 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>standard_name :</span></dt><dd>projection_y_coordinate</dd></dl></div><div class='xr-var-data'><pre>[5248 values with dtype=float64]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>layer</span></div><div class='xr-var-dims'>(layer)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2 3 4 5</div><input id='attrs-5190e7e3-b2dc-4143-83f3-db9fd765e2e0' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-5190e7e3-b2dc-4143-83f3-db9fd765e2e0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-108c58db-e897-49cb-a2d9-ac75636a195d' class='xr-var-data-in' type='checkbox'><label for='data-108c58db-e897-49cb-a2d9-ac75636a195d' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1, 2, 3, 4, 5])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>mesh2d_nFaces</span></div><div class='xr-var-dims'>(mesh2d_nFaces)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 ... 5244 5245 5246 5247</div><input id='attrs-7818ec95-5162-4294-ad2c-7ca43f5bdb68' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-7818ec95-5162-4294-ad2c-7ca43f5bdb68' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-eac49619-9a86-4c29-b7a3-55ceb506a055' class='xr-var-data-in' type='checkbox'><label for='data-eac49619-9a86-4c29-b7a3-55ceb506a055' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, ..., 5245, 5246, 5247], shape=(5248,))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-3f058693-7d24-4de5-b442-e1ea2f2b6f0d' class='xr-section-summary-in' type='checkbox' ><label for='section-3f058693-7d24-4de5-b442-e1ea2f2b6f0d' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>layer</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-0f83e9b7-8b46-4b90-bebd-65f490302306' class='xr-index-data-in' type='checkbox'/><label for='index-0f83e9b7-8b46-4b90-bebd-65f490302306' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1, 2, 3, 4, 5], dtype='int64', name='layer'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>mesh2d_nFaces</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-d744399b-a068-47b1-b1b5-f614f4fca340' class='xr-index-data-in' type='checkbox'/><label for='index-d744399b-a068-47b1-b1b5-f614f4fca340' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(RangeIndex(start=0, stop=5248, step=1, name='mesh2d_nFaces'))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-a079e0d4-fd7d-4203-942a-c5209da2da7e' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-a079e0d4-fd7d-4203-942a-c5209da2da7e' 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> </div> <br /> <br /> .. GENERATED FROM PYTHON SOURCE LINES 122-124 We can feed the result to the regridder, which will automatically regrid over all additional dimensions. .. GENERATED FROM PYTHON SOURCE LINES 124-128 .. code-block:: Python mean_bottom = xu.OverlapRegridder(source=bottom, target=grid).regrid(bottom) mean_bottom .. raw:: html <div class="output_subarea output_html rendered_html output_result"> <div><svg style="position: absolute; width: 0; height: 0; overflow: hidden"> <defs> <symbol id="icon-database" viewBox="0 0 32 32"> <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> <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> <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> </symbol> <symbol id="icon-file-text2" viewBox="0 0 32 32"> <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> <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> <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> <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> </symbol> </defs> </svg> <style>/* CSS stylesheet for displaying xarray objects in jupyterlab. * */ :root { --xr-font-color0: var( --jp-content-font-color0, var(--pst-color-text-base rgba(0, 0, 0, 1)) ); --xr-font-color2: var( --jp-content-font-color2, var(--pst-color-text-base, rgba(0, 0, 0, 0.54)) ); --xr-font-color3: var( --jp-content-font-color3, var(--pst-color-text-base, rgba(0, 0, 0, 0.38)) ); --xr-border-color: var( --jp-border-color2, hsl(from var(--pst-color-on-background, white) h s calc(l - 10)) ); --xr-disabled-color: var( --jp-layout-color3, hsl(from var(--pst-color-on-background, white) h s calc(l - 40)) ); --xr-background-color: var( --jp-layout-color0, var(--pst-color-on-background, white) ); --xr-background-color-row-even: var( --jp-layout-color1, hsl(from var(--pst-color-on-background, white) h s calc(l - 5)) ); --xr-background-color-row-odd: var( --jp-layout-color2, hsl(from var(--pst-color-on-background, white) h s calc(l - 15)) ); } html[theme="dark"], html[data-theme="dark"], body[data-theme="dark"], body.vscode-dark { --xr-font-color0: var( --jp-content-font-color0, var(--pst-color-text-base, rgba(255, 255, 255, 1)) ); --xr-font-color2: var( --jp-content-font-color2, var(--pst-color-text-base, rgba(255, 255, 255, 0.54)) ); --xr-font-color3: var( --jp-content-font-color3, var(--pst-color-text-base, rgba(255, 255, 255, 0.38)) ); --xr-border-color: var( --jp-border-color2, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 10)) ); --xr-disabled-color: var( --jp-layout-color3, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 40)) ); --xr-background-color: var( --jp-layout-color0, var(--pst-color-on-background, #111111) ); --xr-background-color-row-even: var( --jp-layout-color1, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 5)) ); --xr-background-color-row-odd: var( --jp-layout-color2, hsl(from var(--pst-color-on-background, #111111) h s calc(l + 15)) ); } .xr-wrap { display: block !important; min-width: 300px; max-width: 700px; } .xr-text-repr-fallback { /* fallback to plain text repr when CSS is not injected (untrusted notebook) */ display: none; } .xr-header { padding-top: 6px; padding-bottom: 6px; margin-bottom: 4px; border-bottom: solid 1px var(--xr-border-color); } .xr-header > div, .xr-header > ul { display: inline; margin-top: 0; margin-bottom: 0; } .xr-obj-type, .xr-array-name { margin-left: 2px; margin-right: 10px; } .xr-obj-type { color: var(--xr-font-color2); } .xr-sections { padding-left: 0 !important; display: grid; grid-template-columns: 150px auto auto 1fr 0 20px 0 20px; } .xr-section-item { display: contents; } .xr-section-item input { display: inline-block; opacity: 0; height: 0; } .xr-section-item input + label { color: var(--xr-disabled-color); border: 2px solid transparent !important; } .xr-section-item input:enabled + label { cursor: pointer; color: var(--xr-font-color2); } .xr-section-item input:focus + label { border: 2px solid var(--xr-font-color0) !important; } .xr-section-item input:enabled + label:hover { color: var(--xr-font-color0); } .xr-section-summary { grid-column: 1; color: var(--xr-font-color2); font-weight: 500; } .xr-section-summary > span { display: inline-block; padding-left: 0.5em; } .xr-section-summary-in:disabled + label { color: var(--xr-font-color2); } .xr-section-summary-in + label:before { display: inline-block; content: "►"; font-size: 11px; width: 15px; text-align: center; } .xr-section-summary-in:disabled + label:before { color: var(--xr-disabled-color); } .xr-section-summary-in:checked + label:before { content: "▼"; } .xr-section-summary-in:checked + label > span { display: none; } .xr-section-summary, .xr-section-inline-details { padding-top: 4px; padding-bottom: 4px; } .xr-section-inline-details { grid-column: 2 / -1; } .xr-section-details { display: none; grid-column: 1 / -1; margin-bottom: 5px; } .xr-section-summary-in:checked ~ .xr-section-details { display: contents; } .xr-array-wrap { grid-column: 1 / -1; display: grid; grid-template-columns: 20px auto; } .xr-array-wrap > label { grid-column: 1; vertical-align: top; } .xr-preview { color: var(--xr-font-color3); } .xr-array-preview, .xr-array-data { padding: 0 5px !important; grid-column: 2; } .xr-array-data, .xr-array-in:checked ~ .xr-array-preview { display: none; } .xr-array-in:checked ~ .xr-array-data, .xr-array-preview { display: inline-block; } .xr-dim-list { display: inline-block !important; list-style: none; padding: 0 !important; margin: 0; } .xr-dim-list li { display: inline-block; padding: 0; margin: 0; } .xr-dim-list:before { content: "("; } .xr-dim-list:after { content: ")"; } .xr-dim-list li:not(:last-child):after { content: ","; padding-right: 5px; } .xr-has-index { font-weight: bold; } .xr-var-list, .xr-var-item { display: contents; } .xr-var-item > div, .xr-var-item label, .xr-var-item > .xr-var-name span { background-color: var(--xr-background-color-row-even); border-color: var(--xr-background-color-row-odd); margin-bottom: 0; padding-top: 2px; } .xr-var-item > .xr-var-name:hover span { padding-right: 5px; } .xr-var-list > li:nth-child(odd) > div, .xr-var-list > li:nth-child(odd) > label, .xr-var-list > li:nth-child(odd) > .xr-var-name span { background-color: var(--xr-background-color-row-odd); border-color: var(--xr-background-color-row-even); } .xr-var-name { grid-column: 1; } .xr-var-dims { grid-column: 2; } .xr-var-dtype { grid-column: 3; text-align: right; color: var(--xr-font-color2); } .xr-var-preview { grid-column: 4; } .xr-index-preview { grid-column: 2 / 5; color: var(--xr-font-color2); } .xr-var-name, .xr-var-dims, .xr-var-dtype, .xr-preview, .xr-attrs dt { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 10px; } .xr-var-name:hover, .xr-var-dims:hover, .xr-var-dtype:hover, .xr-attrs dt:hover { overflow: visible; width: auto; z-index: 1; } .xr-var-attrs, .xr-var-data, .xr-index-data { display: none; border-top: 2px dotted var(--xr-background-color); padding-bottom: 20px !important; padding-top: 10px !important; } .xr-var-attrs-in + label, .xr-var-data-in + label, .xr-index-data-in + label { padding: 0 1px; } .xr-var-attrs-in:checked ~ .xr-var-attrs, .xr-var-data-in:checked ~ .xr-var-data, .xr-index-data-in:checked ~ .xr-index-data { display: block; } .xr-var-data > table { float: right; } .xr-var-data > pre, .xr-index-data > pre, .xr-var-data > table > tbody > tr { background-color: transparent !important; } .xr-var-name span, .xr-var-data, .xr-index-name div, .xr-index-data, .xr-attrs { padding-left: 25px !important; } .xr-attrs, .xr-var-attrs, .xr-var-data, .xr-index-data { grid-column: 1 / -1; } dl.xr-attrs { padding: 0; margin: 0; display: grid; grid-template-columns: 125px auto; } .xr-attrs dt, .xr-attrs dd { padding: 0; margin: 0; float: left; padding-right: 10px; width: auto; } .xr-attrs dt { font-weight: normal; grid-column: 1; } .xr-attrs dt:hover span { display: inline-block; background: var(--xr-background-color); padding-right: 10px; } .xr-attrs dd { grid-column: 2; white-space: pre-wrap; word-break: break-all; } .xr-icon-database, .xr-icon-file-text2, .xr-no-icon { display: inline-block; vertical-align: middle; width: 1em; height: 1.5em !important; stroke-width: 0; stroke: currentColor; fill: currentColor; } .xr-var-attrs-in:checked + label > .xr-icon-file-text2, .xr-var-data-in:checked + label > .xr-icon-database, .xr-index-data-in:checked + label > .xr-icon-database { color: var(--xr-font-color0); filter: drop-shadow(1px 1px 5px var(--xr-font-color2)); stroke-width: 0.8px; } </style><pre class='xr-text-repr-fallback'><xarray.DataArray (layer: 5, mesh2d_nFaces: 98)> Size: 4kB array([[ 98.73378481, 24.75605825, nan, nan, nan, nan, 28.6866454 , 21.59076039, nan, nan, -10.30473318, -12.46283808, nan, nan, 1.98885124, -0.45315257, -7.76052909, -7.60938601, -13.9746031 , -12.82278477, -11.86447095, -13.9699236 , nan, nan, -11.32250825, -12.61944108, nan, nan, -10.39512475, -8.94184232, 7.71162015, 4.05908219, 11.63407438, 21.07322886, 8.79753456, 16.4475533 , 16.63484974, 15.75826454, -6.61134759, -5.75454656, 7.20785073, -0.81124398, nan, nan, 69.34102272, nan, nan, nan, 8.73683325, 17.46905942, nan, -11.27368816, nan, nan, nan, nan, nan, nan, -8.92800775, -11.78767776, -4.59914228, -11.1621325 , nan, nan, nan, nan, 20.30399372, 14.92605801, 4.65570035, -0.30620094, -9.73834196, -10.55580261, -11.23052693, -11.40449714, -12.85176061, -11.33053948, -7.89456194, -10.43064765, -11.51684987, -10.9563055 , ... -51.86447095, -53.9699236 , nan, nan, -51.32250825, -52.61944108, nan, nan, -50.39512475, -48.94184232, -32.28837985, -35.94091781, -28.36592562, -18.92677114, -31.20246544, -23.5524467 , -23.36515026, -24.24173546, -46.61134759, -45.75454656, -32.79214927, -40.81124398, nan, nan, 29.34102272, nan, nan, nan, -31.26316675, -22.53094058, nan, -51.27368816, nan, nan, nan, nan, nan, nan, -48.92800775, -51.78767776, -44.59914228, -51.1621325 , nan, nan, nan, nan, -19.69600628, -25.07394199, -35.34429965, -40.30620094, -49.73834196, -50.55580261, -51.23052693, -51.40449714, -52.85176061, -51.33053948, -47.89456194, -50.43064765, -51.51684987, -50.9563055 , -50.24352139, -49.97530487, -54.90399917, -50.87557562, -50.05098298, -50.91804551, -39.44818058, -44.02645019, -34.95904013, -31.75848616, -53.71649682, -47.7613762 , -46.45744354, -42.33120932, -51.24098772, -50.25680056, -45.92794405, -39.50867478]]) Coordinates: * layer (layer) int64 40B 1 2 3 4 5 * mesh2d_nFaces (mesh2d_nFaces) int64 784B 0 1 2 3 4 5 ... 92 93 94 95 96 97</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>layer</span>: 5</li><li><span class='xr-has-index'>mesh2d_nFaces</span>: 98</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-bd43e616-56de-4790-a687-4c623306715a' class='xr-array-in' type='checkbox' checked><label for='section-bd43e616-56de-4790-a687-4c623306715a' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>98.73 24.76 nan nan nan nan ... -42.33 -51.24 -50.26 -45.93 -39.51</span></div><div class='xr-array-data'><pre>array([[ 98.73378481, 24.75605825, nan, nan, nan, nan, 28.6866454 , 21.59076039, nan, nan, -10.30473318, -12.46283808, nan, nan, 1.98885124, -0.45315257, -7.76052909, -7.60938601, -13.9746031 , -12.82278477, -11.86447095, -13.9699236 , nan, nan, -11.32250825, -12.61944108, nan, nan, -10.39512475, -8.94184232, 7.71162015, 4.05908219, 11.63407438, 21.07322886, 8.79753456, 16.4475533 , 16.63484974, 15.75826454, -6.61134759, -5.75454656, 7.20785073, -0.81124398, nan, nan, 69.34102272, nan, nan, nan, 8.73683325, 17.46905942, nan, -11.27368816, nan, nan, nan, nan, nan, nan, -8.92800775, -11.78767776, -4.59914228, -11.1621325 , nan, nan, nan, nan, 20.30399372, 14.92605801, 4.65570035, -0.30620094, -9.73834196, -10.55580261, -11.23052693, -11.40449714, -12.85176061, -11.33053948, -7.89456194, -10.43064765, -11.51684987, -10.9563055 , ... -51.86447095, -53.9699236 , nan, nan, -51.32250825, -52.61944108, nan, nan, -50.39512475, -48.94184232, -32.28837985, -35.94091781, -28.36592562, -18.92677114, -31.20246544, -23.5524467 , -23.36515026, -24.24173546, -46.61134759, -45.75454656, -32.79214927, -40.81124398, nan, nan, 29.34102272, nan, nan, nan, -31.26316675, -22.53094058, nan, -51.27368816, nan, nan, nan, nan, nan, nan, -48.92800775, -51.78767776, -44.59914228, -51.1621325 , nan, nan, nan, nan, -19.69600628, -25.07394199, -35.34429965, -40.30620094, -49.73834196, -50.55580261, -51.23052693, -51.40449714, -52.85176061, -51.33053948, -47.89456194, -50.43064765, -51.51684987, -50.9563055 , -50.24352139, -49.97530487, -54.90399917, -50.87557562, -50.05098298, -50.91804551, -39.44818058, -44.02645019, -34.95904013, -31.75848616, -53.71649682, -47.7613762 , -46.45744354, -42.33120932, -51.24098772, -50.25680056, -45.92794405, -39.50867478]])</pre></div></div></li><li class='xr-section-item'><input id='section-bc6b6db8-266d-4001-9996-53c08ebbcba4' class='xr-section-summary-in' type='checkbox' checked><label for='section-bc6b6db8-266d-4001-9996-53c08ebbcba4' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>layer</span></div><div class='xr-var-dims'>(layer)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1 2 3 4 5</div><input id='attrs-36bef1c7-adc8-4c01-9746-ff0ca6d1e318' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-36bef1c7-adc8-4c01-9746-ff0ca6d1e318' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c1e1119b-527b-4730-9808-ac6817d605bd' class='xr-var-data-in' type='checkbox'><label for='data-c1e1119b-527b-4730-9808-ac6817d605bd' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1, 2, 3, 4, 5])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>mesh2d_nFaces</span></div><div class='xr-var-dims'>(mesh2d_nFaces)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 92 93 94 95 96 97</div><input id='attrs-4d5696c5-6525-42e1-8dea-ccf4468e62d9' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4d5696c5-6525-42e1-8dea-ccf4468e62d9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-572b7550-c684-4d48-8b9d-7d0d60cf6467' class='xr-var-data-in' type='checkbox'><label for='data-572b7550-c684-4d48-8b9d-7d0d60cf6467' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-1342e6b2-251a-40fb-beeb-11d537d14d7b' class='xr-section-summary-in' type='checkbox' ><label for='section-1342e6b2-251a-40fb-beeb-11d537d14d7b' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>layer</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-811ed03f-a30f-4b94-9c4b-a980d84eb985' class='xr-index-data-in' type='checkbox'/><label for='index-811ed03f-a30f-4b94-9c4b-a980d84eb985' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1, 2, 3, 4, 5], dtype='int64', name='layer'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>mesh2d_nFaces</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-5629c4ec-3469-4760-be1b-ea8b3f70436a' class='xr-index-data-in' type='checkbox'/><label for='index-5629c4ec-3469-4760-be1b-ea8b3f70436a' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(RangeIndex(start=0, stop=98, step=1, name='mesh2d_nFaces'))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-16cd7fe0-554a-46f0-8216-079468fda26c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-16cd7fe0-554a-46f0-8216-079468fda26c' 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> </div> <br /> <br /> .. GENERATED FROM PYTHON SOURCE LINES 129-131 Let's take a slice to briefly inspect our original layer bottom elevation, and the aggregated mean. .. GENERATED FROM PYTHON SOURCE LINES 131-140 .. code-block:: Python section_y = 475_000.0 section = bottom.ugrid.sel(y=section_y) section_mean = mean_bottom.ugrid.sel(y=section_y) fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(10, 5), sharex=True, sharey=True) section.plot.line(x="mesh2d_s", hue="layer", ax=ax0) section_mean.plot.line(x="mesh2d_s", hue="layer", ax=ax1) .. image-sg:: /examples/images/sphx_glr_regridder_overview_007.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_007.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none [<matplotlib.lines.Line2D object at 0x7f74ddb15d30>, <matplotlib.lines.Line2D object at 0x7f74ddb156a0>, <matplotlib.lines.Line2D object at 0x7f74d4294950>, <matplotlib.lines.Line2D object at 0x7f74d4295790>, <matplotlib.lines.Line2D object at 0x7f74ddb15850>] .. GENERATED FROM PYTHON SOURCE LINES 141-149 BarycentricInterpolator ----------------------- All examples above show reductions: from a fine grid to a coarse grid. However, xugrid also provides interpolation to generate smooth fine representations of a coarse grid. To illustrate, we will zoom in to a part of the Netherlands. .. GENERATED FROM PYTHON SOURCE LINES 149-153 .. code-block:: Python part = uda.ugrid.sel(x=slice(125_000, 225_000), y=slice(440_000, 500_000)) part.ugrid.plot(vmin=-20, vmax=90, cmap="terrain") .. image-sg:: /examples/images/sphx_glr_regridder_overview_008.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_008.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74dcf340e0> .. GENERATED FROM PYTHON SOURCE LINES 154-158 We can clearly identify the individual triangles that form the grid. To get a smooth presentation, we can use the BarycentricInterpolator. We will generate a fine grid. .. GENERATED FROM PYTHON SOURCE LINES 158-161 .. code-block:: Python grid = create_grid(part.ugrid.total_bounds, nx=100, ny=100) .. GENERATED FROM PYTHON SOURCE LINES 162-164 We use the centroids of the fine grid to interpolate between the centroids of the triangles. .. GENERATED FROM PYTHON SOURCE LINES 164-169 .. code-block:: Python regridder = xu.BarycentricInterpolator(part, grid) interpolated = regridder.regrid(part) interpolated.ugrid.plot(vmin=-20, vmax=90, cmap="terrain") .. image-sg:: /examples/images/sphx_glr_regridder_overview_009.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_009.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74dcdeb7a0> .. GENERATED FROM PYTHON SOURCE LINES 170-175 Arbitrary grids --------------- The above examples all feature triangular source and target grids. However, the regridders work for any collection of (convex) faces. .. GENERATED FROM PYTHON SOURCE LINES 175-186 .. code-block:: Python grid = create_grid(part.ugrid.total_bounds, nx=20, ny=15) voronoi_grid = grid.tesselate_centroidal_voronoi() regridder = xu.CentroidLocatorRegridder(part, voronoi_grid) result = regridder.regrid(part) fig, ax = plt.subplots() result.ugrid.plot(vmin=-20, vmax=90, cmap="terrain") voronoi_grid.plot(ax=ax, color="red") .. image-sg:: /examples/images/sphx_glr_regridder_overview_010.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_010.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.LineCollection object at 0x7f74ddbdd2b0> .. GENERATED FROM PYTHON SOURCE LINES 187-193 Re-use ------ The most expensive step of the regridding process is finding and computing overlaps. A regridder can be used repeatedly, provided the source topology is kept the same. .. GENERATED FROM PYTHON SOURCE LINES 193-198 .. code-block:: Python part_other = part - 50.0 result = regridder.regrid(part_other) result.ugrid.plot(vmin=-20, vmax=90, cmap="terrain") .. image-sg:: /examples/images/sphx_glr_regridder_overview_011.png :alt: regridder overview :srcset: /examples/images/sphx_glr_regridder_overview_011.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none <matplotlib.collections.PolyCollection object at 0x7f74d419c0e0> .. GENERATED FROM PYTHON SOURCE LINES 199-205 .. _Xarray: https://docs.xarray.dev/en/stable/index.html .. _Xugrid: https://deltares.github.io/xugrid/ .. _Regridding: https://climatedataguide.ucar.edu/climate-tools/regridding-overview .. _layered: https://ugrid-conventions.github.io/ugrid-conventions/#3d-layered-mesh-topology .. _xESMF: https://xesmf.readthedocs.io/en/latest/index.html .. _not available: https://github.com/conda-forge/esmf-feedstock/issues/64 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 9.819 seconds) .. _sphx_glr_download_examples_regridder_overview.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: regridder_overview.ipynb <regridder_overview.ipynb>` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: regridder_overview.py <regridder_overview.py>` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: regridder_overview.zip <regridder_overview.zip>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_