diff --git a/7_glaciares_facticos.ipynb b/7_glaciares_facticos.ipynb index 2434fd6..46071e2 100644 --- a/7_glaciares_facticos.ipynb +++ b/7_glaciares_facticos.ipynb @@ -191,7 +191,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Vamos a analizar esta simulación" + "### Vamos a analizar esta simulación" ] }, { @@ -253,7 +253,7 @@ "El glaciar pierde masa durante la fase de retroceso, y despues se mantiene mas o menos constante en la fase de equilibrio.\n", "\n", "Esta nos enseña que los glaciares en equilibrio no son proveedores netos de agua: \n", - "Ellos ganan tanta masa como pierden. En el concepto de \"pico de suministro de agua\" de Huss: Hintereisferner ya está en \"pico de suministro de agua\" en esta carrera de compromiso. En un clima más cálido, Hintereisferner podría tener un pico de suministro de agua más adelante.\n", + "Ellos ganan tanta masa como pierden. En el concepto de \"pico de suministro de agua\" de Huss y Hock: Hintereisferner ya está en \"pico de suministro de agua\" en esta carrera de compromiso. En un clima más cálido, Hintereisferner podría tener un pico de suministro de agua más adelante.\n", "\n", "![Huss_Hock-peak_water](https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41558-017-0049-x/MediaObjects/41558_2017_49_Fig1_HTML.jpg)\n", "\n", @@ -384,7 +384,7 @@ "### Juego\n", "\n", "**¿A qué distancia del equilibrio está este glaciar?**\n", - "Es decir, que sesgo de temperatura sería necesario para mantener este glaciar en equilibrio? Prueba varias valores de \"temp_bias\" para explorar.\n", + "Es decir, que sesgo de temperatura sería necesario para mantener este glaciar en equilibrio? Prueba varias valores de `temp_bias` para explorar.\n", "\n", "Para Hintereisferner, -0.8°C no está suficiente! \n", "\n", @@ -453,21 +453,21 @@ "metadata": { "hide_input": false, "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.17" + "pygments_lexer": "ipython3", + "version": "3.8.3" }, "toc": { "base_numbering": 1, @@ -484,5 +484,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/English/7_glaciers_water.ipynb b/English/7_simulating_real_glaciers.ipynb similarity index 89% rename from English/7_glaciers_water.ipynb rename to English/7_simulating_real_glaciers.ipynb index 8ef8819..05209c9 100644 --- a/English/7_glaciers_water.ipynb +++ b/English/7_simulating_real_glaciers.ipynb @@ -18,14 +18,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "A couple of real-world OGGM cases for Lizz" + "Our previous notebooks showed how to use OGGM to explore theoretical questions about glaciers: the effect of a different bed slope, the equilibrium line altitude, the mass balance gradient, etc. Now how do we use OGGM to explore real-world glaciers? This notebook gives us some tools." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Set-up " + "## The essentials" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We import our modules. This notebook requires different modules that we have not used before:" ] }, { @@ -61,21 +68,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Define the glacier we will play with" + "### Defining the glacier we'll explore" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For this notebook we use the Shallap Glacier, Cordillera Blanca. Some other possibilities to play with:\n", + "In this example we use the Hintereisferner glacier, Austria. Other options are:\n", "\n", "- Shallap Glacier: RGI60-16.02207\n", "- Artesonraju: RGI60-16.02444 ([reference glacier](https://cluster.klima.uni-bremen.de/~github/crossval/1.1.2.dev45+g792ae9c/web/RGI60-16.02444.html))\n", "- Hintereisferner: RGI60-11.00897 ([reference glacier](https://cluster.klima.uni-bremen.de/~github/crossval/1.1.2.dev45+g792ae9c/web/RGI60-11.00897.html))\n", "- Columbia: RGI60-02.18415 ([reference glacier](https://cluster.klima.uni-bremen.de/~github/crossval/1.1.2.dev45+g792ae9c/web/RGI60-02.18415.html))\n", "\n", - "And virtually any glacier you can find the RGI Id from, e.g. in the [GLIMS viewer](https://www.glims.org/maps/glims)" + "And we can simulate virtually any glacier for which we can find an RGI ID, for example from the [GLIMS viewer](https://www.glims.org/maps/glims). Maybe you can find the RGI ID of \"your\" reference glacier there?" ] }, { @@ -94,7 +101,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Interactive glacier map " + "## Interactive map of the glacier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This will download some data and take some time at first call\n", + "sh = utils.get_rgi_glacier_entities([rgi_id])" ] }, { @@ -103,7 +120,6 @@ "metadata": {}, "outputs": [], "source": [ - "sh = utils.get_rgi_glacier_entities([rgi_id])\n", "(gv.Shape(sh.geometry.iloc[0]).opts(fill_color=None) *\n", " gts.tile_sources['EsriImagery'] * gts.tile_sources['StamenLabels']).opts(width=800, height=500, active_tools=['pan','wheel_zoom'])" ] @@ -112,14 +128,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prepare the run" + "## Preparing the model run" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This can take a few minutes on the first call because of data download:" + "This may take a few minutes at first, due to the data download." ] }, { @@ -145,14 +161,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## \"Commitment run\" " + "## \"Committed change\" simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This runs a simulation for 300 yrs under a random climate based on the 1985-2015 period (randomly picking years in this period):" + "This cell below runs a simulation for 300 years in a climate based on the period 1985-2015 (randomly selected years from this period):" ] }, { @@ -175,7 +191,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Let's analyse the simulation first " + "### Let's analyze this simualation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We graph the length of the glacier (`length_m`), its volume (` volume_m3`), and the change in its water storage (`delta_water_m3`) during the simulation:" ] }, { @@ -196,14 +219,17 @@ "f, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(16, 4))\n", "df[['length_m']].plot(ax=ax1)\n", "df[['volume_m3']].plot(ax=ax2)\n", - "df[['delta_water_m3']].plot(ax=ax3);" + "df[['delta_water_m3']].plot(ax=ax3);\n", + "ax1.set(xlabel='Simulation time [yr]', ylabel='Glacier length [m]');\n", + "ax2.set(xlabel='Simulation time [yr]', ylabel='Glacier volume [m$^{3}$ ice]');\n", + "ax3.set(xlabel='Simulation time [yr]', ylabel='Change in water storage [m$^{3}$ water]');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The volume storage change as monthy timeseries isn't very informative. Let's compute annual sums first:" + "The change in water storage in this form does not tell us much. So, we calculate annual sums:" ] }, { @@ -215,7 +241,8 @@ "annual = df.delta_water_m3.groupby(df.index.astype(int)).sum()\n", "ax = annual.plot(label='annual average');\n", "annual.rolling(30, min_periods=30, center=True).mean().plot(ax=ax, label='30 years rolling average');\n", - "plt.axhline(y=0, color='k', ls=':')\n", + "plt.axhline(y=0, color='k', ls=':');\n", + "plt.ylabel('Change in water stored [m$^{-1}$]');\n", "plt.legend();" ] }, @@ -223,13 +250,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So the glacier is losing mass in the retreat phase, then more or less constant in the equilbrium phase. This illustrates well that glaciers in equilibrium are not net water resource: they gain as much mass as they give back. In the \"peak water\" concept of Huss: Hintereisferner is already at \"peak water\" in this commitment run. In a warming climate, Hintereisferner might have peak water later on. \n", + "The glacier loses mass during the retreat phase, and then remains more or less constant in the equilibrium phase.\n", "\n", - "**EHU: Okay, so the 'retreat phase' for HEF is the first 75 years or so? The plot is not very intuitive to me...the y-axis is something like water storage anomaly in m3? So it is initially strongly negative then creeps up to around 0, and that is the new equilibrium?**\n", + "This shows us that glaciers in equilibrium are not net providers of water:\n", + "They gain as much mass as they lose. In Huss and Hock's \"peak water supply\" concept: Hintereisferner is already at \"peak water supply\" in the committed climate pathway. In a warmer climate, Hintereisferner could have a water supply spike later on.\n", "\n", - "**Fabi: yes, the retreat phase is most visilble on the length and volume plots. About 70 years. \"equilibrium\" is indeed the moment where volume and length oscillate around a value. I've chosen to use random climate instead of constant one, because I think it conveys that in real life glaciers are never in true equilibrium. They always change, but if the climate doesn't change (no trends), there is a sort of equilibrium. Regarding the variable delta_water_m3: it's the glacier volume change per time step in units of m3 of water per month (or per year after agregation on the lower plot). So during retreat the glacier loses mass, and then in a constant climate the glacier gains and loses mass but on 30-yr average its a zero sum for water resources.**\n", + "![Huss_Hock-peak_water](https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41558-017-0049-x/MediaObjects/41558_2017_49_Fig1_HTML.jpg)\n", "\n", - "It is worth looking at the annual cycle as well:" + "It is also interesting to analyze the annual cycle:" ] }, { @@ -251,7 +279,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Let's try to put this in the climate context " + "## The climate context" ] }, { @@ -273,23 +301,29 @@ "dfs[['delta_water_m3']].plot(ax=ax1);\n", "dfc[['temp_celcius']].plot(ax=ax2);\n", "dfc[['prcp_mm_mth']].plot(ax=ax3);\n", - "ax3.set_ylim(0); # just to see the zero" + "ax3.set_ylim(0); # just to see the zero\n", + "ax1.axhline(0, ls=':', color='k', alpha=0.5) # to see the pos/neg months\n", + "ax1.set(xlabel='Month', ylabel='Change in water storage [m$^{3}$ water]');\n", + "ax2.set(xlabel='Month', ylabel='Temperature [deg C]');\n", + "ax3.set(xlabel='Month', ylabel='Precipitation [mm/month]');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For Hintereisferner this is quite easy: it melts in summer, accumulates in winter. The glacier is a source of water in summer as it releases the water accumulated in winter.\n", + "**What do we see in this graph?**\n", + "\n", + "For Hintereisferner this is quite basic: it melts in summer, accumulates in winter. The glacier is a source of water in summer, as it releases accumulated water in winter.\n", "\n", - "Other climates are more complex! And the temperature index model is also quite controversial in the tropics." + "Other climates (for example the tropical climate) are more complex!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Run another simulation with a temperature bias " + "## Simulation with a temperature bias" ] }, { @@ -315,7 +349,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "And see how the results differ from the commitment simualtion:" + "We see how these results differ from those of the \"obligation\" simulation:" ] }, { @@ -347,13 +381,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So here, a funny game for several glaciers in the world would be to find out how much in desequilibrium they are, i.e. make the students try several temperature biases and realise how much colder it should be for the glaciers to keep their present geometry. \n", + "### Game\n", "\n", - "**EHU: the indicator of this would be keeping somewhat constant length/vol?**\n", + "**How far from equilibrium is this glacier?**\n", + "That is, what temperature bias would be necessary to keep this glacier in balance? Try various `temp_bias` values to explore.\n", "\n", - "**Fabi: yes, so here the target would be to have a length/volume close to the starting value (at year 0).**\n", + "For Hintereisferner, -0.8 ° C is not enough!\n", "\n", - "For Hintereisferner, 0.8°C is not enough! Note that \"present\" is the date of the RGI outline:" + "We note that the \"current\" year (with which we compare the future state) is the year of the RGI outline:" ] }, { @@ -369,7 +404,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the third plot above a funny thing is visible: in a colder climate, the glacier is much bigger, but the annual water storage change is very similar to the small glacier! How is this possible? Let's see: " + "In the third graph above, we see something funny: in colder climate, the glacier is much larger, but the annual change in water storage is very similar to that of the small glacier.\n", + "\n", + "How is this possible? Let's see:" ] }, { @@ -389,33 +426,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This is complex but makes sense: larger glaciers are thicker and higher, they accumulate more mass in winter and their mass turnover is larger. In summer, they reach farther down valley and their ablation area is larger, thus more melt. On the annual average a net zero, but seasonality is different.\n", + "This is complex but makes sense: the largest glaciers are thicker and taller, they accumulate more mass in winter and their volume of mass changes is greater. In summer, they reach further down the valley and their ablation area is larger, therefore more melted. In the annual these average to very small net changes, but the seasonality is different.\n", "\n", - "**EHU: Yes, makes sense. This is an example where students should look at the plot of annual cycle \"storage change\" and reason through what this means for water resources. Broadly speaking if you are a human downstream stakeholder (farmer, power plant) you want the bigger glacier and its enhanced seasonality because it means more runoff in the melting season. Will have to think about how to present this.**\n", + "**What does this mean for the water supply below?**\n", "\n", - "**Fabi: I think it depends on the local conditions - stronger cycle can mean more floods in certain areas. In arid tropics you want the runoff to happen during dry season, etc. One of the key message really is that a \"healthy\" equilibirum glacier is a zero sum as water reservoir but an excellent buffer, which usefulness depends on stakeholders as you say.**" + "Can you think of certain parts of the hydro-social system that would like bigger changes? Smaller changes?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Some ideas for more experiments" + "## Other experiments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "There is quite a lot of potential for teaching here I think - let's discuss on slack" + "- Explore other glaciers\n", + "- Compare \"your\" reference glacier with another. How do they differ? How are they similar? Why?\n", + "- ... you can add!" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -435,7 +467,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.7" + "version": "3.8.3" }, "toc": { "base_numbering": 1, @@ -452,5 +484,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 }