{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Global Forecasting System - Meteorological forecast" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import xarray\n", "import pandas as pd\n", "import mikeio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The file `gfs_wind.nc` contains a small sample of the [GFS](https://nomads.ncep.noaa.gov/) forecast data downloaded via their OpenDAP service" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "ds = xarray.open_dataset('../tests/testdata/gfs_wind.nc')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Running a Mike 21 HD model, needs at least three variables of meteorological forcing\n", "* Mean Sea Level Pressure\n", "* U 10m\n", "* V 10m" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'msletmsl' (time: 3, lat: 41, lon: 21)>\n",
       "array([[[101116.35 , 101134.555, ..., 101474.15 , 101485.35 ],\n",
       "        [101122.95 , 101141.75 , ..., 101498.35 , 101509.15 ],\n",
       "        ...,\n",
       "        [101972.555, 102048.35 , ..., 101975.15 , 101966.15 ],\n",
       "        [102029.555, 102074.95 , ..., 101970.75 , 101953.15 ]],\n",
       "\n",
       "       [[100923.02 , 100932.43 , ..., 101305.43 , 101316.43 ],\n",
       "        [100940.625, 100945.625, ..., 101329.83 , 101343.625],\n",
       "        ...,\n",
       "        [101875.43 , 101861.83 , ..., 101870.83 , 101875.83 ],\n",
       "        [101912.43 , 101898.02 , ..., 101860.83 , 101876.83 ]],\n",
       "\n",
       "       [[101001.36 , 101014.555, ..., 101453.76 , 101465.555],\n",
       "        [101002.96 , 101017.96 , ..., 101513.36 , 101522.76 ],\n",
       "        ...,\n",
       "        [101853.36 , 101859.16 , ..., 101855.555, 101863.555],\n",
       "        [101870.36 , 101869.96 , ..., 101866.36 , 101870.96 ]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n",
       "  * lat      (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n",
       "  * lon      (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n",
       "Attributes:\n",
       "    long_name:  ** mean sea level mslp (eta model reduction) [pa] 
" ], "text/plain": [ "\n", "array([[[101116.35 , 101134.555, ..., 101474.15 , 101485.35 ],\n", " [101122.95 , 101141.75 , ..., 101498.35 , 101509.15 ],\n", " ...,\n", " [101972.555, 102048.35 , ..., 101975.15 , 101966.15 ],\n", " [102029.555, 102074.95 , ..., 101970.75 , 101953.15 ]],\n", "\n", " [[100923.02 , 100932.43 , ..., 101305.43 , 101316.43 ],\n", " [100940.625, 100945.625, ..., 101329.83 , 101343.625],\n", " ...,\n", " [101875.43 , 101861.83 , ..., 101870.83 , 101875.83 ],\n", " [101912.43 , 101898.02 , ..., 101860.83 , 101876.83 ]],\n", "\n", " [[101001.36 , 101014.555, ..., 101453.76 , 101465.555],\n", " [101002.96 , 101017.96 , ..., 101513.36 , 101522.76 ],\n", " ...,\n", " [101853.36 , 101859.16 , ..., 101855.555, 101863.555],\n", " [101870.36 , 101869.96 , ..., 101866.36 , 101870.96 ]]], dtype=float32)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n", " * lat (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n", " * lon (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n", "Attributes:\n", " long_name: ** mean sea level mslp (eta model reduction) [pa] " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds.msletmsl" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'ugrd10m' (time: 3, lat: 41, lon: 21)>\n",
       "array([[[ 1.021836,  1.151836, ..., -4.318164, -4.228164],\n",
       "        [ 1.731836,  1.361836, ..., -4.408164, -4.138164],\n",
       "        ...,\n",
       "        [-2.328164, -0.578164, ...,  0.111836,  1.381836],\n",
       "        [-1.368164, -0.248164, ...,  2.521836,  3.361836]],\n",
       "\n",
       "       [[-1.186663, -0.896663, ..., -4.376663, -4.216662],\n",
       "        [-0.516663, -0.106663, ..., -4.476663, -4.386662],\n",
       "        ...,\n",
       "        [-2.176662, -3.376662, ...,  2.673337,  3.193337],\n",
       "        [-1.596663, -2.376662, ...,  2.923337,  3.493337]],\n",
       "\n",
       "       [[-3.289988, -3.199988, ..., -5.399988, -5.479988],\n",
       "        [-3.449988, -3.719988, ..., -7.419988, -6.809988],\n",
       "        ...,\n",
       "        [-2.629988, -3.189988, ...,  2.280012,  2.160012],\n",
       "        [-1.719988, -2.939988, ...,  2.620012,  2.800012]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n",
       "  * lat      (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n",
       "  * lon      (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n",
       "Attributes:\n",
       "    long_name:  ** 10 m above ground u-component of wind [m/s] 
" ], "text/plain": [ "\n", "array([[[ 1.021836, 1.151836, ..., -4.318164, -4.228164],\n", " [ 1.731836, 1.361836, ..., -4.408164, -4.138164],\n", " ...,\n", " [-2.328164, -0.578164, ..., 0.111836, 1.381836],\n", " [-1.368164, -0.248164, ..., 2.521836, 3.361836]],\n", "\n", " [[-1.186663, -0.896663, ..., -4.376663, -4.216662],\n", " [-0.516663, -0.106663, ..., -4.476663, -4.386662],\n", " ...,\n", " [-2.176662, -3.376662, ..., 2.673337, 3.193337],\n", " [-1.596663, -2.376662, ..., 2.923337, 3.493337]],\n", "\n", " [[-3.289988, -3.199988, ..., -5.399988, -5.479988],\n", " [-3.449988, -3.719988, ..., -7.419988, -6.809988],\n", " ...,\n", " [-2.629988, -3.189988, ..., 2.280012, 2.160012],\n", " [-1.719988, -2.939988, ..., 2.620012, 2.800012]]], dtype=float32)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n", " * lat (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n", " * lon (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n", "Attributes:\n", " long_name: ** 10 m above ground u-component of wind [m/s] " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds.ugrd10m" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'vgrd10m' (time: 3, lat: 41, lon: 21)>\n",
       "array([[[-0.474941, -0.634941, ..., -1.244941, -1.254941],\n",
       "        [-1.124941, -0.504941, ..., -1.014941, -1.224941],\n",
       "        ...,\n",
       "        [-0.454941,  1.145059, ...,  1.505059,  1.635059],\n",
       "        [ 1.695059,  2.595058, ...,  1.645059,  1.805059]],\n",
       "\n",
       "       [[-4.673393, -3.993393, ..., -2.993393, -3.323394],\n",
       "        [-4.393394, -4.633393, ..., -2.723393, -3.213393],\n",
       "        ...,\n",
       "        [-0.593394,  0.456606, ...,  0.616606, -0.323394],\n",
       "        [ 0.046606,  1.156606, ...,  0.066606, -1.213394]],\n",
       "\n",
       "       [[-2.777568, -3.487568, ..., -4.187568, -4.807568],\n",
       "        [-1.427568, -1.767568, ..., -5.827568, -6.177568],\n",
       "        ...,\n",
       "        [-1.707568, -1.177568, ..., -2.307568, -2.357568],\n",
       "        [-2.577568, -1.327568, ..., -2.947568, -3.897568]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n",
       "  * lat      (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n",
       "  * lon      (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n",
       "Attributes:\n",
       "    long_name:  ** 10 m above ground v-component of wind [m/s] 
" ], "text/plain": [ "\n", "array([[[-0.474941, -0.634941, ..., -1.244941, -1.254941],\n", " [-1.124941, -0.504941, ..., -1.014941, -1.224941],\n", " ...,\n", " [-0.454941, 1.145059, ..., 1.505059, 1.635059],\n", " [ 1.695059, 2.595058, ..., 1.645059, 1.805059]],\n", "\n", " [[-4.673393, -3.993393, ..., -2.993393, -3.323394],\n", " [-4.393394, -4.633393, ..., -2.723393, -3.213393],\n", " ...,\n", " [-0.593394, 0.456606, ..., 0.616606, -0.323394],\n", " [ 0.046606, 1.156606, ..., 0.066606, -1.213394]],\n", "\n", " [[-2.777568, -3.487568, ..., -4.187568, -4.807568],\n", " [-1.427568, -1.767568, ..., -5.827568, -6.177568],\n", " ...,\n", " [-1.707568, -1.177568, ..., -2.307568, -2.357568],\n", " [-2.577568, -1.327568, ..., -2.947568, -3.897568]]], dtype=float32)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2021-09-02T12:00:00 ... 2021-09-02T18:00:00\n", " * lat (lat) float64 30.0 30.25 30.5 30.75 31.0 ... 39.25 39.5 39.75 40.0\n", " * lon (lon) float64 10.0 10.25 10.5 10.75 11.0 ... 14.25 14.5 14.75 15.0\n", "Attributes:\n", " long_name: ** 10 m above ground v-component of wind [m/s] " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds.vgrd10m" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ds.ugrd10m[0].plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convert to dfs2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Time" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2021-09-02 12:00:00', '2021-09-02 15:00:00',\n", " '2021-09-02 18:00:00'],\n", " dtype='datetime64[ns]', freq=None)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time = pd.DatetimeIndex(ds.time)\n", "time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variable types" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Air Pressure" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mikeio.EUMType.Air_Pressure" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[hectopascal, millibar]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mikeio.EUMType.Air_Pressure.units" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Wind Velocity" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mikeio.EUMType.Wind_Velocity" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[meter per sec, feet per sec, miles per hour, km per hour, knot]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mikeio.EUMType.Wind_Velocity.units" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "mslp = ds.msletmsl.values / 100 # conversion from Pa to hPa\n", "u = ds.ugrd10m.values\n", "v = ds.vgrd10m.values" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "x: [10, 10.25, ..., 15] (nx=21, dx=0.25)\n", "y: [30, 30.25, ..., 40] (ny=41, dy=0.25)\n", "projection: LONG/LAT" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geometry = mikeio.Grid2D(x=ds.lon.values, y=ds.lat.values, projection=\"LONG/LAT\")\n", "geometry" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from mikeio import ItemInfo, EUMType, EUMUnit\n", "\n", "mslp_da = mikeio.DataArray(data=mslp,time=time, geometry=geometry, item=ItemInfo(\"Mean Sea Level Pressure\", EUMType.Air_Pressure, EUMUnit.hectopascal))\n", "u_da = mikeio.DataArray(data=u,time=time, geometry=geometry, item=ItemInfo(\"Wind U\", EUMType.Wind_Velocity, EUMUnit.meter_per_sec))\n", "v_da = mikeio.DataArray(data=v,time=time, geometry=geometry, item=ItemInfo(\"Wind V\", EUMType.Wind_Velocity, EUMUnit.meter_per_sec))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "dims: (time:3, y:41, x:21)\n", "time: 2021-09-02 12:00:00 - 2021-09-02 18:00:00 (3 records)\n", "geometry: Grid2D (ny=41, nx=21)\n", "items:\n", " 0: Mean Sea Level Pressure (hectopascal)\n", " 1: Wind U (meter per sec)\n", " 2: Wind V (meter per sec)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mds = mikeio.Dataset([mslp_da, u_da, v_da])\n", "mds" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "mds.to_dfs(\"gfs.dfs2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clean up (don't run this)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.remove(\"gfs.dfs2\")" ] } ], "metadata": { "interpreter": { "hash": "f4041ee05ab07c15354d6207e763f17a216c3f5ccf08906343c2b4fd3fa7a6fb" }, "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.10" } }, "nbformat": 4, "nbformat_minor": 4 }