Skip to content
Snippets Groups Projects
magicc.gms 6.67 KiB
Newer Older
Lavinia Baumstark's avatar
Lavinia Baumstark committed
*** |  (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK)
*** |  authors, and contributors see CITATION.cff file. This file is part
*** |  of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of
*** |  AGPL-3.0, you are granted additional permissions described in the
*** |  REMIND License Exception, version 1.0 (see LICENSE file).
*** |  Contact: remind@pik-potsdam.de
*** SOF ./core/magicc.gms
*** FILE magicc.gms ***
$ontext
Lavinia Baumstark's avatar
Lavinia Baumstark committed

TODO
- more documentation
- document MAGICC_scen_*.inc files
Lavinia Baumstark's avatar
Lavinia Baumstark committed
$offtext

$ifthen %cm_rcp_scen% == "rcp20"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_450(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "rcp26"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_450(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "rcp37"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_550(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "rcp45"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_550(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "rcp60"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_bau(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "rcp85"   p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_bau(RCP_regions_world,tall,emiRCP);
$elseif %cm_rcp_scen% == "none"    p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_bau(RCP_regions_world,tall,emiRCP);
$else                              p_MAGICC_emi(tall,RCP_regions_world,emiRCP) = magicc_default_data_bau(RCP_regions_world,tall,emiRCP);
$endif

*** populate data
p_MAGICC_emi(ttot,RCP_regions_world,"FossilCO2")$(ttot.val ge 2005)
=
sum(regi,
    (vm_emiTe.l(ttot,regi,"co2"))
  * p_regi_2_MAGICC_regions(regi,RCP_regions_world)
);

p_MAGICC_emi(ttot,RCP_regions_world,"OtherCO2")$(ttot.val ge 2005)
=
sum(regi,
    (vm_emiMac.l(ttot,regi,"co2") + vm_emiCdr.l(ttot,regi,"co2"))
  * p_regi_2_MAGICC_regions(regi,RCP_regions_world)
);

p_MAGICC_emi(ttot,RCP_regions_world,"CH4")$(ttot.val ge 2005)
=
sum(regi,
    vm_emiAll.l(ttot,regi,"ch4")
  * p_regi_2_MAGICC_regions(regi,RCP_regions_world)
);

p_MAGICC_emi(ttot,RCP_regions_world,"N2O")$(ttot.val ge 2005)
=
sum(regi,
    vm_emiAll.l(ttot,regi,"n2o")
  * p_regi_2_MAGICC_regions(regi,RCP_regions_world)
);

***--------------------------- F-gases -------------------------------
loop(emiFgas2emiRCP(enty,emiRCP),
     p_MAGICC_emi(ttot,RCP_regions_world,emiRCP)$(ttot.val ge 2005)
     =
     sum(regi,
         vm_emiFgas.L(ttot,regi,enty)
       * p_regi_2_MAGICC_regions(regi,RCP_regions_world)
     );
);

***--------------------------- emiRCP2emiREMIND ----------------------
loop(emiRCP2emiREMIND(emiRCP,enty3),
    p_MAGICC_emi(ttot,RCP_regions_world_bunkers,emiRCP)$( ttot.val ge 2005 )
      =
        (sum(regi,
           p_regi_2_MAGICC_regions(regi,RCP_regions_world_bunkers)
         * ( sum(all_sectorEmi, pm_emiAPexsolve(ttot,regi,all_sectorEmi,emiRCP)
                )
             + pm_emiAPexo(ttot,regi,enty3,"AgWasteBurning")
             + pm_emiAPexo(ttot,regi,enty3,"Agriculture")
             + pm_emiAPexo(ttot,regi,enty3,"ForestBurning")
             + pm_emiAPexo(ttot,regi,enty3,"GrasslandBurning")
             + pm_emiAPexo(ttot,regi,enty3,"Waste")
          )
        )
     + (  pm_emiAPexoGlob(ttot,enty3,"Aviation")
        + pm_emiAPexoGlob(ttot,enty3,"InternationalShipping")
        )$(   sameas(RCP_regions_world_bunkers,"WORLD") 
           OR sameas(RCP_regions_world_bunkers,"BUNKERS") )
		)
		* (1 - (1 - s_NO2_2_N)$( sameas(enty3,"NOx")))
    ;
);

*** interpolate first periods
loop(emiRCP,
  loop(RCP_regions_world,
    p_MAGICC_emi("2001",RCP_regions_world,emiRCP)
    =
      0.8 * p_MAGICC_emi("2000",RCP_regions_world,emiRCP)
    + 0.2 * p_MAGICC_emi("2005",RCP_regions_world,emiRCP)
    ;

    p_MAGICC_emi("2002",RCP_regions_world,emiRCP)
    =
      0.6 * p_MAGICC_emi("2000",RCP_regions_world,emiRCP)
    + 0.4 * p_MAGICC_emi("2005",RCP_regions_world,emiRCP)
    ;
   
    p_MAGICC_emi("2003",RCP_regions_world,emiRCP)
    =
      0.4 * p_MAGICC_emi("2000",RCP_regions_world,emiRCP)
    + 0.6 * p_MAGICC_emi("2005",RCP_regions_world,emiRCP)
    ;
    
    p_MAGICC_emi("2004",RCP_regions_world,emiRCP)
    =
      0.2 * p_MAGICC_emi("2000",RCP_regions_world,emiRCP)
    + 0.8 * p_MAGICC_emi("2005",RCP_regions_world,emiRCP)
    ;
  )
);

*** generate MAGICC scenario file
put  magicc_scenario

*** MAGICC scenario files are based on the following template
$ontext
line     description
1        N_SCEN_DATALINES  - number of data lines, correspondes to periods
2        SCEN_SPECIALCODES - number describing the data present
                             1x seems to do nothing
                             2x  4 SRES regions
                             3x  5 RCP regions
                             4x  5 RCP regions plus bunkers
                             x1  8 gases and aerosols ) unsure how this relates
                             x2 11 gases and aerosols ) to the actual data files
3        NAME              - scenario name
4        DESCRIPTION       - scenario description
5        NOTES             - usually creation date
6                        empty
7        REGION HEADER     - region name (RCP_regions_world)
8        COLUMN HEADINGS   - YEARS and quantity names (emiRCP)
9        UNITS             - quantity units (emiRCP2unitsMagicc)
...                        data

lines 7 - 9 repeat for each region
$offtext

put " 24" /;
put " 41" /;
put " %c_expname%" /;
put " MAGICC sceanrio file generated by REMIND core/magicc.gms" /;
put " Date created:", system.date, " ", system.time /;
put /;

loop(RCP_regions_world_bunkers,
  put " ", RCP_regions_world_bunkers.tl /;

  put "      Years"
  loop((numberEmiRCP,emiRCP2order(emiRCP,numberEmiRCP)),
    put emiRCP.tl:>11;
  );
  put /;

  put "        Yrs"
  loop((numberEmiRCP,emiRCP2order(emiRCP,numberEmiRCP),
        emiRCP2unitsMagicc(emiRCP,unitsMagicc)),
    put unitsMagicc.tl:>11;
  );
  put /;

  loop(t_magiccttot$( t_magiccttot.val ge 2000 ),
    put t_magiccttot.tl:>11;
    loop((numberEmiRCP,emiRCP2order(emiRCP,numberEmiRCP)),
      put p_MAGICC_emi(t_magiccttot,RCP_regions_world_bunkers,emiRCP):>11:4;
    )
    put /;
  );

  put /;
  put /;
);

putclose magicc_scenario

*** write sed scripts to edit MAGICC configuration files
put  magicc_sed_script

put 's|  FILE_EMISSIONSCENARIO.*|  FILE_EMISSIONSCENARIO =  "REMIND_%c_expname%",|g' /;
put 's|  RUNNAME.*|  RUNNAME =  "%c_expname%",|g' /;
put 's|  RUNDATE.*|  RUNDATE =  "%system.date%",|g' /;
put 's|  RF_SOLAR_SCALE =.*|  RF_SOLAR_SCALE =  0,|g' /;

putclose magicc_sed_script;

*** EOF ./core/magicc.gms