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)
# General Imports:
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:
ds1 = xr.open_dataset(r'data/ERA5_LowRes_Monthly_t2m.nc')
ds1
<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: t2m (time, latitude, longitude) float64 444MB ... Attributes: Conventions: CF-1.6 history: 2019-11-18 09:36:58 GMT by grib_to_netcdf-2.14.0: /opt/ecmw...
Exercise 1:¶
Plot three global maps:
- Compute and plot the temporal mean temperature ¯T for the entire period (unit °C).
- Compute and plot ¯T∗ (see lesson), the zonal anomaly map of average temperature.
- 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).
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.
- 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.
### Exercise 1.1:
# Calculating the average Temperature in °C:
t2m = ds1.t2m.mean(dim='time')
avg_t2m = t2m - 273.15 # Converting from [K] into [°C]
# Defining the map projection (how does the earths sphere get depicted on a 2-dimensional map):
ax = plt.axes(projection=ccrs.Robinson())
# Plotting the variable T onto ax:
avg_t2m.plot(ax=ax, transform=ccrs.PlateCarree(), cmap='plasma', vmin=-40, vmax=30, cbar_kwargs={'label': 'Temperature [°C]'})
#Note: The keyword "transform" tells the function in which projection the data is stored.
# Adding gridlines and coastlines to the plot
ax.coastlines(); ax.gridlines();
ax.set_title("Average annual 2m air temperature (ERA5 1979-2018)")
plt.show()
# Doing the same plot again with discrete levels for better readability:
ax = plt.axes(projection=ccrs.Robinson())
avg_t2m.plot(ax=ax, transform=ccrs.PlateCarree(), cmap='plasma', vmin=-40, vmax=30, levels=8, cbar_kwargs={'label': 'Temperature [°C]'})
ax.coastlines(); ax.gridlines();
ax.set_title("Average annual 2m air temperature (ERA5 1979-2018)")
plt.show()
### Exercise 1.2:
# Calculating zonal anomaly of the average Temperature (Avg. Temp - Avg. Temperature for corresponding latitude):
t_zonal_anomaly = avg_t2m - avg_t2m.mean(dim='longitude')
# Constructing the plot as in Exercise 1.1:
ax = plt.axes(projection=ccrs.Robinson())
t_zonal_anomaly.plot(ax=ax, transform=ccrs.PlateCarree(), cmap='coolwarm', vmin=-20, vmax=20,
center=True, cbar_kwargs={'label': 'Temperature Anomaly [°C]','extend': 'both'})
ax.coastlines(); ax.gridlines();
ax.set_title("Zonal anomaly of the temporal mean - 2m Temperature (ERA5 1979-2018)")
plt.show()
### Exercise 1.3:
# Computing the average temperature for each month:
monthly_avg_T = ds1.t2m.groupby('time.month').mean(dim='time')
monthly_avg_T = monthly_avg_T - 273.15 # Converting from [K] in [°C]
# Calculating the temperature range between the coldest and the warmest month on average:
T_range = monthly_avg_T.max(dim='month') - monthly_avg_T.min(dim='month')
# Constructing the plot:
ax = plt.axes(projection=ccrs.Robinson())
T_range.plot(ax=ax, transform=ccrs.PlateCarree(), cmap='Oranges', vmin=0, vmax=60, levels=7,
center=False, cbar_kwargs={'label': 'Temperature Range [°C]'})
ax.coastlines(); ax.gridlines();
ax.set_title("Temperature range of the average monthly Temperature (ERA5 1979-2018)")
plt.show()
Exercise 1 - Questions:¶
1.) 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:
The North Atlantic region and its surrounding landmasses are warmed by the Gulf Stream, one of the most important ocean currents on our planet. Especially in the winter half year, the air over the comperatively warm ocean is heated through exchange of thermal heat and then gets transported to northern Europe by the overall westerly flow and therfore causes a positive temperature anomaly compared to regions like Canada or Russia at similar latitude. - Explain why the Northern Pacific Ocean does not have a similar pattern.
This is again related to the ocean currents in the respective region. We have already discussed the influence of the gulf-stream above, where really warm water from near the equator eventualy finds its way towards northern europe. In the northern Pacific ocean there are also some ocean currents, but none that are this pronounced and impactful, also because the Pacific is much bigger. Moreover, the prevalent current in this region transports the water just from east to west, without any major change in latitude and hence the water is not that warm.
To answer these questions, we used the slides of chapter 2 from the lecture as well as chapter 9 from Marshall & Plumb: Atmosphere, Ocean and Climate Dynamics
2.) Look at the average monthly temperature range map:
- Explain why the temperature range is smaller in the tropics than at higher latitudes:
The angle of the sun - and with that the duration of daily sunshine - is more or less equally distributed in the tropics over the course of a year. Hence, there is only little change in incoming radiation and subsequently less change in temperature over the year near the tropics. Near the poles or in mid-latitudes the situation is quite different, since there is a big difference in incoming radiation due to the tilt of the earths axis, which in the following causes the large temperature range. - Explain why the temperature range is smaller over oceans than over land:
The heat capacity of ocean is much larger than the one of landmasses. So it needs way more energy to heat the oceans, which results in a slow heating-cooling cycle. Therefore, the oceans temperature is more subdued than the temperature on land and they act as a kind of buffer for the temperature differences between different seasons. In the end, the result is a less extrem temperature fluctuation over the ocean than over the land surface. - Where is the temperature range largest? Explain why:
The largest temperature range can typically be found over areas in high latitudes with a lot of landsurface in it's surroundings (especially to the west). If this is the case, we have only small damping-effects of the oceans and the differences between the seasons are significant. To name a few, exemplary spots are siberia and north-east canada, where a continental climate is prevalent. Overall, temperatures on the northern hemisphere fluctuate more than on the southern hemisphere, since large parts are covered of landmass.
To answer these questions, we additionally used the slides of chapter 3 from the lecture as well as chapter 2 from Marshall & Plumb: Atmosphere, Ocean and Climate Dynamics
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.
ds2 = xr.open_dataset(r'data/ERA5_LowRes_Monthly_tp.nc')
ds2
<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...
Exercise 2:¶
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'
Questions:
- Describe the location of the ITCZ in January and August. 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.
### Exercise 2.1:
# Computing the average daily precipitation for each month:
monthly_avg_pre = ds2.tp.groupby('time.month').mean(dim='time')
monthly_avg_pre = monthly_avg_pre*1000 # Converting from m/day into mm/day
monthly_avg_pre
<xarray.DataArray 'tp' (month: 12, latitude: 241, longitude: 480)> Size: 11MB array([[[0.46101669, 0.46101669, 0.46101669, ..., 0.46101669, 0.46101669, 0.46101669], [0.43445095, 0.4340608 , 0.43381252, ..., 0.43586968, 0.43530219, 0.4348411 ], [0.42448436, 0.42416515, 0.42391687, ..., 0.42554841, 0.42480358, 0.42476811], ..., [0.10927777, 0.11186695, 0.11349849, ..., 0.10282254, 0.10431221, 0.10683046], [0.14439136, 0.14549088, 0.14634212, ..., 0.14180218, 0.1429017 , 0.14403668], [0.11853499, 0.11853499, 0.11853499, ..., 0.11853499, 0.11853499, 0.11853499]], [[0.39777675, 0.39777675, 0.39777675, ..., 0.39777675, 0.39777675, 0.39777675], [0.38057463, 0.38021995, 0.3798298 , ..., 0.3813904 , 0.38100025, 0.38057463], [0.37330364, 0.37319723, 0.3731263 , ..., 0.3739066 , 0.37351645, 0.37355191], ... [0.14219233, 0.14527807, 0.14765445, ..., 0.13499227, 0.13665928, 0.13949674], [0.19482726, 0.19606865, 0.19720363, ..., 0.19117402, 0.19280556, 0.19429523], [0.15581215, 0.15581215, 0.15581215, ..., 0.15581215, 0.15581215, 0.15581215]], [[0.48094986, 0.48094986, 0.48094986, ..., 0.48094986, 0.48094986, 0.48094986], [0.46825222, 0.46811035, 0.46796847, ..., 0.46867784, 0.46857143, 0.46835862], [0.46048467, 0.46091029, 0.46115856, ..., 0.45927874, 0.45942062, 0.45984624], ..., [0.09569342, 0.09814073, 0.10037523, ..., 0.08898991, 0.09065692, 0.09324611], [0.12272025, 0.12350055, 0.12428085, ..., 0.12037934, 0.12140792, 0.12233009], [0.09392 , 0.09392 , 0.09392 , ..., 0.09392 , 0.09392 , 0.09392 ]]]) 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 * month (month) int64 96B 1 2 3 4 5 6 7 8 9 10 11 12
### Exercise 2.2:
# Defining levels and colormap:
levels = [0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40]
colormap = "YlGnBu"
# Creating a figure with 2 subplots:
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16,9), subplot_kw={'projection': ccrs.Robinson()})
im1 = monthly_avg_pre.sel(month=1).plot(ax=ax1, transform=ccrs.PlateCarree(), cmap=colormap, vmin=0, vmax=40,
levels=levels, add_colorbar=False)
ax1.coastlines()
ax1.gridlines()
ax1.set_title("January")
im2 = monthly_avg_pre.sel(month=8).plot(ax=ax2, transform=ccrs.PlateCarree(), cmap=colormap, vmin=0, vmax=40,
levels=levels, add_colorbar=False)
ax2.coastlines()
ax2.gridlines()
ax2.set_title("August")
# Adding a shared colorbar and a title to the plot:
cbar = fig.colorbar( im1, ax=[ax1, ax2], orientation='vertical',
fraction=0.02, # Adjusting width of the colorbar
pad=0.03, # Adjusting the space between colorbar and plots
label='Average Daily Precipitation [mm/d]')
fig.suptitle("Monthly Average Precipitation (ERA5 1979-2018)", x=0.7, size=12)
plt.show()
Exercise 2 - Questions:¶
- Describe the location of the ITCZ in January and August. Without going into the details, explain (in one or two sentences):
- In General the ITCZ can always be found near the equator in the tropics. In August the ITCZ is quite a bit further north than in Jannuary. A really distinct difference in the position of the ITCZ can befound over south-east-asia, where the ITCZ is north of the equator in August and south of it in January. The ITCZ shifts seasonally due to the Earth's axial tilt, causing variations in solar heating, which, in turn influences the position of the zone of maximum convection.
- In General the ITCZ can always be found near the equator in the tropics. In August the ITCZ is quite a bit further north than in Jannuary. A really distinct difference in the position of the ITCZ can befound over south-east-asia, where the ITCZ is north of the equator in August and south of it in January. The ITCZ shifts seasonally due to the Earth's axial tilt, causing variations in solar heating, which, in turn influences the position of the zone of maximum convection.
- Describe the precipitation seasonality in West Africa and in India. Name the phenomenon at play:
- Firstly, the seasonality of the precipitation is caused by the shift oft the ITCZ over the year. In August the ITCZ is futher north over India and West Africa, so there is a lot of Precipitation in this region. In January the ITCZ is further south and so India and West Africa have less precipitation. Additionally, as discussed in the lecture a phenomena called monsoon (Indian Summer Monsoon or West African Monsoon respectively) which is mainly caused by the different heat capacities between ocean and land and the resulting wind direction, is induced by this shift of the ITCZ. The result is a rainy season in Summer and a dry season in Winter for these two regions.
Slides 25-27 fronm Chapter 2 were especially helpful to answer these questions.
Part 3
Sea-level pressure and surface winds:
Open the file containing the surface winds (u10
and v10
) and sea-level pressure (msl
).
ds3 = xr.open_dataset(r'data/ERA5_LowRes_Monthly_uvslp.nc')
ds3
<xarray.Dataset> Size: 1GB 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: u10 (time, latitude, longitude) float64 444MB ... v10 (time, latitude, longitude) float64 444MB ... msl (time, latitude, longitude) float64 444MB ... Attributes: Conventions: CF-1.6 history: 2019-11-24 19:42:05 GMT by grib_to_netcdf-2.14.0: /opt/ecmw...
Exercise 3:¶
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).
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)
### Exercise 3.1:
# Calculating the temporal and zonal average of sea-level pressure:
p_zonal_avg = ds3.msl.mean(dim=['time','longitude'])
p_zonal_avg = p_zonal_avg / 100 # Converting from [Pa] to [hPa]
# Creating the line-plot:
plt.plot(ds3.latitude, p_zonal_avg, linewidth=2, label='Zonal Average Pressure')
plt.axhline(y=1013, linewidth=2, linestyle='--', color='black', label='Standard Atmosphere Pressure [1013 hPa]')
# Adding lables and a legend:
plt.title('Temporal and Zonal Average Sea-level Pressure (ERA5 1979-2018)')
plt.xlabel('latitude')
plt.ylabel('Mean Sea-level Pressure [hPa]')
plt.legend()
plt.show()
### Exercise 3.2:
# Computing the temporal and zonal averages of windspeed for east/west and north/south direction:
u_zonal_avg = ds3.u10.mean(dim=['time','longitude'])
v_zonal_avg = ds3.v10.mean(dim=['time','longitude'])
# Creating the plot including the line for 0 wind speed
plt.plot(ds3.latitude, u_zonal_avg, linewidth=2, color='darkgreen', label='Zonal Average Wind u (West/East)')
plt.plot(ds3.latitude, v_zonal_avg, linewidth=2, color='purple', label='Zonal Average Wind v (North/South)')
plt.axhline(linewidth=2, color='black',linestyle='--', label = 'Reference Line at 0')
# Adding Labels and a legend:
plt.title('Temporal and Zonal Average Wind Speed 10m over Ground (ERA5 1979-2018)')
plt.xlabel('Latitude')
plt.ylabel('Average Wind [m/s]')
plt.legend()
plt.show()
Exercise 3 - 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.
- In the extra tropical convergence zone (ETCZ) the high solar radiation causes a rise of moist, warm air, which leads to a low near the equator. A pronounced subtropical-high (around 30° latitude in both hemispheres) next to ETCZ is caused by sinking air of the Hadley cell. Furthermore, a subpolar-low (Around 60° latitude in both hemispheres) is caused when warm air from the mid-latitudes meets cold polar air, creating a region of strong temperature contrast (Ferrel-Cell is thermally indirect cell). The subpolar-low is a lot stronger on SH because of a stronger temperature gradient and less land surface. Finally, a polar-high near the poles is prevalent, because cold, dense air sinks over the poles, creating regions of high pressure (Polar-Cell).
- In the extra tropical convergence zone (ETCZ) the high solar radiation causes a rise of moist, warm air, which leads to a low near the equator. A pronounced subtropical-high (around 30° latitude in both hemispheres) next to ETCZ is caused by sinking air of the Hadley cell. Furthermore, a subpolar-low (Around 60° latitude in both hemispheres) is caused when warm air from the mid-latitudes meets cold polar air, creating a region of strong temperature contrast (Ferrel-Cell is thermally indirect cell). The subpolar-low is a lot stronger on SH because of a stronger temperature gradient and less land surface. Finally, a polar-high near the poles is prevalent, because cold, dense air sinks over the poles, creating regions of high pressure (Polar-Cell).
- Similarly, explain the direction and strength of the zonal and meridional winds on earth (tip: the sea-level pressure plot helps)
- Zonal winds are predominantly west-to-east in the mid-latitudes due to the Coriolis effect and strong pressure gradients between subtropical highs and subpolar lows. In the tropics, easterly trade winds dominate, driven by the pressure gradient between the subtropical highs and the equatorial low (ITCZ). Meridional winds are generally weaker, occurring where air moves poleward or equatorward, such as in the Hadley and Polar cells. When comparing the wind plot with the pressure graph, it becomes clear that the areas with the strongest wind are the same areas, where the pressure-gradient is the largest (For Example at lat=-50).
We used th slides 13-22 of Chapter 2 in the lecture slide and chapter 5.4. in the book of Marshall & Plumb as help to answer these questions.
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(r'data/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)
df
year | month | decimal | average | average_unc | trend | trend_unc | |
---|---|---|---|---|---|---|---|
date | |||||||
1979-01-01 | 1979 | 1 | 1979.042 | 336.56 | 0.11 | 335.92 | 0.10 |
1979-02-01 | 1979 | 2 | 1979.125 | 337.29 | 0.09 | 336.26 | 0.10 |
1979-03-01 | 1979 | 3 | 1979.208 | 337.88 | 0.11 | 336.51 | 0.10 |
1979-04-01 | 1979 | 4 | 1979.292 | 338.32 | 0.13 | 336.72 | 0.11 |
1979-05-01 | 1979 | 5 | 1979.375 | 338.26 | 0.04 | 336.71 | 0.11 |
... | ... | ... | ... | ... | ... | ... | ... |
2024-05-01 | 2024 | 5 | 2024.375 | 423.82 | 0.10 | 422.19 | 0.06 |
2024-06-01 | 2024 | 6 | 2024.458 | 423.11 | 0.10 | 422.54 | 0.06 |
2024-07-01 | 2024 | 7 | 2024.542 | 421.42 | 0.10 | 422.74 | 0.06 |
2024-08-01 | 2024 | 8 | 2024.625 | 419.99 | 0.10 | 422.85 | 0.06 |
2024-09-01 | 2024 | 9 | 2024.708 | 420.26 | 0.10 | 423.09 | 0.06 |
549 rows × 7 columns
Exercise 4:¶
Prepare three plots:
- plot the monthly global CO2 concentration as a function of time.
- plot the annual average timeseries of global CO2 concentration as a function of time.
- 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).
Questions:
- Describe and explain the annual cycle of CO2 concentrations
- 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.
- 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.
### Exercise 4.1:
# Plotting the global CO2 concentration over the months:
plt.plot(df["average"], label="CO2-Concentration", color="brown")
# Adding Labels and a legend:
plt.title('Global CO2 Concentration')
plt.xlabel('Year')
plt.ylabel('CO2-Concentration [ppm]')
plt.legend()
plt.grid()
plt.show()
### Focussing on one annual cycle of the CO2-concentration:
plt.plot(df["average"].groupby(df.month).mean(), label="CO2-Concentration", color="green")
# Adding Labels and a legend:
plt.title('Annual cycle of the global CO2 Concentration')
plt.xlabel('Month')
plt.ylabel('CO2-Concentration [ppm]')
plt.legend()
plt.grid()
plt.show()
### Exercise 4.2:
# Computing the average CO2 concentration per year:
annual_avg = df.groupby("year")["average"].mean()
# Creating a correspondant plot:
plt.plot(annual_avg, label="CO2-Concentration", color="brown")
# Adding Labels and a legend:
plt.title('Annual Average of Global CO2 Concentration')
plt.xlabel('Year')
plt.ylabel('CO2-Concentration [ppm]')
plt.legend()
plt.grid()
### Exercise 4.3:
#Loading temperature dataset once again and computing temperature averages:
ds = xr.open_dataset(r'data/ERA5_LowRes_Monthly_t2m.nc')
# Compute annual global average temperature (unweighted):
avg_temp = ds.t2m.mean(dim=["longitude", "latitude"])
annual_avg_temp = avg_temp.groupby("time.year").mean() - 273.15 # Convert to Celsius
# Meridional weighting as discussed in class:
weights = np.cos(np.deg2rad(ds.latitude))
weights /= weights.sum() # Normalize weights
# Compute meridionally weighted temperature to adress grid distortion:
zonal_mean_temp = ds.t2m.mean(dim="longitude") # Zonal mean across longitude
zonal_mean_temp_c = zonal_mean_temp - 273.15 # Convert to Celsius
weighted_zonal_mean_temp = zonal_mean_temp_c * weights # Apply latitude weights
weighted_global_temp = weighted_zonal_mean_temp.sum(dim="latitude") # Global weighted sum
# Computing annual weighted mean temperature:
weighted_avg_temp = weighted_global_temp.groupby("time.year").mean()
# Creating a plot with 2 y-axis:
fig, ax1 = plt.subplots(figsize=(12, 7))
# Plotting the Temperature on the primary y-axis:
line1, = ax1.plot(annual_avg, color="brown", label="CO2-Concentration [ppm]")
ax1.set_xlabel("Year")
ax1.set_ylabel("CO2-Concentration [ppm]", color="brown")
ax1.tick_params(axis="y", labelcolor="brown")
# Create the secondary y-axis:
ax2 = ax1.twinx()
# Plotting the CO2 consentration on the secondary y-axis:
line2, = ax2.plot(weighted_avg_temp.year, weighted_avg_temp, color="green", label="Temperature [°C]")
ax2.set_ylabel("Temperature [°C]", color="green")
ax2.tick_params(axis="y", labelcolor="green")
# Add title & legend:
plt.title("Annual Average Timeseries of global CO2-Concentration and 2m Temperature")
plt.grid()
lines = [line1, line2] # Adding a common legend
labels = [line.get_label() for line in lines]
fig.legend(lines, labels, loc="lower center", ncol=2)
plt.show()
Exercise 4 - Questions:¶
- Describe and explain the annual cycle of CO2 concentrations:
- If one looks at the first plot of this exercise, there is a distinctive, periodical pattern observable. In spring (April/May) a maximum in the CO2-Concentration can be found, in autumn (September/October) on the other hand, a minimum is observed. This can be traced back to the unequal distribution of landmass between the two hemispheres. On the northern hemisphere there is a lot of land for plants to grow and bind CO2 in the process. This happens of course mainly in the growing periode, from Spring to Autumn. When the vegetative period ends on northern hemisphere, the plants on the SH cannot contain the same level of a CO2 sink and therefore the concentration rises in the winter-half-year.
- 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.
- In the preindustrial area (1750), before the industrial revolution changed the life of humans on the planet, a CO2-Concentration of 278ppm is estimated, according to ice-core measurments.
- Between 1980 and 1985 the average CO2-Concentration increased by around 6.6 ppm as computed below. This means an annual increase of around 1.33 ppm per year.
- In the time between 2016 and 2021 the concentration increased by about 11.6 ppm which corresponds to an annual increase of around 2.32 ppm every year. It is important to keep in mind, that this is only a simple average over the years. It may be, that the increase was stronger in one year than in another, but the almost linear graph from the plot suggests, that our method is appropriate.
- 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.
- With the global increase in CO2, also the temperature rises worldwide, which is generally known as the greenhouse-effect. Of course the variability in the temperature is much higher than for the CO2 concentration since a lot of factors contribute to the average temperature in a year, but the trend is very clearly connected.
- Besides greenhouse gases like CO2 and methan, the albedo-effect can influence the temperature on a global scale as well. It is a measure for the reflectivity of the surface, which means that darker surface due to melting of ice-sheets increases the temperature further (positive feedback). Moreover, as discussed in previous exercises, ocean currents and water temperatures can influence weather patterns and therfore temperature all over the globe. Prominent examples are the NAO, or phenomens like El Nino / La Nina. Finally, a change in incoming solar radiation would necessarily influence the global average temperature. This could either happen due to noise and cyclic patterns in the suns activity as well as major volcanic eruptions that block the suns radiation before reaching the surface.
Useful links and sources:
# Calculations to answer Question 2 of Exercise 4:
df_1980 = df[df["year"] == 1980]
df_1985 = df[df["year"] == 1985]
df_2016 = df[df["year"] == 2016]
df_2021 = df[df["year"] == 2021]
avg_co2_1980 = df_1980["average"].mean()
avg_co2_1985 = df_1985["average"].mean()
avg_co2_2016 = df_2016["average"].mean()
avg_co2_2021 = df_2021["average"].mean()
co2_inc_80_85 = avg_co2_1985 - avg_co2_1980
co2_inc_16_21 = avg_co2_2021 - avg_co2_2016
print(co2_inc_80_85)
print(co2_inc_16_21)
6.625833333333333 11.642500000000041
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?
1. Selected Indicator's and Geography:
- Days A Year With High Heat Stress / Split, Croatia
- Annual Maximum Temperature / Croatia
- PLant Species At Risk From Local Extinction / Croatia
2. Research Question:
The aim of the following research and data analysis is to estimate the development of extremely hot temperatures in the mediteranean area, particularily in the popular tourist destination croatia.
- How drastically will the average maximum temperature increase over the next decades, considering different scenarios regarding which climate policies get enacted now?
- How often will local inhabitants and vacationer face high heat stress in Split, one of Europes hottest places in summer, and also one of the most visited?
- What impact does the global warming have on the prevalent plant species in croatia and what could be managed to preserved if stricter climate policies come into operation?
Answering these questions, should give us an insight about how our holiday at the sea might look like in 30 years. Maybe the north of europe and high altitude locations with more moderate temperatures will be more attractive by then...
3. Conduct the Analysis:
At first, we want to examine the annual average of the daily maximum temperature in croatia as a whole. To compare different possibilities regarding climate protection and implementation of renewable energies we select three scenarios: 2020 Climate Politics, which assumes that no further climate action is taken beyond the climate policies that were in place in 2020. Delayed Climate Action, which is based on a delayed decarbonisation in the 2030s. Fossil fuel use never ends but is instead compensated for with high amounts of carbon dioxide removal. Finally, the Shifting Pathway scenario explores how a broader shift towards sustainable development can be combined with stringent climate policies and serves as a kidn of best case scenario here.
Short Analysis:
- When looking at the first graph, it becomes clear that with a high likelihood, the average maximum temperature will rise in any case, in an order of magnitude of around 1°C. Adding this to the 2°C increase that has already taken place up to now, comparing with pre-industrial level, the situation for humans and plants will aggravate even more. Adapting to these even hotter conditions will be necessary for tourists, local inhabitants and plant-life alike. But after 2050, the decisions that are taken nowadays in politics will severly influence the further developement. If no additional actions are taken, temperature will continuously increase by more than 3 degrees till the end of this century, as can be seen in the blue curve. The Delayed Climate Action and Shifting Pathways, sketch a stagnant temperature curve after 2050 or even a slight decrease close to a level we experience already today.
- The second plot substantiates these findings by giving an idea how likely a maximum temperature increase of more than 2°C is. What is prominent, is again the huge difference in scenarios in 2100, whereas before they are realtively tight together. Overall, if we take the right actions now, the chances we stay below a temperature increase of 2°C in croatia are quite good, since the unavoidably risk is at only at 17%.
After this broad overview over the temperature development, we now want to look specifically at the days of high heat stress in the city of Split. This is defined as the number of days per year where wet bulb globe temperature goes over 28°C. The wet bulb globe temperature is a measure of heat stress in direct sunlight, which takes into account temperature, humidity, wind speed, sun angle and cloud cover.
Short Analysis:
- Similarily to the temperature increase in croatia as a whole, also the days with high heat stress in Split will increase until 2050 pretty certainly. In the Shifting Pathways best-case-scenario though, we can keep the burden of heat stress at a similar level to nowadays. Without further climate policies on the other hand, we could experience an increase of almost 40 days with high heat stress, which is a severe threat for the health of the population as well as for the tourism-economy. Even if the uncertainties, shown in the shaded bars on the right, are really large, this should ring the alarm bells in the society.
Lastly, we want to examine the influence of the temperature increase on the diverse flora in croatia with more than 5000 different plant species. One thing is for sure, heat stress deosn't only affect human life, but also decides over extinction of plant species.
Short Analysis:
- As we can see from the first plot, from 2050 onwards there is a real threat, that over HALF! of croatias plant species could face local extinction. The good news though is, that the unavoidable risk is really low with only 4% if we would follow the stringent climate policies assumed in the Shifting Pathways scenario. In the worst case, at the end of the century the chances for this biological catastrophe would rise to about 85%. Therefore it is of highest importance to act now, because when looking at a more realistic scenario of Delayed Climate Action a lot of this risk can be avoided.
- On the map below we can see, that especially in the back-country of croatia and in the mountainous regions, the diverse flora could lose severl hundred species. This might be because of the buffering effect of the adriatic sea, which reduces the immediate heat stress increase a bit.
3.1. Custom-Plots and further analysis:
- With the first plot, we want to examine the correlation between the average maximum temperature of croatia and the days with heat stress in Split, including a comparison of best- and worst-case-scenarios. At a first glance it might seem obvious, that a higher average maximum temperature also increases the days with heat stress. But heat stress is a complex condition, arising from the body's struggle to regulate its temperature. Various factors influence the human body’s ability to keep its core temperature within certain boundaries, such as high ambient temperatures, humidity, physical activity, and inadequate fluid intake.
[https://climate.copernicus.eu/heat-stress-what-it-and-how-it-measured].
Therfore, it does make sense to look at the correlation of average maximum temperature and heat stress in croatia. Is this a genrally linear, quadratic or exponential relationship? How big is the difference between the Current Policies and Shifting Pathways scenario? And how deos the correlation of the two parameters evolve, when looking at the temporal scale? We hope to answer some of these questions with the analysis below:
### Reading in the downloaded Data:
heat_stress_h_sp = pd.read_csv(r'../climate/data/impact-time_split_sp_urbclim-WBGT-dayover28_0.5_present-day.csv')
heat_stress_e_sp = pd.read_csv(r'../climate/data/impact-time_split_sp_urbclim-WBGT-dayover31_0.5_present-day.csv')
annual_avg_temp_sp = pd.read_csv(r'../climate/data/impact-time_HRV_sp_terclim-txx_0.5_present-day.csv')
heat_stress_h_curpol = pd.read_csv(r'../climate/data/impact-time_split_curpol_urbclim-WBGT-dayover28_0.5_present-day.csv')
heat_stress_e_curpol = pd.read_csv(r'../climate/data/impact-time_split_curpol_urbclim-WBGT-dayover31_0.5_present-day.csv')
annual_avg_temp_curpol = pd.read_csv(r'../climate/data/impact-time_HRV_curpol_terclim-txx_0.5_present-day.csv')
### Data preparation:
# Only using the 10-years steps (2020, 2030, ...) and not the 5-years steps in between to achieve compatibility to the heat stress data:
annual_avg_temp_sp = annual_avg_temp_sp[annual_avg_temp_sp['year'] % 2 == 0]
annual_avg_temp_curpol = annual_avg_temp_curpol[annual_avg_temp_curpol['year'] % 2 == 0]
# Defining time-scale and the two x-axis for the plot:
years = annual_avg_temp_sp["year"]
x1 = annual_avg_temp_sp["terclim-txx_mean"]
x2 = annual_avg_temp_curpol["terclim-txx_mean"]
### Creating a Correlation-Plot:
# Defining a range for the color gradient:
colors = np.linspace(2020, 2100, num=9)
# Creating the figure with 2 subplots:
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15,7), sharey=True)
# Scatter-Plot with connecting lines for the Shifting-Pathways scenario:
s1 = ax1.scatter(x1, heat_stress_h_sp["urbclim-WBGT-dayover28_mean"], c=colors, cmap='Blues_r', s=100, edgecolor='k', label='High Heat Stress')
ax1.plot(x1, heat_stress_h_sp["urbclim-WBGT-dayover28_mean"], linestyle='--', alpha=0.6, color='gray') # High Heat Stress
s2 = ax1.scatter(x1, heat_stress_e_sp["urbclim-WBGT-dayover31_mean"], c=colors, cmap='Oranges_r', s=100, edgecolor='k', label='Extreme Heat Stress')
ax1.plot(x1, heat_stress_e_sp["urbclim-WBGT-dayover31_mean"], linestyle='--', alpha=0.6, color='gray') # Extreme Heat Stress
# Scatter-Plot with connecting lines for the Current-Policies scenario:
s3 = ax2.scatter(x2, heat_stress_h_curpol["urbclim-WBGT-dayover28_mean"], c=colors, cmap='Blues_r', s=100, edgecolor='k', label='High Heat Stress')
ax2.plot(x2, heat_stress_h_curpol["urbclim-WBGT-dayover28_mean"], linestyle='--', alpha=0.6, color='gray') # High Heat Stress
s4 = ax2.scatter(x2, heat_stress_e_curpol["urbclim-WBGT-dayover31_mean"], c=colors, cmap='Oranges_r', s=100, edgecolor='k', label='Extreme Heat Stress')
ax2.plot(x2, heat_stress_e_curpol["urbclim-WBGT-dayover31_mean"], linestyle='--', alpha=0.6, color='gray', ) # Extreme Heat Stress
# Adding Labels, Title and a colorbar for axis 1:
ax1.set_title("Shifting Pathways", fontsize=16)
ax1.set_xlabel("Average Maximum Temperature Change [°C]")
ax1.set_ylabel("Change of Days with Heat Stress")
ax1.legend(loc='upper left')
cbar1 = plt.colorbar(s1, ax=ax2, fraction=0.04, pad=0.02) # Adding the colorbar after axis 2
cbar1.set_label("Year")
# Adding Labels, Title and a colorbar for axis 2:
ax2.set_title("Future Policies", fontsize=16)
ax2.set_xlabel("Average Maximum Temperature Change [°C]")
ax2.legend(loc='upper left')
cbar2 = plt.colorbar(s2, ax=ax2, fraction=0.0427, pad=0.02)
cbar2.set_ticks([]) #Removing the numbers from the colorbar (Otherwise duplicated)
#Adding a Grid and plotting in a tight layout:
ax1.grid()
ax2.grid()
plt.tight_layout() # Reduces the gap between the two subplots
# Add a main title to the figure
fig.suptitle("Correlation of Heat Stress and Maximum Temperature", fontsize=18, y=1.05)
plt.show()
Short Analysis:
- Lets focus first on the right graph, depicting the evolution assuming that no further climate protection ations are taken. We can see a fairly linear relation between increasing average maximum temperature in Croatia and the amount of days with high heat stress. The continuous increase of temperature over time would cause an addition of 15 days with high heat stress until 2050 and even 40! till the end of the century.
Of course, the even more extreme heat stress does not increase quite as fast as the blue curve, but we can see a rather non-linear evolvement over time. The incline in extreme heat stress days gets even bigger for the higher temperature values in the 2080s, & 90s. - If we now compare this to the Shifting Pathways scenario, the first thing that one can see is the dramatically reduced magnitude of the increase in heat stress days. Around 2050, when the heat stress would be most prevalent, only a slight increase of around 8 days would be expected. Because after that, the stringent policies would show effect and reduce heat stress again, reaching similar levels to what we experience now already. In this case, a more or less linear relationship between average maximum temperature and heat stress days cn be found for both the extreme and the high events. Basically, as the temperature increases, the amount of heat stress days grows larger, and after that both parameters decline again. One little detail we wanted to emphasize, is the small delay with which the heat stress reacts on the temperature decrease. When looking close enough and ignoring the uncertainties for now, one can see that the days with high heat stress stay on a similar level for 30 years in the middle of the 21st cetury, despite the distinct temperature decrease that has already taken place.
- All in all, the presumed strong correlation between the two paramters has been confirmed through our plots. The differences between the two scenarios are enormous and if we don't enact much more strict climate policies, Croatia - it's inhabitants and visitors - will suffer regularily from sever heat stress in the summer months.
3.2. Second Reasearch topic and Plot:
- We have already seen the impact of climate change on the local plant species in croatia earlier. The whole biological ecosystem is similar to the atmosphere, a complex and interacting construct. When looking thorugh the different data options on the website we discovered, that there is a difference between the option plant/pollinator/timber species at risk and the option species as a whole at risk. Hence, some kind of interaction and enhancement between these classes have to take place. Therefore we want to combine the data from plant, timber and pollinator species at risk, to determine a composite risk score, that regards the interaction of these different parts of the ecosystem. With the help of this risk score we can introduce a joint estimate on how many species in croatia are at risk and compare this to the data of the Climate Risk Dahsboard in this category. Of course much more detailed knowledge regarding the interactions of biological life would be necessary to determine an exact definition of the metric used for this score. Therefore, we will just estimate a simple relationship that yields very similar results compared to the Climate Risk Dashboard data, and not focus too much on the biological correctness.
- In the following we will use the data of Delayed Climate Action, which in our opinion could be a realistic scenraio from the looks of it.
### Reading in the downloaded Data:
plant = xr.open_dataset(r'../climate/data/impact_geo_gs_HRV_biodiversity-plantae-srr_0.5_recent-past_2050_0.1666666666666572.nc')
pollinator = xr.open_dataset(r'../climate/data/impact_geo_gs_HRV_biodiversity-plantae-srr_0.5_recent-past_2050_0.1666666666666572.nc')
timber = xr.open_dataset(r'../climate/data/impact_geo_gs_HRV_biodiversity-plantae-srr_0.5_recent-past_2050_0.1666666666666572.nc')
species = xr.open_dataset(r'../climate/data/impact_geo_gs_HRV_biodiversity-srr_0.5_recent-past_2050_0.1666666666666572.nc')
# Define weights for additive and interaction components
alpha = 0.7 # Weight for individual contributions
beta = 0.3 # Weight for interaction effects
# Calculate the additive and interaction terms
additive_term = (plant['biodiversity-plantae-srr'] + timber['biodiversity-plantae-srr'] + pollinator['biodiversity-plantae-srr']) / 3
interaction_term = (plant['biodiversity-plantae-srr'] * timber['biodiversity-plantae-srr'] +
timber['biodiversity-plantae-srr'] * pollinator['biodiversity-plantae-srr'] +
plant['biodiversity-plantae-srr'] * pollinator['biodiversity-plantae-srr'])
# Calculate combined risk with interactions
combined_risk_factor = (alpha * additive_term + beta * interaction_term)*100
climate_desk_data = species["biodiversity-srr"] * 100
import cartopy.feature as cfeature
# Plot with coastlines
fig, (ax1, ax2) = plt.subplots(ncols=2, subplot_kw={'projection': ccrs.PlateCarree()}, figsize=(20, 8))
# Plot the combined risk factor
combined_risk_factor.plot(ax=ax1, cmap='YlOrRd', transform=ccrs.PlateCarree(), vmin=0, vmax=70, levels=8, add_colorbar = False)
climate_desk_data.plot(ax=ax2, cmap='YlOrRd', transform=ccrs.PlateCarree(), vmin=0, vmax=70, levels=8, cbar_kwargs={'label': 'Risk Level [%]'})
# Add coastlines
ax1.coastlines(resolution='10m', color='black', linewidth=1)
ax2.coastlines(resolution='10m', color='black', linewidth=1)
# Optional: Add other map features
ax1.add_feature(cfeature.BORDERS, linestyle='--', edgecolor='gray')
ax1.add_feature(cfeature.LAND, color='lightgray', alpha=0.5)
ax2.add_feature(cfeature.BORDERS, linestyle='--', edgecolor='gray')
ax2.add_feature(cfeature.LAND, color='lightgray', alpha=0.5)
# Title and labels
ax1.set_title("Combined Risk Factor")
ax2.set_title("Climate Desk Data")
fig.suptitle("Species At Risk of Local Extinction in Croatia until 2050", fontsize=18, y=1.05)
plt.tight_layout()
plt.show()
Short Analysis:
- Comparing these two plots we can immediately recognise the similar patterns, which means that of course the individual categories contribute a lot to the whole category of species at risk from local extinction in 2050. After some experimenting we found, that the best combination of parameters is a alpha of 0.7 and a beta of 0.3 to weight the additive and the interaction term. Especially the eastern region with high percentages is captured really well, whereas the risk near the coast is a bit too low in our computations. In general, we see alarmingly high risks - especially in the eastern part - considering this is far from the worst-case-scenario. Additionally we can confirm, that the interactions in the biosphere are significant and have to be considered in order to make plausible predictions.
3.3. Other References to our Research:
- https://link.springer.com/article/10.1007/s00484-019-01742-w
This paper about the Intensification of thermal risk in Mediterranean climates was published in 2019 in the International Journal of Biometeorology and deals also with increasing temperatures in the mediterranean as well as heat stress in cities. The study focussed on Athens, which has a similar climate to Split, and analysed the increase of different heat stress indexes over the past 80 years. - https://www.sciencedirect.com/science/article/pii/S0143622816302946 This second paper deals with Mediterranean habitat loss under future climate conditions and tries to project the evolution of biological diversity in the most rich biodiversity region in Europe - the Mediterranean. The work was published in 2016 and deals with historical climate data as well as future emission scenarios.
4. Answer Guiding Questions to your Research Question - Conclusion:
In the following we just want to answer our initial research questions with the most important findings from our analysis. A detailed and targeted explanation of the plots can be found directly beneath the graphs.
- How drastically will the average maximum temperature increase over the next decades, considering different scenarios regarding which climate policies get enacted now?
We have seen that in the next 2-3 decades temperatures will rise cintinuously (Round about 1°C). What happens then is highly dependent on our current actions to prevent further greenhous-gas emissions. From a drastic and dangerous increse of 3°C till the end of the century up to a return of the average maximum temperature to a similar level we experience today a lot is possible. - How often will local inhabitants and vacationer face high heat stress in Split, one of Europes hottest places in summer, and also one of the most visited?
Connected to the development of the average maximum temperature, also days with high or extreme heat stress will increase over the next decades by about 15 days or so. 2050 once again will be a marker of our current actions, as the amount of heat-stress-days either stagnates or increases ceaselessly. Heat stress will become even more of a problem in the Mediterranean, imposing a threat on the local population (especially older invalid people) as well as on the so important tourism-branch. Our personal guess is, that because of the extreme heat waves, many tourists will seek for alternatives in the north of europe or in the mountains and avoid the extreme summer heat of Croatia. - What impact does the global warming have on the prevalent plant species in croatia and what could be managed to be preserved if stricter climate policies come into operation?
Finally we have looked at the risk of species in croatia that could face local extinction because of climate change. Especially in the eastern part worrying 60% of all native species could no longer be there in 2050. The avoidable risk however, is with over 80% extremely high - it depends on us. Furthermore we have seen, that the extinction of one plant group has an influence on the other parts of the biosphere and therfore excels this alarming trend.
Alltogether, the climate change is especially noticable in the Mediterranean. Plants, inhabitants and tourists will all face the inconvencies of rising temperatures in the coming decades. Let's see how willing we are to protect our environment and how we will adapt to the upcoming challenges...