{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Triangular Meshes and Basic Plotting" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pylab as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## anatomy of a triangular mesh\n", "\n", "Triangular meshes are often represented as a collection of corner points (vertices) and a collection of triangles. Triangles are typically represented as three indices from within the vertex arrays.\n", "\n", "Let's create four vertices at the corner of the unit square and fill the area with two triangles. Each of the two triangles will cary a value (think of surface temperature, some fluxes etc...)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "xs = [0, 1, 0, 1]\n", "ys = [0, 0, 1, 1]\n", "tris = [[0, 1, 2], [1, 2, 3]]\n", "values = [1, 2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Matplotlib's `tripcolor`](https://matplotlib.org/stable/gallery/images_contours_and_fields/tripcolor_demo.html) takes all of these pieces and creates a plot out of it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.tripcolor(xs, ys, tris, values)\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## application to model data\n", "\n", "Let's fetch some data from the intake catalog, attach the gridfile to it and select a lat-lon region for plotting." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import intake\n", "import numpy as np\n", "import xarray as xr\n", "import yaml\n", "from gridlocator import (\n", " merge_grid,\n", ") # gridlocator.py can be found further below at 'playing with triangles'" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "col_url = \"/pf/k/k202134/DYAMOND/Processing/full_catalog.json\"\n", "col = intake.open_esm_datastore(col_url)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "res = col.search(\n", " variable=\"prw\",\n", " project=\"NextGEMS\",\n", " model=\"ICON-SAP-5km\",\n", " ensemble_member=\"dpp0052\",\n", " operation=\"inst\",\n", ")\n", "# res" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "--> The keys in the returned dictionary of datasets are constructed as follows:\n", "\t'project.institute.model.experiment.domain.frequency.grid.level_type.ensemble_member.operation'\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [1/1 00:00<00:00]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d = res.to_dataset_dict(cdf_kwargs={\"chunks\": {\"time\": 1}})" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                         (time: 1969, cell: 20971520, nv: 3, vertex: 10485762, ne: 6, edge: 31457280, no: 4, nc: 2, max_stored_decompositions: 4, two_grf: 2, cell_grf: 14, max_chdom: 1, edge_grf: 24, vert_grf: 13)\n",
       "Coordinates:\n",
       "  * time                            (time) float64 2.02e+07 ... 2.02e+07\n",
       "    clon                            (cell) float64 ...\n",
       "    clat                            (cell) float64 ...\n",
       "    vlon                            (vertex) float64 ...\n",
       "    vlat                            (vertex) float64 ...\n",
       "    elon                            (edge) float64 ...\n",
       "    elat                            (edge) float64 ...\n",
       "Dimensions without coordinates: cell, nv, vertex, ne, edge, no, nc, max_stored_decompositions, two_grf, cell_grf, max_chdom, edge_grf, vert_grf\n",
       "Data variables: (12/92)\n",
       "    prw                             (time, cell) float32 dask.array<chunksize=(1, 20971520), meta=np.ndarray>\n",
       "    clon_vertices                   (cell, nv) float64 ...\n",
       "    clat_vertices                   (cell, nv) float64 ...\n",
       "    vlon_vertices                   (vertex, ne) float64 ...\n",
       "    vlat_vertices                   (vertex, ne) float64 ...\n",
       "    elon_vertices                   (edge, no) float64 ...\n",
       "    ...                              ...\n",
       "    edge_dual_normal_cartesian_x    (edge) float64 ...\n",
       "    edge_dual_normal_cartesian_y    (edge) float64 ...\n",
       "    edge_dual_normal_cartesian_z    (edge) float64 ...\n",
       "    cell_circumcenter_cartesian_x   (cell) float64 ...\n",
       "    cell_circumcenter_cartesian_y   (cell) float64 ...\n",
       "    cell_circumcenter_cartesian_z   (cell) float64 ...\n",
       "Attributes:\n",
       "    uuidOfHGrid:             0f1e7d66-637e-11e8-913b-51232bb4d8f9\n",
       "    references:              see MPIM/DWD publications\n",
       "    history:                 /work/mh0287/k203123/GIT/icon-aes-dyw3/bin/icon ...\n",
       "    intake_esm_varname:      ['prw']\n",
       "    source:                  git@gitlab.dkrz.de:icon/icon-aes.git@83f3dcef81e...\n",
       "    title:                   ICON simulation\n",
       "    institution:             Max Planck Institute for Meteorology/Deutscher W...\n",
       "    grid_file_uri:           http://icon-downloads.mpimet.mpg.de/grids/public...\n",
       "    number_of_grid_used:     15\n",
       "    CDI:                     Climate Data Interface version 1.8.3rc (http://m...\n",
       "    Conventions:             CF-1.6\n",
       "    intake_esm_dataset_key:  NextGEMS.MPIM-DWD-DKRZ.ICON-SAP-5km.Cycle1.atm.3...
" ], "text/plain": [ "\n", "Dimensions: (time: 1969, cell: 20971520, nv: 3, vertex: 10485762, ne: 6, edge: 31457280, no: 4, nc: 2, max_stored_decompositions: 4, two_grf: 2, cell_grf: 14, max_chdom: 1, edge_grf: 24, vert_grf: 13)\n", "Coordinates:\n", " * time (time) float64 2.02e+07 ... 2.02e+07\n", " clon (cell) float64 ...\n", " clat (cell) float64 ...\n", " vlon (vertex) float64 ...\n", " vlat (vertex) float64 ...\n", " elon (edge) float64 ...\n", " elat (edge) float64 ...\n", "Dimensions without coordinates: cell, nv, vertex, ne, edge, no, nc, max_stored_decompositions, two_grf, cell_grf, max_chdom, edge_grf, vert_grf\n", "Data variables: (12/92)\n", " prw (time, cell) float32 dask.array\n", " clon_vertices (cell, nv) float64 ...\n", " clat_vertices (cell, nv) float64 ...\n", " vlon_vertices (vertex, ne) float64 ...\n", " vlat_vertices (vertex, ne) float64 ...\n", " elon_vertices (edge, no) float64 ...\n", " ... ...\n", " edge_dual_normal_cartesian_x (edge) float64 ...\n", " edge_dual_normal_cartesian_y (edge) float64 ...\n", " edge_dual_normal_cartesian_z (edge) float64 ...\n", " cell_circumcenter_cartesian_x (cell) float64 ...\n", " cell_circumcenter_cartesian_y (cell) float64 ...\n", " cell_circumcenter_cartesian_z (cell) float64 ...\n", "Attributes:\n", " uuidOfHGrid: 0f1e7d66-637e-11e8-913b-51232bb4d8f9\n", " references: see MPIM/DWD publications\n", " history: /work/mh0287/k203123/GIT/icon-aes-dyw3/bin/icon ...\n", " intake_esm_varname: ['prw']\n", " source: git@gitlab.dkrz.de:icon/icon-aes.git@83f3dcef81e...\n", " title: ICON simulation\n", " institution: Max Planck Institute for Meteorology/Deutscher W...\n", " grid_file_uri: http://icon-downloads.mpimet.mpg.de/grids/public...\n", " number_of_grid_used: 15\n", " CDI: Climate Data Interface version 1.8.3rc (http://m...\n", " Conventions: CF-1.6\n", " intake_esm_dataset_key: NextGEMS.MPIM-DWD-DKRZ.ICON-SAP-5km.Cycle1.atm.3..." ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = merge_grid(next(iter(d.values())))\n", "ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we select a 1° x 1° region such that we'll have a chance to actually see some triangles.\n", "In ICON terminology, a triangle is a \"cell\". So we can select our desired triangles based on the cell-latitude and cell-logitude." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "mask = (\n", " (ds.clat.values > np.deg2rad(0))\n", " & (ds.clat.values < np.deg2rad(1))\n", " & (ds.clon.values > np.deg2rad(-60))\n", " & (ds.clon.values < np.deg2rad(-59))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each of the selected cell, we need the indices of the three corners of the triangles (the `tris` array from above). In ICON grid files, this array is called `vertex_of_cell`. It also is transposed and uses Fortran-indexing (which starts counting by one). Let's load this array for our selected region and correct for the index offset:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "voc = ds.vertex_of_cell.T[mask].values - 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also want to know the bounding box of our triangles to properly set the extent of our plot. We could use the range which we used above to select our triangles, but then we couldn't apply the example to other selections. Furthermore, here we are interested in the bounding box of the triangle corners not the triangle centers.\n", "\n", "So what we'll do is to find out which vertices actually are used by any of the selected triangles:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "used_vertices = np.unique(voc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compute the extent of our plot:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "lat_min = ds.vlat[used_vertices].min().values\n", "lat_max = ds.vlat[used_vertices].max().values\n", "lon_min = ds.vlon[used_vertices].min().values\n", "lon_max = ds.vlon[used_vertices].max().values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we are all set and can do our little plot." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.tripcolor(ds.vlon, ds.vlat, voc, ds.prw.isel(time=100, cell=mask).values)\n", "plt.xlim(lon_min, lon_max)\n", "plt.ylim(lat_min, lat_max)\n", "plt.colorbar()" ] } ], "metadata": { "jupytext": { "formats": "ipynb,md:myst" }, "kernelspec": { "display_name": "Python 3 unstable (using the module python3/unstable)", "language": "python", "name": "python3_unstable" }, "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.6" } }, "nbformat": 4, "nbformat_minor": 4 }