{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ENV/ATM 415: Climate Laboratory\n", "\n", "[Brian E. J. Rose](http://www.atmos.albany.edu/facstaff/brose/index.html), University at Albany\n", "\n", "# Assignment 2\n", "\n", "## Due Thursday February 22, 2018" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Make a copy of this notebook file so you can add your answers in additional cells.\n", "- Complete all the problems below. \n", "- For the questions that require calculation, show your code.\n", "- Include comments in your code to explain your method as necessary.\n", "- For text answers, use `Markdown` cells rather than `Code` cells.\n", "- Submit your solutions in a single Jupyter notebook that contains your text, your code, and your figures.\n", "- *Try to make sure that your notebook runs cleanly without errors:*\n", " - Save your notebook\n", " - From the `Kernel` menu, select `Restart & Run All`\n", " - Did the notebook run from start to finish without error and produce the expected output?\n", " - If yes, save again and submit your notebook file\n", " - If no, fix the errors and try again.\n", "- Save your notebook as `[your last name].ipynb`, e.g. my notebook should be called `Rose.ipynb`. *This makes it easier for me when I collect all your answers*\n", "- Submit your answers by email before class on **Thursday February 22 2018**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Primer section 2.7, Review question 1\n", "\n", "List all the components that *must* be included in a climate model and then add to this list a set of components that *could be* incorporated. How have you differentiated between the 'must' and the 'could be' components? Can you think of a different type of climate model for which you write a different list of 'must include' components? If you can, what does that mean?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Your answer here*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Primer section 2.7, Discussion question 3\n", "\n", "Climate 'sensitivity' and climatic 'feedback' are two fundamental concepts in climate science and hence in climate modelling. If asked to explain these two terms, would your explanation use one to define the other? If you linked them, why did you, and, if you did not, why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Your answer here*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Question 3: CO$_2$-driven warming in the CESM\n", "\n", "Here you will use our slab-ocean version of the CESM to investigate a CO$_2$-driven global warming scenario.\n", "\n", "Specifically, you will compare the pre-industrial control simulation and the 2xCO2 simulation (after it has reached its new, warmer equilibrium).\n", "\n", "The two model output files you need are the control run:\n", "\n", "`som_1850_f19.cam.h0.clim.nc`\n", "\n", "and the doubled CO2 run:\n", "\n", "`som_1850_2xCO2.cam.h0.clim.nc`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Calculate the **Equilibrium Climate Sensitivity** (ECS) for the CESM slab ocean model.\n", "\n", "Recall that this is defined as the *equilibrium increase in the global average surface temperature* after a doubling of CO2." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Calculate the annual, global average **change in ASR** and **change in OLR** after doubling CO2." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Using your results from part (b), what is the net change in energy flux at the top of the atmosphere after doubling CO2? *Use the sign convention that a downward flux (source of energy) is a positive number*." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Comment on anything you find striking, interesting, or unexpected in these global average results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Your answer here*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "e) Now make well-labeled global maps of the **change** in the **annual mean** of these three quantities:\n", "\n", " 1. Surface temperature\n", " 2. ASR\n", " 3. OLR" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(f) Comment on what you found in your maps.\n", "\n", "- Which regions warm more than others?\n", "- Are there any discernible spatial patterns in ASR and OLR changes?\n", "- Comment on anything you find striking, interesting, or unexpected in the maps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Your answer here*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Question 4: Transient adjustment to equilibrium after doubling CO$_2$\n", "\n", "Here we investigate the **transient adjustment to equilibrium**.\n", "\n", "For this, we will use the file\n", "\n", "`som_1850_2xCO2.cam.h0.global.nc`\n", "\n", "This file contains a **monthly timeseries** of the CESM model output from the 2xCO2 model run, which was initialized from the control run. Every variable in this file has *already been averaged globally*. We can use the timeseries to look at the adjustment of the global average temperature and energy budget to the new equilibrium." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Make a well-labeled graph of the timeseries of **global mean surface temperature**." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) You will find that there is a well-defined annual cycle in this temperature. Offer a reasonable hypothesis to explain why such a cycle exists in the simulation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Your answer here*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Make another well-labeled graph of the timeseries of global mean **net change in energy flux at the TOA**." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Comment on anything interesting you learned from these figures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your answer here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Question 5: Verifying the annual cycle in global mean surface temperature against observations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we still study the annual cycle in global mean surface temperature and verify it against observations. For observations, we will use the NCEP Reanalysis data.\n", "\n", "*Reanalysis data is really a blend of observations and output from numerical weather prediction models. It represents our “best guess” at conditions over the whole globe, including regions where observations are very sparse.*\n", "\n", "The necessary data are all served up over the internet. We will look at monthly climatologies averaged over the 30 year period 1981 - 2010.\n", "\n", "The data catalog is here, please feel free to browse: http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis.derived/catalog.html\n", "\n", "**Surface air temperature** is contained in a file called `air.2m.mon.1981-2010.ltm.nc`, which is found in the directory `surface_gauss`. \n", "\n", "Here's a link directly to the catalog page for this data file:\n", "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis.derived/surface_gauss/catalog.html?dataset=Datasets/ncep.reanalysis.derived/surface_gauss/air.2m.mon.1981-2010.ltm.nc\n", "\n", "Now click on the `OPeNDAP` link. A page opens up with lots of information about the contents of the file. The `Data URL` is what we need to read the data into our Python session. For example, this code opens the file and displays a list of the variables it contains:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Dimensions: (lat: 94, lon: 192, nbnds: 2, time: 12)\n", "Coordinates:\n", " * lon (lon) float32 0.0 1.875 3.75 5.625 7.5 9.375 11.25 ...\n", " * time (time) float64 -6.571e+05 -6.57e+05 -6.57e+05 ...\n", " * lat (lat) float32 88.542 86.6531 84.7532 82.8508 80.9473 ...\n", "Dimensions without coordinates: nbnds\n", "Data variables:\n", " climatology_bounds (time, nbnds) float64 ...\n", " air (time, lat, lon) float64 ...\n", " valid_yr_count (time, lat, lon) float64 ...\n", "Attributes:\n", " Conventions: COARDS\n", " title: mean daily NMC reanalysis (1958)\n", " description: Data is from NMC initialized reanalysis\\n...\n", " platform: Model\n", " not_missing_threshold_percent: minimum 3% values input to have non-missi...\n", " history: Created 2011/07/12 by doMonthLTM\\nConvert...\n", " References: http://www.esrl.noaa.gov/psd/data/gridded...\n", " dataset_title: NCEP-NCAR Reanalysis 1\n" ] } ], "source": [ "import xarray as xr\n", "url = \"http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis.derived/surface_gauss/air.2m.mon.1981-2010.ltm.nc\"\n", "ncep_air2m = xr.open_dataset(url, decode_times=False)\n", "\n", "print( ncep_air2m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The temperature data is called `air`. Take a look at the details:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "[216576 values with dtype=float64]\n", "Coordinates:\n", " * lon (lon) float32 0.0 1.875 3.75 5.625 7.5 9.375 11.25 13.125 15.0 ...\n", " * time (time) float64 -6.571e+05 -6.57e+05 -6.57e+05 -6.57e+05 ...\n", " * lat (lat) float32 88.542 86.6531 84.7532 82.8508 80.9473 79.0435 ...\n", "Attributes:\n", " long_name: Monthly Long Term Mean of Air Temperature\n", " valid_range: [ 150. 400.]\n", " units: degK\n", " precision: 2\n", " GRIB_id: 11\n", " GRIB_name: TMP\n", " var_desc: Air temperature\n", " level_desc: 2 m\n", " statistic: Long Term Mean\n", " parent_stat: Mean\n", " actual_range: [ 198.33992004 311.89520264]\n", " dataset: NCEP Reanalysis Derived Products\n", " _ChunkSizes: [ 1 94 192]\n" ] } ], "source": [ "print( ncep_air2m.air)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the dimensions are (12, 94, 192) -- meaning 12 months, 94 latitude points, 192 longitude points. Not the same grid as our model output! \n", "\n", "Think about how you will handle calculating the global average of these data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Make a well-labeled graph of the global observed average surface air temperature. Verify that the annual cycle you found in the CESM simulation also exists in the observations.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }