# Climate model projections from the ScenarioMIP of CMIP6#

## Overview#

This recipe is implemented into ESMValTool to evaluate the temperature and precipitation changes from the ScenarioMIP of CMIP6. It produces the original plots and tables of Tebaldi et al. (2021), https://doi.org/10.5194/esd-12-253-2021

## Available recipe and diagnostics#

Recipe is stored in esmvaltool/recipes/

recipe_tebaldi21esd.yml

Diagnostics are stored in esmvaltool/diag_scripts/tebaldi21esd/

calc_timeseries_across_realization_stddev_runave.ncl: computes time series of ensemble spreads (i.e., inter-member standard deviations). One dataset is used for resampling subsets of 10 members.

calc_cmip6_and_cmip5_pattern_diff_scaleT.ncl: computes the pattern difference between the CMIP6 multi-model mean change and the CMIP5 multi-model mean change.

calc_IAV_hatching.ncl: computes the interannual variability (IAV) over piControl runs, either over the whole time period or in chunks over some years.

calc_pattern_diff_scaleT.ncl: computes the map of multi-model mean change scaled by global T change.

calc_pattern_stippling_hatching.ncl: computes the map of multi-model mean change with stippling for significant region and hatching for non-significant region. Significant is where the multi-model mean change is greater than two standard deviations of the internal variability and where at least 90% of the models agree on the sign of change. Not significant is where the multi-model mean change is less than one standard deviation of internal variability.

calc_pattern_intermodel_stddev_scaleT.ncl: computes the intermodel standard deviation of the change scaled by global T change standard deviation of the change scaled by global T change

calc_pattern_interscenario_stddev_scaleT.ncl: computes the interscenario standard deviation of the change scaled by global T change

calc_pattern_stddev_scaleT.ncl: computes the standard deviation of the change scaled by global T change

calc_pattern_comparison.ncl: computes the difference between the patterns of multi-model mean change of two different scenarios (ex: SSP4-6.0 and SSP4-3.4)

calc_table_changes.ncl: computes the changes (mean and spreads) for the specified scenarios and time periods relative to the historical baseline.

calc_table_warming_level.ncl: computes the warming level crossing year (mean, five percent and ninety-five percent quantiles of crossing years) for specified scenarios and warming levels.

calc_timeseries_mean_spread_runave.ncl: computes multi-model time series of change against historical baseline for specified scenarios with spread. A running average with specified window is performed.

calc_timeseries_mean_spread_ssp4.ncl: computes multi-model time series of change against historical baseline for specified ssp434 and ssp460 with spread. A running average with specified window is performed.

calc_timeseries_mean_spread_ssp5.ncl: computes multi-model time series of change against historical baseline for ssp534-over and ssp585 with spread. A running average with specified window is performed.

plot_pattern.ncl: plots a pattern.

plot_table_changes: plots a table of the multi-model mean and spread for specified scenarios and periods.

plot_table_warming_level.ncl: plots a table of warming level crossing years for specified scenarios (columns) and warming levels (rows).

plot_timeseries_mean_spread_3scenarios.ncl: plots time series (multi- model mean and spread) for 3 scenarios.

plot_timeseries_mean_spread_constrained_projections.ncl: plot time series with brackets for constrained projections.

plot_timeseries_mean_spread.ncl: plot time series (multi-model mean and spread) for 5 scenarios.

plot_timeseries_mean_spread_rightaxis_5scen.ncl: plot time series (multi-model mean and spread) for 5 scenarios and with an additional right axis.

plot_timeseries_mean_spread_ssp4.ncl: plot time series for two ssp4 scenarios.

plot_timeseries_mean_spread_ssp5.ncl: plot time series for two ssp5 scenarios.

plot_timeseries_across_realization_stddev_runave.ncl: plot time series of inter-member standard deviation.

## User settings in recipe#

Script calc_timeseries_across_realization_stddev_runave.ncl

*Required settings for script*scenarios: list with scenarios included in figure

syears: list with start years in time periods (e.g. start of historical period and SSPs)

eyears: list with end years in time periods (end year of historical runs and SSPs)

begin_ref_year: start year of reference period (e.g. 1995)

end_ref_year: end year of reference period (e.g. 2014)

n_samples: number of samples of size 10 to draw among all the ensembles of sampled_model

sampled_model: name of dataset on which to sample

runave_window: size window used for the centered running average

Script calc_cmip6_and_cmip5_pattern_diff_scaleT.ncl

*Required settings for script*scenarios_cmip5: list of CMIP5 scenarios included in figure

scenarios_cmip6: list of CMIP6 scenarios included in figure

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

*Optional settings for script*percent: determines if difference expressed in percent (0, 1, default= 0)

Script calc_IAV_hatching.ncl

*Required settings for script*time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”) needs to be consistent with calc_pattern_stippling_hatching.ncl

*Optional settings for script*periodlength: length of period in years to calculate variability over, default is total time period

iavmode: calculate IAV from multi-model mean or save individual models (“each”: save individual models, “mmm”: multi-model mean, default), needs to be consistent with calc_pattern_stippling_hatching.ncl

Script calc_pattern_diff_scaleT.ncl

*Required settings for script*scenarios: list with scenarios included in figure

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

Script calc_pattern_stippling_hatching.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated interannual variability for stiplling and hatching

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”) needs to be consistent with calc_IAV_hatching.ncl

scenarios: list with scenarios to be included

periods: list with start years of periods to be included

labels: list with labels to use in legend depending on scenarios

sig: plot stippling for significance? (True, False)

not_sig: plot hatching for uncertainty? (True, False)

*Optional settings for script*seasons: list with season index if time_avg is “seasonalclim” (then seasons is required), DJF:0, MAM:1, JJA:2, SON:3

iavmode: calculate IAV from multi-model mean or save individual models (“each”: save individual models, “mmm”: multi-model mean, default), needs to be consistent with calc_IAV_hatching.ncl

percent: determines if difference expressed in percent (0, 1, default = 0)

Script calc_pattern_intermodel_stddev_scaleT.ncl

*Required settings for script*scenarios: list with scenarios included in figure

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

Script calc_pattern_interscenario_stddev_scaleT.ncl

*Required settings for script*scenarios: list with scenarios included in figure

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

Script calc_pattern_stddev_scaleT.ncl

*Required settings for script*scenarios: list with scenarios included in figure

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

Script calc_pattern_comparison.ncl

*Required settings for script*scenarios: list with two scenarios included in figure. The last scenario is taken as reference. For example to compute the difference of pattern between SSP4-6.0 and SSP4-3.4, the scenario ssp460 should be the last element of the list.

periods: list with start years of periods to be included

time_avg: time_avg: time averaging (“annualclim”, “seasonalclim”)

label: label of periods

Script calc_table_changes.ncl

*Required settings for script*scenarios: list with scenarios included in the table

syears: list with start years of time periods to include in the table

eyears: list with end years of the time periods to include in the table

begin_ref_year: start year of historical baseline period (e.g. 1995)

end_ref_year: end year of historical baseline period (e.g. 2014)

spread: multiplier of standard deviation to calculate spread with (e.g. 1.64)

label: list of scenario names included in the table

Script calc_table_warming_level.ncl

*Required settings for script*scenarios: list with scenarios included in the table

warming_levels: list of warming levels to include in the table

syears: list with start years of time periods (historical then SSPs)

eyears: list with end years of the time periods (historical then SSPs)

begin_ref_year: start year of historical baseline period (e.g. 1995)

end_ref_year: end year of historical baseline period (e.g. 2014)

offset: offset between current historical baseline and 1850-1900 period

label: list of scenario names included in the table

Script calc_timeseries_mean_spread_runave.ncl

*Required settings for script*scenarios: list of scenarios to include

syears: list with start years of time periods (historical then SSPs)

eyears: list with end years of the time periods (historical then SSPs)

begin_ref_year: start year of historical baseline period (e.g. 1986)

end_ref_year: end year of historical baseline period (e.g. 2005)

*Optional settings for script*runave_window: size of the window used to perform running average (default 11)

spread: how many standard deviations to calculate the spread with (default 1)

label: list of scenario names included in the legend

percent: determines if difference expressed in percent (0, 1, default = 0)

model_nr: whether to save number of models used for each scenario

Script calc_timeseries_mean_spread_ssp4.ncl

*Required settings for script*scenarios: list of scenarios to include: ssp434 and ssp460

syears: list with start years of time periods (historical then SSPs)

eyears: list with end years of the time periods (historical then SSPs)

begin_ref_year: start year of historical baseline period (e.g. 1986)

end_ref_year: end year of historical baseline period (e.g. 2005)

*Optional settings for script*runave_window: size of the window used to perform running average (default 11)

spread: how many standard deviations to calculate the spread with (default 1)

label: list of scenario names included in the legend

percent: determines if difference expressed in percent (0, 1, default = 0)

model_nr: whether to save number of models used for each scenario

Script calc_timeseries_mean_spread_ssp5.ncl

*Required settings for script*scenarios: list of scenarios to include: ssp534-over, ssp585

syears: list with start years of time periods (historical then SSPs)

eyears: list with end years of the time periods (historical then SSPs)

begin_ref_year: start year of historical baseline period (e.g. 1986)

end_ref_year: end year of historical baseline period (e.g. 2005)

*Optional settings for script*runave_window: size of the window used to perform running average (default 11)

spread: how many standard deviations to calculate the spread with (default 1)

label: list of scenario names included in the legend

percent: determines if difference expressed in percent (0, 1, default = 0)

model_nr: whether to save number of models used for each scenario

Script plot_pattern.ncl

*Required settings for script*scenarios: list of scenarios

periods: list with start years of periods

ancestors: variable and diagnostics that calculated field to be plotted

*Optional settings for script*projection: map projection, any valid ncl projection, default = Robinson

diff_levs: list with explicit levels for all contour plots

max_vert: maximum number of plots in vertical

max_hori: maximum number of plots in horizontal

model_nr: save number of model runs per period and scenario in netcdf to print in plot? (True, False, default = False)

colormap: alternative colormap, path to rgb file or ncl name

span: span whole colormap? (True, False, default = True)

pltname: alternative name for output plot, default is diagnostic + varname + time_avg

units: units written next to colorbar, e.g. (~F35~J~F~C)

sig: plot stippling for significance? (True, False)

not_sig: plot hatching for uncertainty? (True, False)

label: label to add in the legend

Script plot_table_changes.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of periods of interest

eyears: list of end years of periods of interest

label: list of labels of the scenarios

*Optional settings for script*title: title of the plot

Script plot_table_warming_level.ncl

*Required settings for script*scenarios: list of scenarios included in the figure

warming_levels: list of warming levels

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

offset: offset between reference baseline and 1850-1900

Script plot_timeseries_mean_spread_3scenarios.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_mean_spread_constrained_projections.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

baseline_offset: offset between reference period (baseline) and 1850-1900

lower_constrained_projections: list of lower bounds of the constrained projections for the scenarios included in the same order as the scenarios

upper_constrained_projections: list of upper bounds of the constrained projections for the scenarios included in the same order as the scenarios

mean_constrained_projections: list of means of the constrained projections for the scenarios included in the same order as the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_mean_spread.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_mean_spread_rightaxis_5scen.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

rightaxis_offset: offset of the right axis relative to the left axis

label: list of labels of the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_mean_spread_ssp4.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_mean_spread_ssp5.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

*Optional settings for script*title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

model_nr: save number of model runs per period and scenario

styleset: color style

spread: how many standard deviations to calculate the spread with, default is 1, ipcc tas is 1.64

Script plot_timeseries_across_realization_stddev_runave.ncl

*Required settings for script*ancestors: variable and diagnostics that calculated field to be plotted

scenarios: list of scenarios included in the figure

syears: list of start years of historical and SSPs scenarios

eyears: list of end years of historical and SSPs scenarios

begin_ref_year: start year of reference period

end_ref_year: end year of reference period

label: list of labels of the scenarios

n_samples: number of samples of size 10 to draw among all the ensembles of sampled_model only

sampled_model: name of dataset on which to sample

*Optional settings for script*trend: whether the trend is calculated and displayed

runave_window: only used if trend is true, size window used for the centered running average

title: specify plot title

yaxis: specify y-axis title

ymin: minimim value on y-axis, default calculated from data

ymax: maximum value on y-axis

colormap: alternative colormap, path to rgb file or ncl name

## Variables#

*Note: These are the variables tested and used in the original paper.*

tas (atmos, monthly mean, longitude latitude time)

pr (atmos, monthly mean, longitude latitude time)

*However, the code is flexible and in theory other variables of the same kind can be used.*

## References#

Tebaldi, C., Debeire, K., Eyring, V., Fischer, E., Fyfe, J., Friedlingstein, P., Knutti, R., Lowe, J., O’Neill, B., Sanderson, B., van Vuuren, D., Riahi, K., Meinshausen, M., Nicholls, Z., Hurtt, G., Kriegler, E., Lamarque, J.-F., Meehl, G., Moss, R., Bauer, S. E., Boucher, O., Brovkin, V., Golaz, J.-C., Gualdi, S., Guo, H., John, J. G., Kharin, S., Koshiro, T., Ma, L., Olivié, D., Panickal, S., Qiao, F., Rosenbloom, N., Schupfner, M., Seferian, R., Song, Z., Steger, C., Sellar, A., Swart, N., Tachiiri, K., Tatebe, H., Voldoire, A., Volodin, E., Wyser, K., Xin, X., Xinyao, R., Yang, S., Yu, Y., and Ziehn, T.: Climate model projections from the Scenario Model Intercomparison Project (ScenarioMIP) of CMIP6, Earth Syst. Dynam., 12, 253-293, https://doi.org/10.5194/esd-12-253-2021