The 15_climate module takes emissions and simulates the resulting climate variables (forcings, global mean temperature) using the MAGICC climate emulator. It may also be used within the optimization or between iterations in order to internalize climate damages or adjust the carbon price to meet a desired climate target
Interface plot missing!
Description | Unit | A | B | |
---|---|---|---|---|
cm_emiscen | policy scenario choice | x | ||
cm_iterative_target_adj | whether or not a tax or a budget target should be iteratively adjusted depending on actual emission or forcing level | x | ||
cm_multigasscen | scenario on GHG portfolio to be included in permit trading scheme | x | x | |
cm_startyear | first optimized modelling time step | \(year\) | x | |
pm_budgetCO2eq (all_regi) |
budget for regional energy-emissions in period 1 | x | ||
pm_emicapglob (tall) |
global emission cap | x | x | |
pm_globalMeanTemperature (tall) |
global mean temperature anomaly | x | ||
pm_globalMeanTemperatureZeroed1900 (tall) |
global mean temperature anomaly, zeroed around 1900 | x | ||
pm_taxCO2eq (ttot, all_regi) |
CO2 tax path in T$/GtC = $/kgC. To get $/tCO2, multiply with 272 | \(T\$/GtC\) | x | |
pm_temperatureImpulseResponseCO2 (tall, tall) |
temperature impulse response to CO2 | \(K/GtCO2\) | x | |
sm_budgetCO2eqGlob | budget for global energy-emissions in period 1 | x |
In this realization, concentration, forcing, and temperature values are calculated using a version of the MAGICC climate emulator. MAGICC has to be installed in a separate folder, which can be set in the magicc_template
switch. MAGICC version 6.4 is used as default, but other versions with compatible path structure and variable names can be used as well as long as it has the proper interfacing R scripts.
The actual generation of MAGICC input data from REMIND emissions is not handled here, but in the core. Emissions that are not calculated by REMIND, such as F-gases, are taken from RCP trajectories.
With this module activated, MAGICC is run between iterations one time or several, depending on specific switches. By default, the global mean temperature change is simply read and passed on to other modules. Depending on the choice of carbon tax adjustment in cm_emiscen
, the total carbon budget will also be adjusted based on the MAGICC radiation forcing or temperature outcomes between iterations. This can allow the carbon tax, which is adjusted based on the carbon budget, to be optimized for a given temperature target. If cm_magicc_temperatureImpulseResponse
is on, a new Temperature Impulse Response Function (TIRF) is also generated between iterations. The TIRF is a smooth function that estimates the effect of an additional unit of emissions in global temperature, and it’s used by some damage modules that internalize climate damages (i.e. account for damages within the optimization). To derive a TIRF, MAGICC is run several times with pulse emissions added around the the emissions of that iteration.
The MAGICC scenario generation is set in ./core/magicc.gms
, but runs here. MAGICC is run and its output is read using different current R scripts in the external MAGICC folder that are copied to each run’s folder during the preparation phase. Different parametrizations of MAGICC can also be chosen with cm_magicc_config
, and are also handled during the preparation phase
Below is the main code that handles the input prepration, running and output reading of MAGICC.
$include "./core/magicc.gms";
Execute "Rscript run_magicc.R";
Execute "Rscript read_DAT_TOTAL_ANTHRO_RF.R";
Execute_Loadpoint 'p15_forc_magicc' p15_forc_magicc;
Execute "Rscript read_DAT_SURFACE_TEMP.R";
Execute_Loadpoint 'p15_magicc_temp' pm_globalMeanTemperature = pm_globalMeanTemperature;
pm_globalMeanTemperature(tall)$(tall.val gt 2300) = 0;
Raw temperature (GMT anomaly) from MAGICC is further calibrated to match HADCRUT4 in 2000. This ensures that different MAGICC configurations start at the same observed temperature.
$ifthen.cm_magicc_calibrateTemperature2000 %cm_magicc_calibrateTemperature2000% == "HADCRUT4"
Calibrate temperature such that anomaly in 2006-2015 reference period is 0.97 (SR1.5 Table 2.2, footnote 1)
s15_tempOffset2010 = sum(tall$(tall.val gt 2005 and tall.val le 2015),pm_globalMeanTemperature(tall))/10;
display s15_tempOffset2010;
pm_globalMeanTemperature(tall) = pm_globalMeanTemperature(tall) - s15_tempOffset2010 + 0.97;
display pm_globalMeanTemperature;
p15_gmt_conv = 100*smax(t,abs(pm_globalMeanTemperature(t)/max(p15_gmt0(t),1e-8) -1));
display p15_gmt_conv;
p15_gmt0(tall) = pm_globalMeanTemperature(tall);
$endif.cm_magicc_calibrateTemperature2000
pm_globalMeanTemperatureZeroed1900(tall) = pm_globalMeanTemperature(tall) + 0.092;
TIRF derivation
Derive temperature impulse response (TIRF) from MAGICC pulse scenarios
$ifthen.cm_magicc_tirf "%cm_magicc_temperatureImpulseResponse%" == "on"
if( ((iteration.val le 10) or ( mod(iteration.val,5 ) eq 0)) ,
execute "Rscript run_magicc_temperatureImpulseResponse.R";
execute_loadpoint 'pm_magicc_temperatureImpulseResponse' pm_temperatureImpulseResponseCO2 = pm_temperatureImpulseResponse;
);
$endif.cm_magicc_tirf
Iterative adjustment of budgets or carbon taxes to meet forcing target
if (cm_iterative_target_adj eq 2, !! otherwise adjustment happens in core/postsolve.gms
Iterative adjustment for budget runs: scale current budget with the ratio of target forcing s15_gr_forc_os to current forcing p15_forc_magicc. The offset is only there to increase the speed of convergence, the values have no physical meaning. For low stabilization targets (rcp2.0, rcp2.6, rcp3.7) the target is the 2100 forcing target (s15_rcpCluster eq 1), for lower targets the forcing target is valid during the full century (s15_rcpCluster eq 0).
if ((cm_emiscen eq 6),
display sm_budgetCO2eqGlob, s15_gr_forc_os, p15_forc_magicc;
if (s15_rcpCluster eq 1,
sm_budgetCO2eqGlob
=
sm_budgetCO2eqGlob
* (s15_gr_forc_os - s15_forcing_budgetiterationoffset)
/ (p15_forc_magicc("2100") - s15_forcing_budgetiterationoffset)
;
pm_budgetCO2eq(regi)
=
pm_budgetCO2eq(regi)
* (s15_gr_forc_os - s15_forcing_budgetiterationoffset)
/ (p15_forc_magicc("2100") - s15_forcing_budgetiterationoffset)
;
elseif (s15_rcpCluster eq 0),
sm_budgetCO2eqGlob
=
sm_budgetCO2eqGlob
* (s15_gr_forc_nte - s15_forcing_budgetiterationoffset)
/ (smax(tall,p15_forc_magicc(tall)) - s15_forcing_budgetiterationoffset)
;
pm_budgetCO2eq(regi)
=
pm_budgetCO2eq(regi)
* (s15_gr_forc_nte - s15_forcing_budgetiterationoffset)
/ (smax(tall,p15_forc_magicc(tall)) - s15_forcing_budgetiterationoffset)
;
);
display sm_budgetCO2eqGlob;
);
Iterative adjustment for carbon tax runs: scale current tax pathway with the ratio of target forcing s15_gr_forc_os to current forcing p15_forc_magicc. The offset is only there to increase the speed of convergence, the values have no physical meaning. For low stabilization targets (rcp2.0, rcp2.6, rcp3.7) the target is the 2100 forcing target (s15_rcpCluster eq 1), for lower targets the forcing target is valid during the full century (s15_rcpCluster eq 0).
if (cm_emiscen eq 9,
display pm_taxCO2eq, s15_gr_forc_os, p15_forc_magicc;
if (s15_rcpCluster eq 1,
pm_taxCO2eq(t,regi)
=
pm_taxCO2eq(t,regi)
* ((p15_forc_magicc("2100") - s15_forcing_budgetiterationoffset_tax - max(0,(cm_startyear-2020)/20))
/ (s15_gr_forc_os - s15_forcing_budgetiterationoffset_tax - max(0,(cm_startyear-2020)/20)))**1.2
;
elseif (s15_rcpCluster eq 0),
pm_taxCO2eq(t,regi)
=
pm_taxCO2eq(t,regi)
* ((smax(tall,p15_forc_magicc(tall)) - s15_forcing_budgetiterationoffset_tax - max(0,(cm_startyear-2020)/20))
/ (s15_gr_forc_nte - s15_forcing_budgetiterationoffset_tax - max(0,(cm_startyear-2020)/20)))**1.2
;
);
pm_taxCO2eq(t,regi)$(t.val gt 2110) = pm_taxCO2eq("2110",regi); !! to prevent huge taxes after 2110 and the resulting convergence problems, set taxes after 2110 equal to 2110 value
display pm_taxCO2eq;
);
);
Limitations There are no known limitations.
Limitations There are no known limitations.
Description | Unit | A | B | |
---|---|---|---|---|
p15_emicapregi (tall, all_regi) |
regional emission caps, used for calculation of global emission cap | x | x | |
p15_forc_magicc (tall) |
actual radiative forcing as calculated by magicc | \(W/m^2\) | x | x |
p15_gmt_conv | global mean temperature convergence | x | ||
p15_gmt0 (tall) |
global mean temperature convergence saved for the next iteration | x | ||
p15_oghgf_crbbb | exogenous forcings from RCP: carbonaceous aerosols from biomass burning | x | x | |
p15_oghgf_ffbc | exogenous forcings from RCP: black carbon from fossil fuels | x | x | |
p15_oghgf_ffoc | exogenous forcings from RCP: organic carbon from fossil fuels | x | x | |
p15_oghgf_h2ostr | exogenous forcings from RCP: stratospheric water vapor | x | x | |
p15_oghgf_hfc | exogenous forcings from RCP: HFCs | x | x | |
p15_oghgf_luc | exogenous forcings from RCP: albedo change due to land-use change | x | x | |
p15_oghgf_minaer | exogenous forcings from RCP: mineral dust | x | x | |
p15_oghgf_montreal | exogenous forcings from RCP: montreal gases | x | x | |
p15_oghgf_nitaer | exogenous forcings from RCP: nitrates | x | x | |
p15_oghgf_o3str | exogenous forcings from RCP: stratospheric ozone | x | x | |
p15_oghgf_o3trp | exogenous forcings from RCP: tropospheric ozone | x | x | |
p15_oghgf_pfc | exogenous forcings from RCP all in W/m^2: PFCs | x | x | |
p15_oghgf_sf6 | exogenous forcings from RCP: SF6 | x | x | |
s15_forcing_budgetiterationoffset | offset for the calculation of iteratively adjusted budget | x | ||
s15_forcing_budgetiterationoffset_tax | offset for the calculation of iteratively adjusted budget | x | ||
s15_gr_forc_kyo | guardrail for 450 ppm Kyoto forcing, adapted between negishi iterations - dummy parameter, only needed to prevent gdx errors | x | x | |
s15_gr_forc_kyo_nte | guardrail for 550 ppm Kyoto forcing, adapted between negishi iterations - dummy parameter, only needed to prevent gdx errors | x | x | |
s15_gr_forc_nte | not to exceed radiative forcing target from 2100 on | \(W/m^2\) | x | |
s15_gr_forc_os | overshoot (os) radiative forcing target (guardrail = gr) from 2100 on | \(W/m^2\) | x | |
s15_rcpCluster | clustering of rcp_scen for the iterative traget adjustment | x | ||
s15_tempOffset2010 | mean temperature in 2010 from MAGICC | x |
description | |
---|---|
all_regi | all regions |
in(all_in) | All inputs and outputs of the CES function |
iteration | iterator for main (Negishi/Nash) iterations |
modules | all the available modules |
regi(all_regi) | all regions used in the solution process |
t(ttot) | modeling time, usually starting in 2005, but later for fixed delay runs |
tall | time index |
ttot(tall) | time index with spin up |
Jessica Strefler, Michaja Pehl, Christoph Bertram