Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/remindmodel/remind into …
Browse files Browse the repository at this point in the history
…Technoeconomic
  • Loading branch information
Felix Schreyer committed Nov 12, 2024
2 parents 59c4373 + 463d1e8 commit b3f7753
Show file tree
Hide file tree
Showing 11 changed files with 407 additions and 19 deletions.
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,8 @@ abstract: REMIND (REgional Model of Investment and Development) is a numerical
technology, policy and climate constraints. It also accounts for regional trade
characteristics on goods, energy fuels, and emissions allowances. All greenhouse
gas emissions due to human activities are represented in the model.
version: "3.3.2.dev880"
date-released: 2024-11-06
version: "3.3.2.dev922"
date-released: 2024-11-11
repository-code: https://github.com/remindmodel/remind
keywords:
- energy
Expand Down
2 changes: 1 addition & 1 deletion config/default.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ cfg$validationmodel_name <- "VALIDATIONREMIND"

#### model version of the overall model (used for run statistics only).
# automatically generated for development versions, updated by hand for releases
cfg$model_version <- "3.3.2.dev880"
cfg$model_version <- "3.3.2.dev922"

#### settings ####
cfg$gms <- list()
Expand Down
215 changes: 215 additions & 0 deletions config/scenario_config_21_EU11_2040_target.csv

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions core/declarations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ pm_shFeCes(ttot,all_regi,all_enty,all_in,all_teEs) "Final energy shares for CE

pm_shfe_up(ttot,all_regi,all_enty,emi_sectors) "Final energy shares exogenous upper bounds per sector"
pm_shfe_lo(ttot,all_regi,all_enty,emi_sectors) "Final energy shares exogenous lower bounds per sector"
p_shSeFe(ttot,all_regi,all_enty) "Initial share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids') [0..1]"
p_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "Initial share of energy carrier subtype in final energy demand of the aggregated carrier type for each sector/emiMarket combination (eg 'bio-based FE liquids share in all FE liquids within ETS transport') [0..1]"
pm_shGasLiq_fe_up(ttot,all_regi,emi_sectors) "Final energy gases plus liquids shares exogenous upper bounds per sector"
pm_shGasLiq_fe_lo(ttot,all_regi,emi_sectors) "Final energy gases plus liquids shares exogenous lower bounds per sector"

Expand Down Expand Up @@ -429,6 +431,8 @@ v_shGreenH2(ttot,all_regi) "share of green hydrogen in all hydrogen by 2030 [0
v_shBioTrans(ttot,all_regi) "Share of biofuels in transport liquids from 2025 onwards. Value between 0 and 1."

v_shfe(ttot,all_regi,all_enty,emi_sectors) "share of final energy in sector total final energy [0..1]"
v_shSeFe(ttot,all_regi,all_enty) "share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids') [0..1]"
v_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "share of energy carrier subtype in final energy demand of the aggregated carrier type per sector/emiMarket combination (eg 'the share of bio-based FE liquids in all FE liquids used in ETS-covered transport') [0..1]"
v_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids in sector final energy [0..1]"

vm_emiCdrAll(ttot,all_regi) "all CDR emissions"
Expand All @@ -447,7 +451,17 @@ vm_demFeForEs(ttot,all_regi,all_enty,all_esty,all_teEs) "Final energy which
vm_prodEs(ttot,all_regi,all_enty,all_esty,all_teEs) "Energy services (unit determined by conversion factor pm_fe2es)."
vm_transpGDPscale(ttot,all_regi) "dampening factor to align edge-t non-energy transportation costs with historical GDP data"

$ifthen.seFeSectorShareDev not "%cm_seFeSectorShareDevMethod%" == "off"
v_penSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "penalty cost for secondary energy share deviation between sectors, for each sector/emiMarket combination"
vm_penSeFeSectorShareDevCost(ttot,all_regi) "total penalty cost for secondary energy share deviation between sectors"
$endif.seFeSectorShareDev

$ifthen.minMaxSeFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
v_NegPenSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max negative penalty for secondary energy share deviation in sectors"
v_PosPenSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max positive penalty for secondary energy share deviation in sectors"
$endif.minMaxSeFeSectorShareDev
;

***----------------------------------------------------------------------------------------
*** EQUATIONS
***----------------------------------------------------------------------------------------
Expand Down Expand Up @@ -552,6 +566,8 @@ q_shGreenH2(ttot,all_regi) "share of green hydrogen in all hydrogen"
q_shBioTrans(ttot,all_regi) "Define the share of biofuels in transport liquids from 2025 on."

q_shfe(ttot,all_regi,all_enty,emi_sectors) "share of final energy carrier in the sector final energy"
q_shSeFe(ttot,all_regi,all_enty) "share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids')"
q_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "share of energy carrier subtype in final energy demand of the aggregated carrier type for each sector/emiMarket combination (eg 'the share of bio-based FE liquids in all FE liquids within ETS-covered transport"
q_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids in sector final energy"

q_shbiofe_up(ttot,all_regi,all_enty,emi_sectors,all_emiMkt) "share of biomass per carrier in sector final energy (upper bound)"
Expand All @@ -565,6 +581,15 @@ $IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off"
q_heat_limit(ttot,all_regi) "equation to limit maximum level of secondary energy district heating and heat pumps use"
$ENDIF.sehe_upper

$ifthen.seFeSectorShareDev not "%cm_seFeSectorShareDevMethod%" == "off"
q_penSeFeSectorShareDevCost(ttot,all_regi) "total penalty cost for secondary energy share deviation in sectors"
q_penSeFeSectorShareDev(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "penalty for secondary energy share deviation in sectors"
$endif.seFeSectorShareDev

$ifthen.minMaxSeFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
q_minMaxPenSeFeSectorShareDev(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max penalty balance for secondary energy share deviation in sectors"
$endif.minMaxSeFeSectorShareDev

$ifthen.limitSolidsFossilRegi not %cm_limitSolidsFossilRegi% == "off"
q_fossilSolidsLimitReg(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "limit solids fossil to be lower or equal to previous year values in each (sector x emiMkt) combination"
$endif.limitSolidsFossilRegi
Expand Down
108 changes: 102 additions & 6 deletions core/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1052,32 +1052,52 @@ q_shBioTrans(t,regi)..
;

***---------------------------------------------------------------------------
*' Share of final energy carrier in sector
*' Shares of final energy carrier in sector
***---------------------------------------------------------------------------

q_shfe(t,regi,entyFe,sector)$(pm_shfe_up(t,regi,entyFe,sector) OR pm_shfe_lo(t,regi,entyFe,sector))..
v_shfe(t,regi,entyFe,sector)
* sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe2,te)$(entyFe2Sector(entyFe2,sector)),
vm_demFeSector(t,regi,entySe,entyFe2,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe2,sector,emiMkt)))
=e=
sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;

q_shSeFe(t,regi,entySe)$(entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)).. !! share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids')
v_shSeFe(t,regi,entySe)
* sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
sum(seAgg$seAgg2se(seAgg,entySe), !! determining the aggregate SE carrier type (liquids, gases, ...)
sum(entySe2$seAgg2se(seAgg,entySe2), !! summing over the bio/fos/syn variants of the chosen SE carrier"
sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt)))))
=e=
sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;

q_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND (sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)))..
v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)
* sum(entySe2$sefe(entySe2,entyFe),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt))
=e=
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)
;

q_shGasLiq_fe(t,regi,sector)$(pm_shGasLiq_fe_up(t,regi,sector) OR pm_shGasLiq_fe_lo(t,regi,sector))..
v_shGasLiq_fe(t,regi,sector)
* sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te)$(entyFe2Sector(entyFe,sector)),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
=e=
sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te)$(SAMEAS(entyFe,"fegas") OR SAMEAS(entyFe,"fehos")),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;


*limit secondary energy district heating and heat pumps
$IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off"
q_heat_limit(t,regi)$(t.val gt 2020)..
Expand Down Expand Up @@ -1127,6 +1147,82 @@ q_shbiofe_lo(t,regi,entyFe,sector,emiMkt)$(pm_secBioShare(t,regi,entyFe,sector)
sum((entySeBio,te)$se2fe(entySeBio,entyFe,te), vm_demFeSector_afterTax(t,regi,entySeBio,entyFe,sector,emiMkt))
;

***---------------------------------------------------------------------------
*' Penalty for secondary energy share deviation in sectors
***---------------------------------------------------------------------------

$ifthen.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "sqSectorShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
power(v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) ,2)
* (1$sameas("%c_seFeSectorShareDevUnit%","share") + ( vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt) )$(sameas("%c_seFeSectorShareDevUnit%","energy")) ) !!define deviation in share or energy units
;
$elseIf.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "sqSectorAvrgShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
power(v_shSeFe(t,regi,entySe) - v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) ,2)
* (1$sameas("%c_seFeSectorShareDevUnit%","share") + ( vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt) )$(sameas("%c_seFeSectorShareDevUnit%","energy")) ) !!define deviation in share or energy units
;
$elseIf.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
v_NegPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
+ v_PosPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
;

q_minMaxPenSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
(
v_shSeFe(t,regi,entySe)
- v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)
+ v_NegPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
- v_PosPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
)
* !!define deviation in share or energy units
( 1$sameas("%c_seFeSectorShareDevUnit%","share") +
(sum(seAgg$seAgg2se(seAgg,entySe),
sum(entyFe2$(seAgg2fe(seAgg,entyFe2) AND entyFe2Sector(entyFe2,sector)),
sum(entySe2$(seAgg2se(seAgg,entySe2) AND sefe(entySe2,entyFe2) AND entyFe2Sector(entyFe2,sector)),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe2,sector,emiMkt))))
)$sameas("%c_seFeSectorShareDevUnit%","energy")
)
=e=
0
;
$endif.seFeSectorShareDev

$ifthen.penSeFeSectorShareDevCost not "%cm_seFeSectorShareDevMethod%" == "off"
q_penSeFeSectorShareDevCost(t,regi)..
vm_penSeFeSectorShareDevCost(t,regi)
=e=
sum((entySe,entyFe,sector,emiMkt)$( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ),
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
) * c_seFeSectorShareDevScale
;
$endif.penSeFeSectorShareDevCost

***---------------------------------------------------------------------------
*' Limit solids fossil to be lower or equal to previous year values
***---------------------------------------------------------------------------
Expand Down
6 changes: 3 additions & 3 deletions core/input/generisdata_tech_SSP5.prn
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ lifetime 40 40 40 40 40

+ biotr biotrmod biochp biohp bioigcc bioigccc biogas biogasc bioh2 bioh2c bioethl bioeths biodiesel bioftrec bioftcrec
tech_stat 1 3 1 3 2 3 2 3 3
inco0 180 400 3000 550 2450 3150 1200 1230 1680 2040 2860 590 160 3000 3600
inco0 180 400 3000 550 2450 3150 1200 1230 1680 2040 2860 590 160 3000 2900
constrTme 0 1 4 2 4 5 4 4 4 4 4 2 2 4 5
mix0 0.00 0.03 0.05
eta 1.00 0.95 0.35 0.72 0.39 0.28 0.55 0.55 0.61 0.55 0.36 0.55 0.93 0.41 0.41
omf 0.03 0.04 0.04 0.04 0.04 0.04 0.06 0.10 0.10 0.07 0.11 0.05 0.04 0.04
omv 30.11 25.00 31.50 50.50 10.90 12.80 10.60 10.60 97.27 38.99 5.05 10.60
omf 0.03 0.04 0.04 0.04 0.04 0.04 0.06 0.10 0.10 0.07 0.11 0.05 0.04 0.07
omv 30.11 25.00 31.50 50.50 10.90 12.80 10.60 10.60 97.27 38.99 5.05 14.00
lifetime 35 35 40 40 40 40 40 40 35 35 35 20 20 35 35

+ geohdr geohe hydro windon windoff spv solhe csp
Expand Down
Loading

0 comments on commit b3f7753

Please sign in to comment.