12.01.2023
Franziska Kirchner, Lena Wacik, Cosma Ehrngruber
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 12 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: I recommend that students who have not followed my 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. 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. I 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
I 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)
1 2 3 4 5 6 7 8 9 10 | # 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 from IPython.display import display, Latex #be able to print statements using Latex |
Part 1 - temperature climatology¶
Open the ERA5 temperature data:
1 2 3 | ds1 = xr.open_dataset(r'C:\Users\User\OneDrive\_UNI\3. semester\klimate\projects\data\ERA5_LowRes_Monthly_t2m.nc') #unc: universal naming convention #ds1 |
Plot three global maps:
- Compute and plot the temporal mean temperature $\overline{T}$ for the entire period (unit °C)
- Compute and plot $\overline{T^{*}}$ (see lesson), the zonal anomaly map of average temperature.
- Compute and plot the monthly average temperature for each month $\overline{T_M}$ (annual cycle). I 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, i.e. $\overline{T_M}max$ - $\overline{T_M}min$ on a map.
Questions:
- Look at the zonal temperature anomaly map.
- Explain why norther 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.
- 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.
1 2 3 4 5 6 | # TEMPORAL MEAN TEMPERATURE meantemp_avg = ds1.t2m.mean(dim='time')-273.15 ax = plt.axes(projection=ccrs.Robinson()) meantemp_avg.plot(ax=ax, transform=ccrs.PlateCarree(), levels=[-40,-20,-10,0,5,10,15,20,25,30,40], cbar_kwargs={'label': '°C'}) ax.coastlines(); ax.gridlines() ax.set_title('Temporal mean 2m air temperature in °C, ERA5 1979-2018'); |
1 2 3 4 5 6 7 | # ZONAL ANOMALY MAP OF AVERAGE TEMPERATURE anomaly_temp_avg = meantemp_avg - meantemp_avg.mean(dim='longitude') ax = plt.axes(projection=ccrs.Robinson()) anomaly_temp_avg.plot.imshow(ax=ax, transform=ccrs.PlateCarree(), levels=[-30,-20,-10,-5,0,5,10,20,30], cbar_kwargs={'label': '°C'}) ax.coastlines(); ax.gridlines() ax.set_title('Zonal anomaly map 2m air temperature °C, ERA5 1979-2018'); #print(t_avg_dep) |
to question 1a: Explain why norther Europe and the North Atlantic region is significantly warmer than the same latitudes in North America or Russia: Several factors are the reason why norther Europe and the North Atlantic region are warmer than the same latitudes in North America or Russia, like the winds, mountains, heat storage, atmospheric heat transport, the gulf stream,... (https://www.youtube.com/watch?v=mQr8Ixp8ZAE). The gulf stream heats up the northern Atlantic and northern Europe because it can transport a lot of heat due to its great circulation. In Europe is the anomaly, the norm is actually the subpolar climate in North America or Russia. Without the gulf stream, it would be 5 to 10 degrees Celsius colder than it actually is (https://www.youtube.com/watch?v=UuGrBhK2c7U). The cold winds from America that then flow across the Atlantic get heated up by the Atlantic Ocean and a warm wind hits Europe. (https://www.fr.de/panorama/atlantik-waermt-europa-11229502.html). Nevertheless, the gulf stream is by far not the biggest and especially not the only source for the warmer temperatures in northern Europe, eg. the atmosphere plays a huge role at latitudes above the northern (and southern) tropic (Figure 8.13, page 156, MarshallPlumb_AtmoOceanoDynamics).
to question 1b: Explain why the Northern Pacific Ocean does not have a similar pattern: Both the northern Atlantic ocean and northern Pacific Ocean have a similar mean sea surface temperature, but the northern Atlantic Ocean has a much higher salinity (presentation 1, slide 30, Figure 1.11 from Levitus, 1998). Because of the higher salinity there is a greater circulation in the northern Atlantic Ocean (presentation 1, slide 28, Figure 6.3 from Gettelman and Rood, 2016), resulting in a stronger heat transport which can't be formed like that in the Pacific Ocean due to the absence of an overturning circulation. (MarshallPlumb_AtmoOceanoDynamics, chapter 11.5.1, page 250f. (bei mir 271/272)).
1 2 3 4 5 6 | # MONTHLY AVERAGE TEMPERATURE, ANNUAL CYCLE t2 = ds1.t2m tsm_avg = t2.groupby("time.month").mean() #print(tsm_avg) # monthly average temperature for each month in Kelvin tsmmonth = tsm_avg.mean(dim='month')-273.15 #print(tsmmonth) # monthly average temperature for each month in Celsius |
1 2 | maxmonth = t2.groupby("time.month").mean().max(dim="month") - 273.15 minmonth = t2.groupby("time.month").mean().min(dim="month") - 273.15 |
1 2 3 4 5 | temprange = maxmonth - minmonth ax = plt.axes(projection=ccrs.Robinson()) temprange.plot.imshow(ax=ax, transform=ccrs.PlateCarree(), cmap="YlOrRd", cbar_kwargs={'label': '°C'}) ax.coastlines(); ax.gridlines() ax.set_title('Average monthly temperature range 2m air temperature °C, ERA5 1979-2018'); |
to question 2a: Explain why the temperature range is smaller in the tropics than at higher latitudes: Because of the earth's inclination the angle at which the incoming solar radiation hits the earth leads to differences at different locations. At higher latitudes the angle is smaller than in the tropics, where the whole year the solar radiation hits at a larger angle, so the position of the sun is almost the same throughout the year(http://www.ces.fau.edu/nasa/module-3/why-does-temperature-vary/angle-of-the-sun.php). As a result, the tropics have a daytime climate which means that the temperature varies more between day and night than it varies over the months. No different seasons exist in the tropics like they exist at higher latitudes.(https://de.wikipedia.org/wiki/Tageszeitenklima). In contrast, at higher latitudes the solar radiation hits at a smaller angle leading to the energy being spread over a larger area. The variation of the incidence of the angle of radiation over the year leads to the seasons and seasonal changes. The higher temperature range is a consequence of the latter explained and different weather systems that occur at higher latitudes (https://de.wikipedia.org/wiki/Jahreszeitenklima#:~:text=was%20ist%20das%20jahreszeitenklima%3F&text=Als%20Jahreszeitenklima%20wird%20das%20Klima,kalte%20Jahreszeiten%20voneinander%20unterscheiden%20lassen).
to question 2b: Explain why the temperature range is smaller over oceans than over land: Water has a higher heat capacity than land, this means it needs a lot more energy than land (dry soil) to be heated or cooled down. That is why the ocean has a smaller temperature range than land. The ocean stores its heat longer than land. In contrast, land heats up quickly and cools down very fast because it can't disperse the heat. (http://www.ces.fau.edu/nasa/module-3/why-does-temperature-vary/land-and-water.php, https://geo.libretexts.org/Bookshelves/Oceanography/Book%3A_Oceanography_(Hill)/04%3A_Properties_of_Water/4.2%3A_Heat_capacity_the_ocean_and_our_weather).
to question 2c: Where is the temperature range largest?: http://www.ces.fau.edu/nasa/module-3/why-does-temperature-vary/land-and-water.php : the temperature range is largest in Siberia (Russia). This is because there is a big distance of the landmass to the ocean. In Siberia prevails the continental climate. As explained in the answer above, land has a much higher temperature range than the ocean. Siberia has a big distance to the ocean, ergo has a very high temperature range because it can't be influenced by the high heat capacity of water which brings a narrow temperature range. In contrast land close to the ocean doesn't have a high daily and seasonal temperature range. https://en.wikipedia.org/wiki/Siberian_High : On top, the Siberian High is the strongest semi-permanent high above Northeastern Eurasia from September to April and has its peak in the winter. The Siberian High is responsible for the lowest temperature in the northern hemisphere and very cold winters.
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.
1 2 | ds2 = xr.open_dataset(r'C:\Users\User\OneDrive\_UNI\3. semester\klimate\projects\data\ERA5_LowRes_Monthly_tp.nc') #ds2 |
Using .groupby()
, compute the average daily precipitation for each month of the year (I 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'
Questions:
- Describe the location of the ITCZ in January and February. Without going into the details, explain (in one or two sentences)
- Describe the precipitation seasonality in West Africa and in India. Name the phenomenon at play.
1 2 3 4 5 6 | ttpr = ds2.tp prec_avg = ttpr.groupby("time.month").mean()*1000 january = prec_avg.sel(month=1) #print(january) august = prec_avg.sel(month=8) #print(august) |
1 2 3 4 | ax = plt.axes(projection=ccrs.Robinson()) january.plot.imshow(ax=ax, transform=ccrs.PlateCarree(), levels=[0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40], cmap="YlGnBu", cbar_kwargs={"label": "mm per day"}) ax.coastlines(); ax.gridlines() ax.set_title('Average daily precipitation in January in mm per day, ERA5 1979-2018'); |
1 2 3 4 | ax = plt.axes(projection=ccrs.Robinson()) august.plot.imshow(ax=ax, transform=ccrs.PlateCarree(), levels=[0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40], cmap="YlGnBu", cbar_kwargs={'label': 'mm per day'}) ax.coastlines(); ax.gridlines() ax.set_title('Average daily precipitation in August in mm per day, ERA5 1979-2018'); |
to question 1: Describe the location of the ITCZ in January and February. Without going into the details, explain (in one or two sentences) The ITCZ shifts with the change in the position of the sun (follows/is where the sun stands in the zenith). So in January/February (winter) it is below the equator (earth is in a different angle towards the sun than in the summer) and more north than the southern tropic because it is past the 22nd of December, so the ITCZ is in January and February (north of)south America, south Africa and Indonesia.
August: In summer, the northern hemisphere is closer to the sun than the southern hemisphere, so the zenith of the sun is in the northern hemisphere and above the equator. So in August, the ITCZ (as it follows the zenith) is above the equator, but below the northern tropic (because it is not june 21st) and is in middle America, middle Africa and in Asia shifted more upwards (the mainland of southeast Asia, so north India, Thailand/..., and the Philippines).
to question 2: Describe the precipitation seasonality in West Africa and in India. Name the phenomenon at play. Looking at the maps, one can see that in West Africa and in India in January (winter) there is no precipitation, but a lot of precipitation with high values in August (summer). The phenomenon at play is the Monsoon. The monsoon is a wind that changes its direction every half year. It has effects on the climate, the nature and the people living there.
In the summer it works this way: from the anticyclone on the southern hemisphere air flows to the ITCZ (which goes approx. along northern India) as a southeast trade wind, which then gets diverted to a southwest monsoon because of the coriolis force. Along the way over the Indian ocean the monsoon accumulates moisture and brings it to the indian mainland. It dams up in front of the Himalaya mountains and rains excessively. This is summer monsoon.
In the winter the opposite happens. The anticyclone is on the indian mainland. The dry air flows over the mainland to the ITCZ which is now over the Indian ocean. But this northeast monsoon is dry because it can´t accumulate moisture when flowing over the mainland. That is the reason why there is no rain in the winter months November till February.
question 2 answered with this video: https://studyflix.de/erdkunde/monsun-3334
Part 3: sea-level pressure and surface winds¶
Open the file containing the surface winds (u10
and v10
) and sea-level pressure (msl
).
1 2 | ds3 = xr.open_dataset(r'C:\Users\User\OneDrive\_UNI\3. semester\klimate\projects\data\ERA5_LowRes_MonthlyAvg_uvslp.nc') #ds3 |
Compute $\left[ \overline{SLP} \right]$ (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 $\left[ \overline{u_{10}} \right]$ and $\left[ \overline{v_{10}} \right]$ (in m s$^{-1}$) and add the 0 horizontal line to the plot (to detect surface westerlies from easterlies for example).
1 2 3 4 5 6 7 8 9 10 11 | msl_in_hPa = ds3.msl / 100 stp = 1013.25 msl_in_hPa.mean(dim=['month', 'longitude']).plot(label='$\\left[ \\overline{SLP} \\right]$') plt.axhline(stp, color='black', lw=2, label='standard atmosphere pressure line') plt.title('temporal and zonal average of sea-level pressure', fontsize='14') plt.ylabel('pressure in hPa') plt.xlim(-90,90) plt.legend() plt.show(); |
1 2 3 4 5 6 7 8 | ds3.u10.mean(dim=['month', 'longitude']).plot(label='$\\left[ \\overline{u_{10}} \\right]$') plt.axhline(0, color='black', lw=2, label='zero line') plt.title('temporal and zonal wind average (average of u$_{10}$)', fontsize='14') plt.ylabel('mean speed of u-component of surface wind in $ms^{-1}$') plt.xlim(-90,90) plt.legend() plt.show(); |
1 2 3 4 5 6 7 8 | ds3.v10.mean(dim=['month', 'longitude']).plot(label='$\\left[ \\overline{v_{10}} \\right]$') plt.axhline(0, color='black', lw=2, label='zero line') plt.title('temporal and meridional wind average (average of v$_{10}$)', fontsize='14') plt.ylabel('mean speed of v-component of surface wind in $ms^{-1}$') plt.xlim(-90,90) plt.legend() plt.show(); |
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.
- Similarly, explain the direction and strength of the zonal and meridional winds on earth (tip: the sea-level pressure plot helps)
The hadley cells north and south of the equator cause the warm tropical air to rise at the equator, creating a region of low pressure here. At about 30deg N and S, the Hadley and the Ferrel cell work together, causing relatively cold air to sink and creating a high pressure system. Inbetween the Ferrel and the Polar cell, the air is rising again at about 60deg N and S, which leads to another low-pressure system here. Analogously, high-presure systems are located at the poles. (source 1/Physical_Geography_(Lenkeit-Meezan)/04:Global_Circulation/4.04:_Global_Circulation]), source 2, [source 3](https://en.wikipedia.org/wiki/Hadley_cell#/media/File:Earth_Global_Circulation-_en.svg))
The zonal flow is created due to an balance between the coriolis force and the pressure gadient force. This so called geostrophic wind is a wind, which will move towards the East is we have an low-pressure system in the north and an high pressure system in the south, like it is the case between 30deg S and 0deg. It also will intitiate an flow to the West with an high-pressure system in the north and an high pressure system in the south, as in between 30deg N and the equator. All the zonal windspeeds result from this geostrophic wind. The meridional flow can easily be described by the wind flow patterns created by the cells mentioned in the question above. The hadley cell for example causes the air to move form about 30deg N or S towards the equator, therefore, we have negative windspeeds between 30deg N and the equator and positive windspeeds between 30deg S and the equator.
Part 4: temperature change and CO$_2$ concentrations¶
Download the global average CO$_2$ concentration timeseries data in the CSV format (source: NOAA). Here, let me help your read them using pandas:
1 | df = pd.read_csv('data/co2_mm_gl.csv', skiprows=55, parse_dates={'date' : [0, 1]}, index_col='date') |
Prepare three plots:
- plot the monthly global CO$_2$ concentration as a function of time.
- plot the annual average timeseries of global CO$_2$ concentration as a function of time.
- plot the annual average timeseries of global CO$_2$ concentration and of global 2m temperature from ERA5 on the same plot (using a secondary y axis for temperature).
1 2 3 4 5 6 7 8 9 | # plot the monthly global CO$_2$ concentration as a function of time. plt.plot(df.average, label='CO$_2$ concentration'); #df.average.plot() plt.title('monthly global CO$_2$ concentration as a function of time', fontsize='14') plt.xlabel('Years', fontsize='12') plt.ylabel('CO$_2$ concentration in ppm', fontsize='12') plt.legend() plt.show(); |
1 2 3 4 5 6 7 8 | # plot the annual average timeseries of global CO$_2$ concentration as a function of time. plt.plot(df.resample('Y').mean().average, label='CO$_2$ concentration'); plt.title('annual average timeseries of global CO$_2$ concentration as a function of time', fontsize='14') plt.xlabel('Years', fontsize='12') plt.ylabel('CO$_2$ concentration in ppm', fontsize='12') plt.legend() plt.show(); |
1 2 3 4 5 6 7 8 9 10 11 12 | #- plot the annual average timeseries of global CO$_2$ concentration and of global 2m temperature from ERA5 on the same plot # (using a secondary y axis for temperature). #put the data in a collective dataframe df = pd.read_csv('data/co2_mm_gl.csv', skiprows=55, parse_dates={'date' : [0, 1]}) #our df from above, but w/o the date as index df_1 = pd.DataFrame({'t2m': np.array(ds1.t2m.mean(dim=['longitude', 'latitude']))}) df = pd.concat([df, df_1], axis=1) #df['t2m'].notnull()[df['t2m'].notnull() == True] df = df.set_index('date') df_yearly_mean = df.groupby(df.index.year).mean() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #weigh the temperature # Meridional weights weight = np.cos(np.deg2rad(ds1.latitude)) weight = weight / weight.sum() # Meridionally weighted zonal mean weighted_t2m = ds1.t2m.mean(dim='longitude') * weight weighted_t2m = weighted_t2m.sum(dim='latitude') weighted_t2m = weighted_t2m.groupby('time.year').mean(dim='time').to_pandas() df_1 = pd.DataFrame({'weighted_t2m': weighted_t2m}) df_yearly_mean = pd.concat([df_yearly_mean, df_1], axis=1) #df_yearly_mean.weighted_t2m.mean() |
1 2 3 4 5 6 7 8 9 10 11 12 | fig, ax1 = plt.subplots() ax2 = ax1.twinx() ax1.plot(df_yearly_mean.average, 'b-', label='CO$_2$ concentration') ax2.plot(df_yearly_mean.weighted_t2m, 'g-', label='temperature') plt.title('annual average timeseries of global CO$_2$ concentration and 2m temperature', fontsize='14') plt.xlabel('Years', fontsize='12') ax1.legend() ax2.legend() ax1.set_ylabel('CO$_2$ concentration in ppm', fontsize='12' , color='b') ax2.set_ylabel('2m temperature in K', fontsize='12', color='g') plt.show(); |
Questions:
- Describe and explain the annual cycle of CO$_2$ concentrations.
- What was the CO$_2$ concentration in the atmosphere in the pre-industrial era? Compute the annual increase in CO$_2$ concentration (unit: ppm per year) between 1980 and 1985 and between 2016 and 2021.
- Describe the relationship between global temperatures and CO$_2$ concentrations. Beside CO$_2$, name three processes that can influence temperature variability and change at the global scale.
1 2 3 4 5 6 7 8 | #plotting the mean monthly concentration of CO_2 pd.read_csv('data/co2_mm_gl.csv', skiprows=55).groupby('month').mean().average.plot(label= 'CO$_2$ concentration'); plt.title('monthly mean concentration of CO$_2$', fontsize='14') plt.xlabel('Month', fontsize='12') plt.ylabel('CO$_2$ concentration in ppm', fontsize='12') plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12], ['J','F','M','A','M','J','J','A','S','O','N','D']) plt.legend() plt.show(); |
Answers:
The concentration of carbon dioxide in the atmosphere fluctuates over the year with a maximum in May and a minimum in September. The reason for this is the plant growth and decay throughout a year. Most land is on the northern hemisphere (NH), so also most plants are on the NH. Looking at the circle of the seasons on the NH, one can see that in spring and summer (May - September), the plants grow, performing photosynthesis and therefore taking CO$_2$ out of the atmosphere and into the biosphere, so there is a net drawdown. The concentration of CO$_2$ in the atmosphere sinks, reaching a minimum in September. In autumn and winter (NH), the plants decay, releasing CO$_2$ from the biosphere into the atmosphere again and reaching its maximum in May. (Dessler, 2016, chapter 5)
The CO$_2$ concentration in the atmosphere in the pre-industrial era was between 260 and 280 ppm. (Dessler, 2016, chapter 5)
Carbon dioxide acts as a greenhouse gas in the atmosphere. Incoming solar radiation is absorbed by the earth and re-emitted as infrared radiation, which now can easily absorbed by CO$_2$ (wavelength). Carbon dioxide now again re-emitts the infrared radiation in all directions, meaning that about half of the heat is radiated to space and half back to the earth. This heat is contributing to the greenhouse effect.
Lots of carbon dioxide is stored in the regeons which are covered with permafrost. This carbon dioxide comes from dead organic plant matter which froze into the permfrost.If the temperatures are rising, so that the permafrost on the Earth's surface is melting, the plant matter starts to decay and CO$_2$ is set free. Now the more CO$_2$ in the atmosphere, the more warming, followed by even more thawing out and with it releasing of CO$_2$. (source 1; Dessler, 2016, chapter 4, chapter 7.5)
Beside CO$_2$, name three processes that can influence temperature variability and change at the global scale.
- continental drift: The continents move over the years. Possible results of the altered continent arrangement: The more land in polar regions, the higher number of ice sheets and ice coverage, which lead to an augmentagion of the albedo, therefore to an augmentation in reflectivity and cooling of the earth. Secondly, the ocaen circulacion is being altered, resulting in a different distribution of the heat in the ocean.
- sun: A change in the sun's solar constant (a brightning or a dimming of the sun) effectuates a warming or a cooling. Further, ther is the theory that the sun became 30% brighter over the last $10^5$ years, which would have resulted in a warming on Earth.
- earth's orbit: possible alterations: changing sun-Earth-distance, eccentricity, tilt of the Earth's axis. This all influences the Earth's temperature(-distribution). It always also depends on where the Earth is at at the very moment (e.g. perihelion).
These all are influencing the Earth's temperature on a global scale. (Dessler, 2016, chapter 7)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 2 Compute the annual increase in CO2 concentration (unit: ppm per year) between 1980 and 1985 and between 2016 and 2021. yr_80_85 = np.arange(1980.500000, 1985.500000, 1) yr_16_21 = np.arange(2016.500000, 2021.500000, 1) def mean_increase_yr1_yr2(yrs): increase_yr1_yr2 = np.zeros(yrs.size) k = 0 for i in yrs: increase_yr1_yr2[k] = df_yearly_mean.average[df_yearly_mean.decimal == np.float64(i+1)].item() - df_yearly_mean.average[df_yearly_mean.decimal == np.float64(i)].item() k = k+1 return increase_yr1_yr2.mean() display(Latex(f'The annual increase in CO$_2$ concentration between 1980 and 1985 is {mean_increase_yr1_yr2(yr_80_85)} ppm per year.')) display(Latex(f'The annual increase in CO$_2$ concentration between 2016 and 2021 is {mean_increase_yr1_yr2(yr_16_21)} ppm per year.')) |
Part 5: variability and ENSO (open research question)¶
Using the available data, describe the global effect of an El Niño year and a La Niña year on sea-surface temperature, precipitation, and air temperature. I suggest to look for literature or a google search on strong ENSO events in the past 40 years, and select one good example for a positive and a negative phase. Then use annual or seasonal anomaly maps to show the patterns of SST, temperature and precipitation anomalies during these events. With citation or links, explain why you picked these years as examples.
1 2 3 | sst1 = xr.open_dataset(r'C:\Users\User\OneDrive\_UNI\3. semester\klimate\projects\data\ERA5_LowRes_Monthly_sst.nc') pre = ds2 t = ds1 |
LA NINA
During an la niña year the easterly tradewinds get stronger so more warm water is pushed towards the easterly coast of Australia. Hence in Australia and Indonesia precipitation and the SSTs increase. On the western coast of South America the warm water is replaced by the cold water below leading to lower SST and less precipitaion in the eastern Pacific. The cold water near America leads to a northwards shift of the Jetstream which results in colder, wetter condition in the north and drier, warmer ones in the south of North America. Globally a la niña event has a cooling effect and hence decreases global air temperature
In the past 40 years the strongest la niña events occurred in the years 1988/89, 1998-2000 and 2010/11. All of those years have a pretty strong Oceanic Niño Index (ONI) of about -1.7/-1.8 in its strongest phases and since 2010/11 was the most resent one we chose this year. (s. https://ggweather.com/enso/oni.htm)
Sea surface temperatures
1 2 3 4 5 6 7 8 9 | # compute sea surface temperature anomalies for 2010 sst10 = sst1.sel(time=slice('2010-06','2011-03')) sst0 = sst10.sst.mean(dim='time') - sst1.sst.mean(dim='time') # plot of sst anomalies ax = plt.axes(projection=ccrs.Robinson()) sst0.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'SST in K'}) plt.title('SST anomalies 2010/11', fontsize='14') ax.coastlines(); ax.gridlines(); |
As expected, you can see that during the la niña year in 2010/11 the SSTs are higher in the western Pacific at the coast of Australia and Indonesia but lower in the eastern Pacific, at the west coast of South America and especially over the equator compared to the average SSTs of all years.
Precipitation
1 2 3 4 5 6 7 8 9 | # compute precipitation anomalies for 2010 pre10 = pre.sel(time=slice('2010-05','2011-03')) pre0 = pre10.tp.mean(dim='time') - pre.tp.mean(dim='time') # plot precipitation anomalies ax = plt.axes(projection=ccrs.Robinson()) pre0.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'precipitation in m'}) plt.title('precipitation anomalies 2010/11', fontsize='14') ax.coastlines(); ax.gridlines(); |
We can see that during la niña in 2010/11 the precipitaion is in the west Pacific and Australia higher (leading to floods) and the eastern and equatorial Pacific lower than usual.
Air temperature
1 2 3 4 5 6 7 8 9 | # compute air temperature anomalies for 2010 t10 = t.sel(time=slice('2010-06','2011-03')) t0 = t10.t2m.mean(dim = 'time') - t.t2m.mean(dim = 'time') # plot temperature anomalies ax = plt.axes(projection=ccrs.Robinson()) t0.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'air temperature in K'}) plt.title('air temperature anomalies 2010/11', fontsize='14') ax.coastlines(); ax.gridlines(); |
This map shows that la niña has a warming effect on the south of North America and South America. But a cooling effect in the north of North America and on the countries on the west side of the Pacific.
EL NINO
During an el niño year the easterly tradewinds over the Pacific ocean weaken or even reverse so the warm ocean current (which is normally pushed westwards through the tradewinds) is moving back towards the western coast of South America. This warm water current leads to increased SSTs and more precipitation over the equatorial Pacific and on the western coast of South America. On the north and east coast of Australia the warm water is replaced by the cold water below leading to lower SST, less precipitaion in the western Pacific. Due to the warmer water near the coast of America the Jetstream over North America shifts southwards and intensifies, leading to wetter conditions in the south and drier and warmer in the north of North America. Globally an el nino event has a warming effect on the amotspheric air temperature.
In the past 40 years the strongest el niño events occurred in 1982/83, 1997/98 and 2015/16. Since the maximum of the ONI was highest in the years 2015/16, we chose this el niño. (s. https://ggweather.com/enso/oni.htm)
Sea surface temperatures
1 2 3 4 5 6 7 8 9 | # compute sea surface temperature anomalies for 2015/16 sst15 = sst1.sel(time=slice('2015-05','2016-04')) sst2 = sst15.sst.mean(dim='time') - sst1.sst.mean(dim='time') # plot of sst anomalies ax = plt.axes(projection=ccrs.Robinson()) sst2.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'SST in K'}) plt.title('SST anomalies 2015/16', fontsize='14') ax.coastlines(); ax.gridlines(); |
This map displays that during the el niño event in 2015/16 in the eastern and equatorial Pacific have been warmer and in the western pacific colder SSTs than on average.
Precipitation
1 2 3 4 5 6 7 8 9 | # compute precipitation anomalies for 2015/16 pre15 = pre.sel(time=slice('2015-05','2016-04')) pre2 = pre15.tp.mean(dim='time') - pre.tp.mean(dim='time') # plot of precipitation anomalies ax = plt.axes(projection=ccrs.Robinson()) pre2.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'precipitation in m'}) plt.title('precipitation anomalies 2015/16', fontsize='14') ax.coastlines(); ax.gridlines(); |
Here we can see the increased precipitation in the Pacific over the equator and slightly over America. In the western pacific over Indonesia and Australia the blue indicates the expected drier than the average conditions.
1 2 3 4 5 6 7 8 9 | # compute air temperatures anomalies for 2015/16 t15 = t.sel(time=slice('2015-05','2016-04')) t2 = t15.t2m.mean(dim='time') - t.t2m.mean(dim='time') # plot of temperatures anomalies ax = plt.axes(projection=ccrs.Robinson()) t2.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'air temperature in K'}) plt.title('air temperatures anomalies 2015/16', fontsize='14') ax.coastlines(); ax.gridlines(); |
As expected the el niño in 2015/16 increased air temperatures in the global average and especially in the north of North America. In the south of North America are only less to no increased temperatures (We expected cooler than average temperatures). The reason it is not under the average is probably global warming.