Skip to content
Snippets Groups Projects
equations.gms 5.02 KiB
*** |  (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 ./modules/37_industry/fixed_shares/equations.gms

*' Baseline (emitted and captured) emissions by final energy carrier and 
*' industry subsector are calculated from final energy use in industry, the 
*' subsectors' shares in that final energy carriers use, and the emission 
*' factor the final energy carrier. 
q37_macBaseInd(ttot,regi,entyFE,secInd37)$( ttot.val ge cm_startyear ) .. 
  vm_macBaseInd(ttot,regi,entyFE,secInd37)
  =e=
    sum((fe2ppfEn(entyFE,in),ces_industry_dyn37("enhi",in)),
      vm_cesIO(ttot,regi,in)
    * p37_shIndFE(regi,in,secInd37)
    )
  * p37_fctEmi(entyFE)
;

*' The maximum abatable emissions of a given type (industry subsector, fuel or
*' process) are calculated from the baseline emissions and the possible 
*' abatement level (depending on the carbon price of the previous iteration). 
q37_emiIndCCSmax(ttot,regi,emiInd37)$( ttot.val ge cm_startyear ) .. 
  v37_emiIndCCSmax(ttot,regi,emiInd37)
  =e=
    sum(emiMac2mac(emiInd37,macInd37),
      ( sum((secInd37_2_emiInd37(secInd37,emiInd37),entyFE),
          vm_macBaseInd(ttot,regi,entyFE,secInd37)
        )$( NOT sameas(emiInd37,"co2cement_process") )
      + (
          vm_macBaseInd(ttot,regi,"co2cement_process","cement")
        )$( sameas(emiInd37,"co2cement_process") )
      )
    * pm_macSwitch(macInd37)
    * pm_macAbatLev(ttot,regi,macInd37)
  )
;

*' Industry CCS is limited to below the maximum abatable emissions. 
q37_IndCCS(ttot,regi,emiInd37)$( ttot.val ge cm_startyear ) .. 
  vm_emiIndCCS(ttot,regi,emiInd37)
  =l=
  v37_emiIndCCSmax(ttot,regi,emiInd37)
;

*' The CCS capture rates of cement fuel and process emissions are identical, 
*' as they are captured in the same installation. 
q37_cementCCS(ttot,regi)$( ttot.val ge cm_startyear
                          AND pm_macSwitch("co2cement")
                          AND pm_macAbatLev(ttot,regi,"co2cement") ) .. 
    vm_emiIndCCS(ttot,regi,"co2cement")
  * v37_emiIndCCSmax(ttot,regi,"co2cement_process")
  =e=
    vm_emiIndCCS(ttot,regi,"co2cement_process")
  * v37_emiIndCCSmax(ttot,regi,"co2cement")
;

*' Industry CCS costs (by subsector) are equal to the integral below the MAC 
*' cost curve.
*' For the calculation, consider this figure:
*' ![MAC curve example](MAC_costs.png)
*' To make the calculations involving MAC curves leaner, they are discretised 
*' into 5 $/tC steps (parameter `sm_dmac`) and transformed into step-wise 
*' curves.  The parameter `pm_macStep` holds the current step on the MAC curve
*' the model is on (given the CO~2~ price of the last iteration), and 
*' `pm_macAbat` holds the abatement level (as a fraction) on that step.  The 
*' emission abatement equals the area under the MAC curve (turqoise area in the 
*' figure).  To calculate it, `pm_macStep` is multiplied by `pm_macAbat` (the 
*' horizontal and vertical lines enclosing the coloured rectangle in the 
*' figure).  The `sum(steps$( ord(steps) eq pm_macStep ... )` part simply 
*' selects the right step within the MAC curve.  From this product (rectangle),
*' the area above the MAC curve (pink) is subtractad.  To calculate it, the 
*' abatement level at each MAC step up to and including the current step is 
*' summed up.  The area is subdivided into `pm_macStep` rectangles of height 
*' `1 sm_dmac` and width `pm_macAbat(steps)` (which is zero for the first $n$ 
*' steps at which price level no abatement is available). 
*' Multiplying the area under the curve with the step width `sm_dmac` and the 
*' baseline emissions (before mitigation) converts the units to $/tC and GtC.
*'
*' Example:  The carbon price is 43.6 $/tCO~2~, which translates to step 32 on 
*' the discrete MAC curve (43.6 $/tCO~2~ * (44/12 tCO~2~/tC) / (5 $/step)). 
*' The calculation then is:
*' ```
*' vm_emiIndCCS = 
*'     0.001
*'   * vm_macBaseInd
*'   * sm_dmac
*'   * ( 32 * 0.3
*'     - ( 15 * 0
*'       + 14 * 0.2
*'       +  3 * 0.3
*'       )
*'     )
*'

q37_IndCCSCost(ttot,regi,emiInd37)$( ttot.val ge cm_startyear ) .. 
  vm_IndCCSCost(ttot,regi,emiInd37)
  =e=
    1e-3
  * pm_macSwitch(emiInd37)
  * ( sum((enty,secInd37_2_emiInd37(secInd37,emiInd37)),
        vm_macBaseInd(ttot,regi,enty,secInd37)
      )$( NOT sameas(emiInd37,"co2cement_process") )
    + (
        vm_macBaseInd(ttot,regi,"co2cement_process","cement")
      )$( sameas(emiInd37,"co2cement_process") )
    )
  * sm_dmac
  * sum(emiMac2mac(emiInd37,enty),
      ( pm_macStep(ttot,regi,emiInd37)
      * sum(steps$( ord(steps) eq pm_macStep(ttot,regi,emiInd37) ),
          pm_macAbat(ttot,regi,enty,steps)
        )
      )
    - sum(steps$( ord(steps) le pm_macStep(ttot,regi,emiInd37) ),
        pm_macAbat(ttot,regi,enty,steps)
      )
    )
;

*** EOF ./modules/37_industry/fixed_shares/equations.gms