Skip to content

Commit

Permalink
Merge pull request #889 from 0UmfHxcvx5J7JoaOhFSs5mncnisTJJ6q/dev/ind…
Browse files Browse the repository at this point in the history
…ustry_specific_energy_slope

limit steel specific energy demand above thermodynamic limit to prevent too fast efficiency gains
  • Loading branch information
0UmfHxcvx5J7JoaOhFSs5mncnisTJJ6q authored Jun 29, 2022
2 parents e72dc87 + 2f14db4 commit 95c618a
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 5 deletions.
2 changes: 1 addition & 1 deletion modules/37_industry/fixed_shares/not_used.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ cm_emiscen, switch, not needed
pm_calibrate_eff_scale, parameter, not needed
pm_fedemand, parameter, not needed
sm_TWa_2_MWh, input, questionnaire

sm_tmp2, parameter, not needed
38 changes: 38 additions & 0 deletions modules/37_industry/subsectors/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,44 @@ pm_energy_limit(in)
* 1e9; !! * t/Gt
!! = TWa/Gt

* Specific energy demand cannot fall below a curve described by an exponential
* function passing through the 2015 value and a point defined by an "efficiency
* gain" (e.g. 75 %) between baseline value and thermodynamic limit at a given
* year (e.g. 2050).
if (cm_emiscen eq 1,
execute_loadpoint "input.gdx" p37_cesIO_baseline = vm_cesIO.l;
else
execute_loadpoint "input_ref.gdx" p37_cesIO_baseline = vm_cesIO.l;
);

sm_tmp2 = 0.75; !! maximum "efficiency gain", from 2015 baseline value to
!! thermodynamic limit
sm_tmp = 2050; !! period in which closing could be achieved

loop (industry_ue_calibration_target_dyn37(out)$( pm_energy_limit(out) ),
p37_energy_limit_slope(ttot,regi,out)$( ttot.val ge 2015 )
= ( ( sum(ces_eff_target_dyn37(out,in), p37_cesIO_baseline("2015",regi,in))
/ p37_cesIO_baseline("2015",regi,out)
)
- pm_energy_limit(out)
)
* exp((2015 - ttot.val) / ((2015 - sm_tmp) / log(1 - sm_tmp2)))
+ pm_energy_limit(out);

!! To account for strong 2015-20 drops due to imperfect 2020 energy data,
!! use the lower of the calculated curve, or 95 % of the baseline specific
!! energy demand
p37_energy_limit_slope(ttot,regi,out)$( ttot.val ge 2015 )
= min(
p37_energy_limit_slope(ttot,regi,out),
( 0.95
* ( sum(ces_eff_target_dyn37(out,in), p37_cesIO_baseline(ttot,regi,in))
/ p37_cesIO_baseline(ttot,regi,out)
)
)
);
);

*** CCS for industry is off by default
emiMacSector(emiInd37_fuel) = NO;
pm_macSwitch(emiInd37) = NO;
Expand Down
2 changes: 2 additions & 0 deletions modules/37_industry/subsectors/declarations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ Scalar
Parameters
pm_abatparam_Ind(ttot,all_regi,all_enty,steps) "industry CCS MAC curves [ratio @ US$2005]"
pm_energy_limit(all_in) "thermodynamic/technical limits of subsector energy use [GJ/t product]"
p37_energy_limit_slope(tall,all_regi,all_in) "limit for subsector specific energy demand that converges towards the thermodynamic/technical limit [GJ/t product]"
p37_clinker_cement_ratio(ttot,all_regi) "clinker content per unit cement used"
pm_ue_eff_target(all_in) "energy efficiency target trajectories [% p.a.]"
pm_IndstCO2Captured(ttot,all_regi,all_enty,all_enty,secInd37,all_emiMkt) "Captured CO2 in industry by energy carrier, subsector and emissions market"
p37_CESMkup(ttot,all_regi,all_in) "CES markup cost parameter [trUSD/CES input]"
p37_cesIO_up_steel_secondary(tall,all_regi,all_GDPscen) "upper limit to secondary steel production based on scrap availability"
p37_steel_secondary_max_share(tall,all_regi) "maximum share of secondary steel production"
p37_BAU_industry_ETS_solids(tall,all_regi) "industry solids demand in baseline scenario"
p37_cesIO_baseline(tall,all_regi,all_in) "vm_cesIO from the baseline scenario"

*** output parameters only for reporting
o37_emiInd(ttot,all_regi,all_enty,secInd37,all_enty) "industry CCS emissions [GtC/a]"
Expand Down
12 changes: 8 additions & 4 deletions modules/37_industry/subsectors/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ q37_demFeIndst(ttot,regi,entyFe,emiMkt)$( ttot.val ge cm_startyear

*' Thermodynamic limits on subsector energy demand
q37_energy_limits(ttot,regi,industry_ue_calibration_target_dyn37(out))$(
ttot.val gt 2015 AND pm_energy_limit(out) ) ..
ttot.val gt 2020
AND p37_energy_limit_slope(ttot,regi,out) ) ..
sum(ces_eff_target_dyn37(out,in), vm_cesIO(ttot,regi,in))
=g=
vm_cesIO(ttot,regi,out)
* pm_energy_limit(out)
* p37_energy_limit_slope(ttot,regi,out)
;

*' Limit the share of secondary steel to historic values, fading to 90 % in 2050
Expand All @@ -44,9 +45,12 @@ q37_limit_secondary_steel_share(ttot,regi)$( ttot.val ge cm_startyear ) ..
q37_macBaseInd(ttot,regi,entyFE,secInd37)$( ttot.val ge cm_startyear ) ..
vm_macBaseInd(ttot,regi,entyFE,secInd37)
=e=
sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfen(entyFE,in))$(entyFeCC37(entyFe)),
sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),
fe2ppfen(entyFECC37(entyFE),in)),
vm_cesIO(ttot,regi,in)
* sum((entySe,te)$(se2fe(entySe,entyFe,te) and entySeFos(entySe)), pm_emifac(ttot,regi,entySe,entyFe,te,"co2"))
* sum(se2fe(entySEfos,entyFE,te),
pm_emifac(ttot,regi,entySEfos,entyFE,te,"co2")
)
)
;

Expand Down

0 comments on commit 95c618a

Please sign in to comment.