Skip to content

Commit

Permalink
expand emission scaling parameterization to allow representing GWP*
Browse files Browse the repository at this point in the history
Note that data_load.gms includes dummy code that sets the newly introduced emission_diff_scaling to zero in the absence of the parameter being included in the GDX setup so far.
  • Loading branch information
volker-krey authored and OFR-IIASA committed Oct 21, 2022
1 parent 22de076 commit 53cd050
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 8 deletions.
4 changes: 3 additions & 1 deletion message_ix/model/MESSAGE/data_load.gms
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 53,7 @@ rating_bin, reliability_factor, peak_load_factor, flexibility_factor
renewable_capacity_factor, renewable_potential
* emission factors, bounds and taxes on emissions (including mapping sets)
historical_emission, emission_factor, emission_scaling, is_bound_emission, bound_emission, tax_emission,
* emission_diff_scaling,
* historical values of new capacity investment, activity and extraction
historical_new_capacity, historical_activity, historical_extraction
* parameters for land-use model emulator
Expand All @@ -75,7 76,8 @@ fixed_extraction, fixed_stock, fixed_new_capacity, fixed_capacity, fixed_activit
storage_initial, storage_self_discharge, time_order
;


* dummy code to add (empty) emission_diff_scaling parameter
emission_diff_scaling(type_emission,emission,year_all,year_all) = 0 ;
*----------------------------------------------------------------------------------------------------------------------*
* ensure that each node is mapped to itself *
*----------------------------------------------------------------------------------------------------------------------*
Expand Down
21 changes: 17 additions & 4 deletions message_ix/model/MESSAGE/model_core.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1842,9 1842,14 @@ EMISSION_EQUIVALENCE(node,emission,type_tec,year)..
*
* Equation EMISSION_CONSTRAINT
* """"""""""""""""""""""""""""
* This constraint enforces upper bounds on emissions (by emission type). For all bounds that include multiple periods,
* the parameter :math:`bound\_emission_{n,\widehat{e},\widehat{t},\widehat{y}}` is scaled to represent average annual
* emissions over all years included in the year-set :math:`\widehat{y}`.
* This constraint enforces upper bounds on emissions (by emission type), including the possibility to aggregate
* across different emission species and scale them relateive to each other (e.g., to reflect different emission
* metrics such as global warming potentials, GWPs). As of release X.Y, the possibility to include scaling metrics
* that work across multiple periods (e.g., to accommodate implemantation of the GWP* metric that for short-lived
* emission species applies scaling factors to differences of emissions over time) has been added.
*
* For all bounds that include multiple periods, the parameter :math:`bound\_emission_{n,\widehat{e},\widehat{t},\widehat{y}}`
* is scaled to represent average annual emissions over all years included in the year-set :math:`\widehat{y}`.
*
* The formulation includes historical emissions and allows to model constraints ranging over both the model horizon
* and historical periods.
Expand All @@ -1855,6 1860,9 @@ EMISSION_EQUIVALENCE(node,emission,type_tec,year)..
* \begin{array}{l}
* duration\_period_{y'} \cdot emission\_scaling_{\widehat{e},e} \cdot \\
* \Big( EMISS_{n,e,\widehat{t},y'} \sum_{m} historical\_emission_{n,e,\widehat{t},y'} \Big)
* \sum_{y'' \in (\widehat{y}), y'' \neq y'}
* duration\_period_{y'} \cdot emission\_diff\_scaling_{\widehat{e},e,y', y''} \cdot \\
* \Big( EMISS_{n,e,\widehat{t},y''} \sum_{m} historical\_emission_{n,e,\widehat{t},y''} \Big)
* \end{array}
* }
* { \sum_{y' \in Y(\widehat{y})} duration\_period_{y'} }
Expand All @@ -1866,7 1874,12 @@ EMISSION_CONSTRAINT(node,type_emission,type_tec,type_year)$is_bound_emission(nod
duration_period(year_all2) * emission_scaling(type_emission,emission) *
( EMISS(node,emission,type_tec,year_all2)$( year(year_all2) )
historical_emission(node,emission,type_tec,year_all2) )
)
SUM( (year_all3)$( NOT SAMEAS(year_all2, year_all3) ),
duration_period(year_all2) * emission_diff_scaling(type_emission,emission,year_all2,year_all3) *
( EMISS(node,emission,type_tec,year_all3)$( year(year_all3) )
historical_emission(node,emission,type_tec,year_all3) )
)
)
/ SUM(year_all2$( cat_year(type_year,year_all2) ), duration_period(year_all2) )
=L= bound_emission(node,type_emission,type_tec,type_year) ;

Expand Down
13 changes: 10 additions & 3 deletions message_ix/model/MESSAGE/parameter_def.gms
Original file line number Diff line number Diff line change
Expand Up @@ -608,19 608,26 @@ Parameters
* - ``node`` | ``emission`` | ``type_tec`` | ``year``
* * - emission_scaling [#em_scaling]_
* - ``type_emission`` | ``emission``
* * - emission_diff_scaling [#em_diff_scaling]_
* - ``type_emission`` | ``emission`` | ``year`` | ``year``
* * - bound_emission
* - ``node`` | ``type_emission`` | ``type_tec`` | ``type_year``
* * - tax_emission
* - ``node`` | ``type_emission`` | ``type_tec`` | ``type_year``
*
* .. [#em_scaling] The parameter ``emission_scaling`` is the scaling factor to harmonize bounds or taxes across types of
* emissions. It allows to efficiently aggregate different emissions/pollutants and set bounds or taxes on various categories.
* .. [#em_scaling] The parameter ``emission_scaling`` is the scaling factor to aggreagte or scale emissions across types of
* emissions. It allows to efficiently aggregate different emissions/pollutants (e.g., to represent Gobal Warming Potentials,
* GWPs) and set bounds or taxes on various emission categories.
* .. [#em_diff_scaling] The parameter ``emission_diff_scaling`` is the scaling factor to aggreagte or scale emissions across types
* and different model periods which in combination with the parameter ``emission_scaling`` allows representing metrics such
* as GWP*.
*
***

Parameters
historical_emission(node,emission,type_tec,year_all) historical emissions by technology type (including land)
emission_scaling(type_emission,emission) scaling factor to harmonize bounds or taxes across types
emission_scaling(type_emission,emission) emission scaling factor to aggreagte or scale emissions across types
emission_diff_scaling(type_emission,emission,year_all,year_all) emission scaling factor to aggreagte or scale emissions across types and different model periods
bound_emission(node,type_emission,type_tec,type_year) upper bound on emissions
tax_emission(node,type_emission,type_tec,type_year) emission tax
;
Expand Down

0 comments on commit 53cd050

Please sign in to comment.