Group project: the Climate System¶
Instructions¶
Objectives
In this final project, you will apply the methods you learned over the past weeks to answer the questions below.
Deadline
Please submit your project via OLAT before Thursday January 09 at 00H (in the night from Wednesday to Thursday).
Formal requirements
You will work in groups of two. If we are an odd number of students, one group can have three participants. (Tip: We recommend that students who have not followed a programming class to team up with students who have).
Each group will submit one (executed) jupyter notebook containing the code, plots, and answers to the questions (text in the markdown format). Please also submit an HTML version of the notebook. Please ensure that your HTML file is smaller than 10 MB. This helps us provide you with more detailed and readable feedback.
Each group member must contribute to the notebook. The notebook should be self-contained and the answers must be well structured. The plots must be as understandable as possible (title, units, x and y axis labels, appropriate colors and levels…).
Please be concise in your answer. We expect a few sentences per answer at most - there is no need to write a new text book in this project! Use links and references to the literature or your class slides where appropriate.
Grading
We will give one grade per project, according to the following table (total 10 points):
- correctness of the code and the plots: content, legends, colors, units, etc. (3 points)
- quality of the answers: correctness, preciseness, appropriate use of links and references to literature or external resources (5 points)
- originality and quality of the open research question (2 points)
# Import the tools we are going to need today:
import matplotlib.pyplot as plt # plotting library
import numpy as np # numerical library
import xarray as xr # netCDF library
import pandas as pd # tabular library
import cartopy # Map projections libary
import cartopy.crs as ccrs # Projections list
# Some defaults:
#plt.rcParams['figure.figsize'] = (12, 5) # Default plot size
Part 1 - temperature climatology¶
Open the ERA5 temperature data:
ds = xr.open_dataset('ERA5_LowRes_Monthly_t2m.nc')
t2=ds.t2m
Plot three global maps:
- Compute and plot the temporal mean temperature ¯T for the entire period (unit °C)
T2_temp= t2.mean(dim='time')-273.15
ax = plt.axes(projection=ccrs.Robinson())
T2_temp.plot(ax=ax, transform=ccrs.PlateCarree(),cbar_kwargs={'label': '2m Temp(°C)'})
ax.coastlines(); ax.gridlines()
plt.title('Average 2 Meter Temperature from 1979-2018 \n', fontsize=16, fontweight='bold');
- Compute and plot ¯T∗ (see lesson), the zonal anomaly map of average temperature.
T_star= T2_temp-T2_temp.mean(dim='longitude')
ax = plt.axes(projection=ccrs.Robinson())
T_star.plot(ax=ax, transform=ccrs.PlateCarree(),cbar_kwargs={'label': '2m Temp anomaly (°C)'})
ax.coastlines(); ax.gridlines()
plt.title('Zonal anomaly of average Temperature',fontsize=15, fontweight='bold');
- Compute and plot the monthly average temperature for each month ¯TM (annual cycle). We expect a variable of dimensions (month: 12, latitude: 241, longitude: 480). Hint: remember the
.groupby()
command we learned in the lesson. Now plot the average monthly temperature range map, i.e. max(¯TM) - min(¯TM) (maximum and minimum over the month dimension).
weight = np.cos(np.deg2rad(ds.latitude))
weight = weight / weight.sum()
#We were not sure about plotting an average annual cycle. But with the following dimensions (month:12, latitude:241, longitude:480) there is no way of plotting it
T2_mthly= t2.groupby('time.month').mean()
T2mth_weight_znl= (T2_mthly.mean(dim='longitude'))*weight
T2_weight_ts= T2mth_weight_znl.sum(dim='latitude')
(T2_weight_ts-273.15).plot()
plt.title('Average annual Cycle of 2m Temperature\n', fontsize=15, fontweight='bold')
plt.ylabel('2m Temp (°C)');
T2_m_dif= T2_mthly.max(dim='month')-T2_mthly.min(dim='month')
ax = plt.axes(projection=ccrs.Robinson())
T2_m_dif.plot(ax=ax, transform=ccrs.PlateCarree(),cbar_kwargs={'label': 'Temperature Range (°C)'})
ax.coastlines(); ax.gridlines()
plt.title('Annual Temperature Range\n',fontsize=15, fontweight='bold');
Questions:
- Look at the zonal temperature anomaly map.
- Explain why northern Europe and the North Atlantic region is significantly warmer than the same latitudes in North America or Russia.
- Explain why the Northern Pacific Ocean does not have a similar pattern.
Answer: -We have the Gulf stream bringing warm temperatures from the tropics to the atlantic and europe. But we think the heat capacity of the ocean plays a bigger role. Oceans in general aren't experiencing big differences in Temperature over the Year as land does. And because there is a westwind blowing there will be blown warmer air from the ocean onto the land in winter and this results in a positive zonal temp anomaly. We think the warming in the winter is way stronger than the cooling in the summer from the ocean. Russia and NA have a more continental climate and there is less of a barrier to the movement of cold Arctic air.
- The winds over the Northern Pacific carry air from the pacific ocean westward onto the western coasts of North America. These winds, however, do not penetrate very far inland because of the Rocky Mountains, which block the warm maritime air and limit its influence on the interior of the continent. Although similar, the Kuroshio Current in the Pacific does not extend as far north and carries less heat to high latitudes. The result of this weaker northward transport of warm water is that the Northern Pacific does not moderate temperatures in the same way the North Atlantic does.
- Look at the average monthly temperature range map.
- Explain why the temperature range is smaller in the tropics than at higher latitudes
- Explain why the temperature range is smaller over oceans than over land
- Where is the temperature range largest? Explain why.
Answer:
In the tropics we have an almost constant solar input throughout the year whereas in higher lats we have a big shift in the solar input throughout the year which explains why we have seasons in general. Also the daylength is varying a lot in higher lats which also results in a big energy range inducing a big temp range.This can be explained by the tilt of the earth.
The ocean has a higher heat capacity as explained above. The solar energy can penetrate way further in the ocean (~10m) than on land (~2m) and therefore creates less of perturbations throughout the year. The ocean can also distribute the energy easier in the form of mixing.
The largest Temp range is located in Siberia/North-East Russia. THis is because of the continentality, i.e. there is no significant ocean close by(especially not westwards) where warm marine winds could heat up the land. In winter there is very few sunlight and as we know land loses energy way faster than water so it can get up to -60°C. Whereas in summer there is way more sunlight and bc of the small heat capacity, only few energy is needed to heat up the land. Also in winter there is the "siberian high" which is inducing clear sky so there is a lot of radiative cooling due to the nights being way longer than the days
Part 2 - Precipitation climatology¶
Open the precipitation file and explore it. The units of monthly precipitation are wrongly labeled (unfortunately). They should read: m per day.
ds = xr.open_dataset('ERA5_LowRes_Monthly_tp.nc')
prec=ds.tp
ds
<xarray.Dataset> Size: 444MB Dimensions: (longitude: 480, latitude: 241, time: 480) Coordinates: * longitude (longitude) float32 2kB -179.6 -178.9 -178.1 ... 178.9 179.6 * latitude (latitude) float32 964B 90.0 89.25 88.5 ... -88.5 -89.25 -90.0 * time (time) datetime64[ns] 4kB 1979-01-01 1979-02-01 ... 2018-12-01 Data variables: tp (time, latitude, longitude) float64 444MB ... Attributes: Conventions: CF-1.6 history: 2019-11-18 09:30:18 GMT by grib_to_netcdf-2.14.0: /opt/ecmw...
Using .groupby()
, compute the average daily precipitation for each month of the year (We expect a variable of dimensions (month: 12, latitude: 241, longitude: 480)). Convert the units to mm per day. Plot a map of average daily precipitation in January and in August with the levels [0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40]
and the colormap `YlGnBu'_
pre_mthly= prec.groupby('time.month').mean()
pre_mthly_mm=pre_mthly*1000
levels= [0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40]
fig, axes = plt.subplots(2, 1, figsize=(15, 10), subplot_kw={'projection': ccrs.Robinson()})
fig.suptitle('Average Daily Precipitation \n',fontsize=15, fontweight='bold')
# January
jan = pre_mthly_mm.sel(month=1)
jan.plot(ax=axes[0], cmap='YlGnBu', transform=ccrs.PlateCarree(),cbar_kwargs={'label': 'Precipitation(mm)'})
axes[0].coastlines(); axes[0].gridlines()
axes[0].set_title('January')
#August
aug= pre_mthly_mm.sel(month=8)
aug.plot(ax=axes[1],cmap='YlGnBu', transform=ccrs.PlateCarree(), cbar_kwargs={'label':'Precipitation(mm)'})
axes[1].coastlines(); axes[1].gridlines()
axes[1].set_title('August');
Questions:
- Describe the location of the ITCZ in January and August. Without going into the details, explain (in one or two sentences)
Answer: The ITCZ in January is a more south than in August. This is because the ITCZ is following the sun's zenith. There are perturbations of a straight line because of the differences of land masses and oceans. The straight line would go through the Tropics either north(Aug) or south(jan) of the equator.
- Describe the precipitation seasonality in West Africa and in India. Name the phenomenon at play.
Answer: In west Africa there is the seasonal effect of the 'West African Monsoon'. Because in NH summer there is southwest wind which blows all the humidity onto land leading to precipitation in west Africa. In Winter there is a dry norhteast wind resulting in dry conditions and therefore the ITCZ shifts more to the south there. India experiences the 'southern Asia summer monsoon' which is caused by the different heat capacities and the resulting season shift of the wind. In summer the wind blows from the ocean to the land bringing in the precipitation because lands heat up faster creating a Low. In winter the wind comes from the Northeast bringing dry conditions from inland.
Part 3: sea-level pressure and surface winds¶
Open the file containing the surface winds (u10
and v10
) and sea-level pressure (msl
).
ds = xr.open_dataset('ERA5_LowRes_Monthly_uvslp.nc')
msl=ds.msl
u=ds.u10
v=ds.v10
Compute [¯SLP] (the temporal and zonal average of sea-level pressure). Convert it to hPa, and plot it (line plot). With the help of plt.axhline, add the standard atmosphere pressure line to the plot to emphasize high and low pressure regions. Repeat with [¯u10] and [¯v10] (in m s−1) and add the 0 horizontal line to the plot (to detect surface westerlies from easterlies for example).
Variables:
SLP= msl.mean(dim=['time','longitude']) #temporal and zonal avg
SLP=SLP/100 #convert to hpa
u_mean = u.mean(dim=['time', 'longitude']) #same with wind
v_mean = v.mean(dim=['time', 'longitude'])
Plots:
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(10, 10))
#MSL Plot
SLP.plot(ax=axes[0], label='SLP (hPa)')
axes[0].axhline(1013.25,color='r', linestyle='--', label='1 atm (1013.25)')
axes[0].legend()
axes[0].set_title('\nZonal Mean of Sea-Level Pressure', fontsize=14, fontweight='bold')
#U-Wind Plot
u_mean.plot(ax=axes[1], label='U-Wind(m/s)')
axes[1].axhline(0, color='black', linestyle='--',label='No Wind')
axes[1].legend()
axes[1].set_title('Zonal Mean of U-Wind', fontsize=14, fontweight='bold')
#V-Wind Plot
v_mean.plot(ax=axes[2], label='V-Wind(m/s)')
axes[2].axhline(0, color='black', linestyle='--',label='No Wind')
axes[2].legend()
axes[2].set_title('Zonal Mean of V-Wind', fontsize=14, fontweight='bold')
fig.subplots_adjust(hspace=0.5);
Questions:
- Based on your knowledge about the general circulation of the atmosphere, explain the latitude location of the climatological high and low pressure systems of Earth.
Answer: So at the equator we have a low induced by the rising warm air and the resulting loss of airmass. The risen air is expanding and sinks at about 30°N/S which leads to an overshoot of mass and dry conditions and therefore the subtropic high. We have a low again at ~60°N/S because there the warm surface air coming from the equator collides with the cold surface air from the poles (polar front) and needs to rise so there is low pressure. At the poles the 'warm' air is cooling again and sinking which results in polar high pressure. In general on the SH pressure is lower than on the NH because of the difference in sea:land ratio. When there is more ocean Low pressure systems can form and exist easier.
- Similarly, explain the direction and strength of the zonal and meridional winds on earth (tip: the sea-level pressure plot helps)
Answer: At the equator we have wind blowing towards the equator and to the west so negative U component on both Hem and positive V on SH and negative U on NH because V is defined positive when blowing to the north. After the subtropic high (~30°N/S) the surface wind blows towards the poles and gets deviated to the east by coriolis and therefore we have positve U and switched V values. At 60°N/S especially S we have very high wind speeds due to the jet stream. After the polar front there are the same values as close to the equator so easterlies. Especially at the southpole we have a strong positive v component so strong wind to the north which can be explained by the low pressure at the sea and the high pressure at the southpole.
Part 4: temperature change and CO2 concentrations¶
Download the global average CO2 concentration timeseries data in the CSV format (source: NOAA). Let us help you read them using pandas:
df = pd.read_csv('co2_mm_gl.csv', skiprows=38)
# Combine the first two columns into a datetime column and set as index
df['date'] = pd.to_datetime(df.iloc[:, 0].astype(str) + '-' + df.iloc[:, 1].astype(str), format='%Y-%m')
df.set_index('date', inplace=True)
Prepare three plots:
- plot the monthly global CO2 concentration as a function of time.
df["average"].plot()
plt.ylabel("CO2 concentration [ppm]")
plt.xlabel("Years")
plt.title(" CO2 distribution ")
Text(0.5, 1.0, ' CO2 distribution ')
- plot the annual average timeseries of global CO2 concentration as a function of time.
df_yearly= df.resample("YE").mean()
df_yearly["average"].plot(title="Yearly averaged CO2 concentration")
plt.ylabel("CO2 concentration [ppm]")
plt.xlabel("Years")
plt.show()
- plot the annual average timeseries of global CO2 concentration and of global 2m temperature from ERA5 on the same plot (using a secondary y axis for temperature).
t2_yearly = t2.groupby("time.year").mean(dim="time")
t2_yearly = t2_yearly.mean(dim = "longitude")*weight
t2_yearly = t2_yearly.sum(dim = "latitude")
#t2_yearly.coords['year'] = pd.to_datetime(t2_yearly.coords['year'].values)
df_yearly["time"] = df_yearly.index.year
fig = plt.figure()
ax = fig.add_subplot(111)
ax2 = ax.twinx()
ax2.plot(df_yearly["time"],df_yearly["average"])
ax.plot(t2_yearly["year"],t2_yearly,color = "red")
ax2.set_ylabel("CO2 concentration [ppm]",color = "blue")
ax.set_ylabel("Temperature[K]", color = "red")
ax.set_title("Temperature and CO2 concentration by years")
ax.set_xlabel("Years");
Questions:
- Describe and explain the annual cycle of CO2 concentrations
The anual cycle is caused by the seasons which influence the plants photogenysis. As Mauna loa is on the northern hemisphere it has high concentrations in the start of spring before photogenysis picks up again
- What was the CO2 concentration in the atmosphere in the pre-industrial era? Compute the annual increase in CO2 concentration (unit: ppm per year) between 1980 and 1985 and between 2016 and 2021.
#df_yearly[df_yearly['year'] == 1985 ] 345.5375
#df_yearly[df_yearly['year'] == 1980 ] 338.913333
#df_yearly[df_yearly['year'] == 2016 ] 403.065833
#df_yearly[df_yearly['year'] == 2021 ] 414.703333
k = 345.5375-338.913333
f = 414.703333-403.065833
k/5
f/5
2.327499999999998
The annual change from 1980 to 1985 has been 1.325 ppm per year and from 2016-2021 it has been 2.327 ppm per year. Almost double. If we account for the anual rate of change the end of the pre industrial era (1900) should have had an concentration of roughtly 230 ppm
- Describe the relationship between global temperatures and CO2 concentrations. Beside CO2, name three processes that can influence temperature variability and change at the global scale.
As CO2 concentrations have risen the global temperature has risen as well. It is also globally influenced by the proximity to the sun. In addition to the proximity to the sun the intensity of the sun will change over time as well. An oather factor are the ocean currents which are important to the climat and can change it if they change.
Part 5: Climate Risk Dashboard (open research question)¶
We will use the Climate Risk Dashboard climate-risk-dashboard.climateanalytics.org from the Horizon 2020 PROVIDE Project to create and analyze an open research question. To learn how to use the dashboard, visit the OGGM-Edu website, which includes examples using mean temperature and glacier volume.
Select Indicators and Geography
- Choose two to three
Indicator
's from the dashboard. Ensure that you pick only oneIndicator
per Sector (e.g., one from Terrestrial Climate and one from Biodiversity). - Select a
GEOGRAPHY
for yourIndicator
's (not all geographies are available for all indicators).- Try to pick related locations. For example, if you choose a city, also consider selecting its country or region for comparison.
- Or, if it fits to your research question, you can also select an additional
GEOGRAPHY
for comparison (e.g. compare two countries), but you do not have to.
- Choose two to three
Formulate a Research Question
- Based on your selected
Indicator
's andGEOGRAPHY
, create a research question.- Please mention this research question clearly in your notebook.
- Your analysis will focus on comparing two to three scenarios available in the dashboard.
- Based on your selected
Conduct the Analysis
- Visualizations:
- Use at least one plot per
Indicator
by downloading plots directly from the dashboard. You can add them to your notebook with drag-and-drop. - Further, include at least two custom plots in your analysis. This means download the raw data from the dashboard and create your own plot. For an example see this section on OGGM-Edu. Please use the original filenames of the downloaded data in your notebook.
- Use at least one plot per
- References:
- Try to find at least one reference (reports, papers or articls) related to your research question and mention them in the notebook by providing a link. A good resource for many climate change related topics is the IPCC report.
- Visualizations:
Answer Guiding Questions to your Research Question
Answer at least three of the questions below, or come up with your own creative questions! You’re encouraged to mix and match the provided questions with your own ideas or explore different angles that interest you.
- How do the scenarios differ over time for each Indicator?
- What are the spatial differences between scenarios for each Indicator?
- If applicable: How much risk is avoided by staying below a certain threshold for your Indicator?
- Are there any correlations between your selected Indicators?
Project: The way climate policies limit the economical growth in the United States of America¶
First we want to explain some terms we are using to guide the reader through this research
Lexicon:
2020 climate policy ~ This scenario assumes that no further climate action is taken beyond the climate policies that were in place in 2020. Global warming reaches 2.9°C in 2100 (best estimate), and would continue climbing into the new century.
Shifting pathway ~ This scenario explores how a broader shift towards sustainable development can be combined with stringent climate policies. Global warming peaks at 1.6°C in 2060 and goes back to 1.3°C in 2100 (best estimate).
Mean daily maximum wet bulb globe temperature (WBGT) ~ Annual average of the maximum wet bulb globe temperature reached in a day. WBGT is a measure of heat stress in direct sunlight, which takes into account temperature, humidity, wind speed, sun angle and cloud cover (solar radiation).
GDP ~ "Gross Domestic Productis" a monetary measure of the market value of all the final goods and services produced and rendered in a specific time period by a country or countries. GDP is often used to measure the economic health of a country or region.
Lost working hours per year for moderate activities(2. topic) ~ Annual number of working hours lost because of heat stress, for moderate activities (for example hammering in nails, weeding, hoeing or picking fruits or vegetables). The limits for safe working conditions under heat stress conditions are defined by ISO 7243 and Hooyberghs et al. (Climatic Change, 2017). Moderate activities are assumed to be affected as soon as wet-bulb globe temperature (WBGT) exceeds 28.6°C and to become impossible when WBGT reaches 32.8°C.
1. Climate and Economy in the US¶
For the beginning we want to show that especially in a capitalist country like the united states where economic growth is top priority and climate change (particularly under Trump) isn't top priority that climate action is a basic requirement for economic growth
2. Global warming and the ability to work¶
Now we want to focus on a reason for the lower GDP in the future when climate action stays the same. For this we chose Houston in Texas. We chose a city and the indicator working hours lost due to more extreme weather because this is also more striking for the masses as it adresses the whole working class but also politics as GDP is decreasing when there are less working hours in a year.
whrs_20= pd.read_csv('impact-time_houston_curpol_urbclim-LWH-mod_0.5_absolute.csv')
wbgt_20= pd.read_csv('impact-time_houston_curpol_urbclim-WBGT-daily-mean-max_0.5_absolute.csv')
whrs_pw= pd.read_csv('impact-time_houston_sp_urbclim-LWH-mod_0.5_absolute.csv')
wbgt_pw= pd.read_csv('impact-time_houston_sp_urbclim-WBGT-daily-mean-max_0.5_absolute.csv')
fig, (ax, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True)
fig.suptitle('\nLost working hrs/yr compared to WBGT from 2020-2100 in Houston-Texas', fontweight='bold',fontsize=20)
ax.plot(whrs_20['year'],whrs_20['urbclim-LWH-mod_mean'], label='Lost working hrs/yr')
ax.legend(loc='lower right')
ax.set_ylabel('hrs/yr',color='blue')
ax.set_title('2020 climate policy')
axb = ax.twinx()
axb.plot(wbgt_20['year'], wbgt_20['urbclim-WBGT-daily-mean-max_mean'],color='orange', label='Mean daily max wet bulb globe temperature(°C)')
axb.legend(loc='upper left')
axb.set_ylabel('WBGT (°C)',color='orange')
ax2.plot(whrs_pw['year'], whrs_pw['urbclim-LWH-mod_mean'], label= 'Lost working hrs/yr')
ax2.legend(loc='lower right')
ax2.set_ylabel('hrs/yr',color='blue')
ax2.set_title('\nShifting Pathway')
ax2b= ax2.twinx()
ax2b.plot(wbgt_pw['year'], wbgt_pw['urbclim-WBGT-daily-mean-max_mean'],color='orange', label='WBGT(°C)')
ax2b.legend(loc='upper left')
ax2b.set_ylabel('WBGT (°C)',color='orange')
fig.tight_layout(rect=[0, 0, 1, 0.95])
plt.show();
gdp_20=pd.read_csv('impact-time_USA_curpol_macroeconomy-bhm_0.5_present-day-2015.csv')
whrs_20= pd.read_csv('impact-time_houston_curpol_urbclim-LWH-mod_0.5_absolute.csv')
gdp_20 = gdp_20[(gdp_20["year"]%2==0)]
plt.plot(whrs_20['urbclim-LWH-mod_mean'], gdp_20['macroeconomy-bhm_mean'])
plt.xlabel("Loss in working hours")
plt.ylabel("Forecasted GDP as a fraction of the 2015 GDP")
plt.title("Corellation plot showing GDP in relation to retreat in workhours")
plt.show();
Are the results conclusive?
Even though the predictions have a lot of uncertancies there is a clear correlation between the GDP and Climate change. Even with the most optimistic prognostics if we stick with our policies there will be a retreat of GDP.
An examplary reason is the loss in workhours due to harsh working conditions, althoug there are way more and possibly also way more important factors to find as well
Are there any correlations between your indicators?
Yes there are strong corralations to be seen. As the workhours decrease the GDP does so as well as seen in the correlation plot above. The workhours then are correlated to the max WBGT with a strong accuracy.
How do different political decisions differ from each other?
We see a simmular development till 2040 with working hours for workers in medium intense jobs decreacing because of heat. It is obvious that there is an correlation between max WBGT and the loss in working hours.
after 2040 the 2 Scenarios differ from each other. Uf we stick with 2020 Climate Policies there continues to be a linear rise of lost hours, with the upper quantile of uncertantie even going exponentially reaching over 1600 hours lost by 2100. The changing Pathways scenario will slowley decrease lost working hours after 2040 to regain the level of 2020 by 2080 and even falling lower by 2100.
References:
Working on a warmer planet(Internation Labour Organization):
https://www.ilo.org/sites/default/files/wcmsp5/groups/public/%40dgreports/%40dcomm/%40publ/documents/publication/wcms_711919.pdf
Climate change and the us economic future(University Chicago):
https://epic.uchicago.edu/area-of-focus/climate-change-and-the-us-economic-future/