REMIND - REgional Model of INvestments and Development

3.2.0

created with goxygen 1.3.2

climate (15_climate)

Description

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

Interfaces

Interface plot missing!

Input

module inputs (A: magicc | B: off)
  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

Output

Realizations

(A) magicc

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.

(B) off

Limitations There are no known limitations.

Definitions

Objects

module-internal objects (A: magicc | B: off)
  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

Sets

sets in use
  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

Authors

Jessica Strefler, Michaja Pehl, Christoph Bertram

See Also

core

References