Exploring the regional response to a warmer world

This notebook allows you to explore the regional response to a warmer world at a series of global warming levels (changes in global mean temperature relative to the historical baseline): 1.5˚, 2˚, 3˚, and 4˚C. Warming levels can be used to explore future possible trajectories of any climate variable of interest for a given increase in global mean temperature.

Because warming levels are defined based on amount of global mean temperature change, they can be used to compare possible outcomes across multiple scenarios or model simulations. The same total warming benchmark may be reached at different times in different simulations. Warming levels are often used in international policy discussions, such as the Paris Agreement to limit warming to 2˚C.

For a given warming level, we will then use this tool to:

  • Examine the range of possibility in maps of regional changes in temperature (or any variable of interest) across climate models dynamically downscaled to-date

  • View the change in a typical meteorological year (a dataset of a full annual cycle of hourly climate data used to capture mean conditions over a multi-year period, often used in renewable energy production models. For more information see Step 1)

  • Map day-of-year/time-of-day combinations with especially large increases in temperature, and overlay the locations of power plants to help identify vulnerable assets

Step 0: Setup

Import libraries needed.

import panel as pn

import climakitae as ck

Additionally, get set up to make the computing go faster, by executing this cell:

from climakitae.cluster import Cluster
cluster = Cluster()
cluster.adapt(minimum=0, maximum=16)
client = cluster.get_client()

Launch the tools in the Clima-Kit-AE library:

app = ck.Application()

Step 1: Explore data

Launch a panel to view localized projections under varying levels of warming. First, select a warming level, variable, and spatial area of interest. The right panel will show projected changes in global mean temperature — use the drop down menu to visualize when simulations of a scenario of interest will reach the specified global warming level. Scenarios shown are Shared Socioeconomic Pathways (SSPs): ranging from low (SSP 1-1.9) to high (SSP 5-8.5) emissions trajectories.

Simulations of high emissions scenarios will generally reach a given warming level faster than simulations of lower emissions scenarios.

The bottom panel shows regional responses of the variable of interest for the selected warming level for each individual model simulation. You can also see an average, minimum, and maximum regional response across simulations.

The final tab shows a Typical Meteorological Year (TMY), which is a summary that best represents average conditions during the 30-year period centered on the global warming level selected. TMYs are often used as inputs into models of energy production estimates and building systems, because they summarize the typical conditions for each day of the year and hour of the day.


Step 2: Application

Prepare a map of the changes for a day and time when the largest temperature increases are projected, and overlay the locations of California power plants and substations on the map to identify vulnerable assets.

We’ll start by retrieving the same data shown above, making sure that it is hourly time-resolution:

app.selections.timescale = 'hourly'
my_data = app.retrieve()

Here we select a particular day of the year and time of day, based on inspection of the typical meteorological year difference plot in the explore panel in Step 1:

one_day = my_data.isel(time=(my_data.time.dt.dayofyear == 216))
one_hour = one_day.isel(time=(one_day.time.dt.hour == 23))

And format the information to be plotted as a difference from historical for a given warming level:

my_gwl = 3.0  # 3˚ global warming
plots = ck.explore.get_anomaly_data(one_hour, warmlevel=my_gwl)
plots.name = 'degrees warmer'

Force the data to be computed and ready to plot. This may take a minute.

plots = plots.compute()

Load some data that contains locations of power plants:

import geopandas as gpd

# URLs to shapefiles for example point data from CEC (power plants and substations available)
URLs = {
    'power_plants' : "https://opendata.arcgis.com/api/v3/datasets/4a702cd67be24ae7ab8173423a768e1b_0/downloads/data?format=geojson&spatialRefId=4326&where=1%3D1",
    'substations' : "https://cecgis-caenergy.opendata.arcgis.com/datasets/CAEnergy::california-electric-substations.geojson?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D"

# Download the desired data
power_plants = gpd.read_file(URLs['power_plants']).rename(columns = {'Lon_WGS84':'lon', 'Lat_WGS84':'lat'})

Finally, prepare the map, and display it with power plant locations overlaid.

import cartopy.crs as ccrs

gridded = plots.plot.pcolormesh('lon','lat', col='simulation',
                     transform=ccrs.PlateCarree(),subplot_kws={'projection': ccrs.Orthographic(-100,40)},
for ax in gridded.axes.flat:
    ax.scatter(power_plants.lon, power_plants.lat, transform=ccrs.PlateCarree(),s=0.2,c='k')

Step 3: Clean up