Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
*** | (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/bounds.gms
*** -----------------------------------------------------------
*** setting bounds
*** -----------------------------------------------------------
*RP 20160126 set vm_costTeCapital to pm_inco0_t for all technologies that are non-learning
vm_costTeCapital.fx(ttot,regi,teNoLearn) = pm_inco0_t("2005",regi,teNoLearn); !! use 2005 value for the past
vm_costTeCapital.fx(t,regi,teNoLearn) = pm_inco0_t(t,regi,teNoLearn);
*** ----------------------------------------------------------------------------------------------------------------------------------------
*** CB 20120402 Set lower bounds on variables to prevent the problem that the conopt solver often doesn't see a benefit from changing variable value away from 0
*** These lower bounds are set so low that they do not restrict the results
*** ----------------------------------------------------------------------------------------------------------------------------------------
*** CB 20120402 Lower limit on all P2SE technologies capacities to 1 MW of all technologies and all time steps
loop(pe2se(enty,enty2,te)$((not sameas(te,"biotr")) AND (not sameas(te,"biodiesel")) AND (not sameas(te,"bioeths")) AND (not sameas(te,"gasftcrec")) AND (not sameas(te,"gasftrec"))
AND (not sameas(te,"tnrs"))),
vm_cap.lo(t,regi,te,"1")$(t.val gt 2021) = 1e-6;
);
*** RP 20160405 make sure that the model also sees the se2se technologies (seel <--> seh2)
loop(se2se(enty,enty2,te),
vm_cap.lo(t,regi,te,"1")$(t.val gt 2021) = 1e-6;
);
*RP* Lower bound of 10 kW on each of the different grades for renewables with multiple resource grades
loop(regi,
loop(teRe2rlfDetail(te,rlf),
if( (pm_dataren(regi,"maxprod",rlf,te) gt 0),
vm_capDistr.lo(t,regi,te,rlf)$(t.val gt 2011) = 1e-8;
);
);
);
*RP* no battery storage in 2010:
vm_cap.up("2010",regi,teStor,"1") = 0;
*** --------------------------------------------------------------------------------------------------------------------------------
*** completely switching off technologies that are not used in the current version of REMIND, although their parameters are declared:
*** --------------------------------------------------------------------------------------------------------------------------------
vm_cap.fx(t,regi,"solhe",rlf) = 0;
vm_deltaCap.up(t,regi,"solhe",rlf) = 0;
vm_cap.fx(t,regi,"fnrs",rlf) = 0;
vm_deltaCap.up(t,regi,"fnrs",rlf) = 0;
*** -----------------------------------------------------------------------------------------------------------------
*** Traditional biomass use is phased out on an exogeneous time path
*** -----------------------------------------------------------------------------------------------------------------
vm_deltaCap.up(t,regi,"biotr",rlf)$(t.val gt 2005) = 0;
loop(regi,
if( ( pm_gdp("2005",regi)/pm_pop("2005",regi) ) > 10,
vm_deltaCap.fx("2010",regi,"biotr","1") = 0.80 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2015",regi,"biotr","1") = 0.45 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2020",regi,"biotr","1") = 0.35 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2025",regi,"biotr","1") = 0.25 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2030",regi,"biotr","1") = 0.20 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2035",regi,"biotr","1") = 0.15 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2040",regi,"biotr","1") = 0.10 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2045",regi,"biotr","1") = 0.075 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2050",regi,"biotr","1") = 0.05 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2055",regi,"biotr","1") = 0.05 * vm_deltaCap.lo("2005",regi,"biotr","1");
else
vm_deltaCap.fx("2010",regi,"biotr","1") = 1.3 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2015",regi,"biotr","1") = 0.9 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2020",regi,"biotr","1") = 0.7 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2025",regi,"biotr","1") = 0.5 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2030",regi,"biotr","1") = 0.4 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2035",regi,"biotr","1") = 0.3 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2040",regi,"biotr","1") = 0.2 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2045",regi,"biotr","1") = 0.15 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2050",regi,"biotr","1") = 0.1 * vm_deltaCap.lo("2005",regi,"biotr","1");
vm_deltaCap.fx("2055",regi,"biotr","1") = 0.1 * vm_deltaCap.lo("2005",regi,"biotr","1");
);
);
$if %cm_GDPscen% == "gdp_SDP" vm_deltaCap.fx(t,regi,"biotr","1")$(t.val gt 2020) = 0.50 * vm_deltaCap.lo(t,regi,"biotr","1");
$if %cm_GDPscen% == "gdp_SSP1" vm_deltaCap.fx(t,regi,"biotr","1")$(t.val gt 2020) = 0.65 * vm_deltaCap.lo(t,regi,"biotr","1");
$if %cm_GDPscen% == "gdp_SSP5" vm_deltaCap.fx(t,regi,"biotr","1")$(t.val gt 2020) = 0.65 * vm_deltaCap.lo(t,regi,"biotr","1");
*** ------------------------------------------------------------------------------------------
*LP* implement switch for scenarios with or without carbon sequestration:
*** ------------------------------------------------------------------------------------------
if ( c_ccsinjecratescen eq 0, !!no carbon sequestration at all
vm_co2CCS.fx(t,regi,"cco2","ico2","ccsinje","1") =0;
);
*** ------------------------------------------------------------------------------------------
*RP* implement switch for scenarios with different carbon capture assumptions::
*** ------------------------------------------------------------------------------------------
if (cm_ccapturescen eq 2, !! no carbon capture at all
vm_cap.fx(t,regi_capturescen,"ngccc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"pcc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"pco",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"ccsinje",rlf) = 0;
*** vm_cap.fx(t,regi_capturescen,"ccscomp",rlf) = 0; !! technologies disabled in REMIND 1.7
*** vm_cap.fx(t,regi_capturescen,"ccspipe",rlf) = 0; !! technologies disabled in REMIND 1.7
*** vm_cap.fx(t,regi_capturescen,"ccsmoni",rlf) = 0; !! technologies disabled in REMIND 1.7
vm_cap.fx(t,regi_capturescen,"gash2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"igccc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"coalftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"coalh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioigccc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioigccc",rlf) = 0;
elseif (cm_ccapturescen eq 4), !! no carbon capture in the electricity sector
loop(emi2te(enty,"seel",te,"cco2")$( sum(regi_capturescen,pm_emifac("2020",regi_capturescen,enty,"seel",te,"cco2")) > 0 ),
vm_cap.fx(t,regi_capturescen,te,rlf) = 0;
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
);
);
);
*DK* switching technologies off that produce liquids from lignocellulosic biomass
if (c_bioliqscen eq 0, !! no bioliquids technologies
vm_deltaCap.up(t,regi,"bioftrec",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioftcrec",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioethl",rlf)$(t.val gt 2005) = 1.0e-6;
* vm_cap.fx(t,regi,"bioftcrec",rlf) = 0;
* vm_cap.fx(t,regi,"bioftrec",rlf) = 0;
* vm_cap.fx(t,regi,"bioethl",rlf) = 0;
);
*DK* switching technologies off that produce hydrogen from lignocellulosic biomass
if (c_bioh2scen eq 0, !! no bioh2 technologies
vm_deltaCap.up(t,regi,"bioh2",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioh2c",rlf)$(t.val gt 2005) = 1.0e-6;
* vm_cap.fx(t,regi,"bioh2c",rlf) = 0;
* vm_cap.fx(t,regi,"bioh2",rlf) = 0;
);
*NB* controlling for readyness of advanced bio-energy technologies (introduced for EMF33)
if(c_abtrdy gt 2010,
vm_deltaCap.up(t,regi,"bioftrec",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioh2",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioigcc",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioftcrec",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioh2c",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioigccc",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioethl",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 1.0e-6;
* vm_deltaCap.fx(t,regi,"bioftrec",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioh2",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioigcc",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioftcrec",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioh2c",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioigccc",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
* vm_deltaCap.fx(t,regi,"bioethl",rlf)$(t.val lt c_abtrdy AND t.val gt 2005) = 0;
);
*NB* controlling for investment cost of advance bio-energy technologies (introduced for EMF33)
pm_data(regi, "inco0","bioftrec") = c_abtcst * pm_data(regi, "inco0","bioftrec");
pm_data(regi, "inco0","bioh2") = c_abtcst * pm_data(regi, "inco0","bioh2");
pm_data(regi, "inco0","bioigcc") = c_abtcst * pm_data(regi, "inco0","bioigcc");
pm_data(regi, "inco0","bioftcrec") = c_abtcst * pm_data(regi, "inco0","bioftcrec");
pm_data(regi, "inco0","bioh2c") = c_abtcst * pm_data(regi, "inco0","bioh2c");
pm_data(regi, "inco0","bioigccc") = c_abtcst * pm_data(regi, "inco0","bioigccc");
pm_data(regi, "inco0","bioethl") = c_abtcst * pm_data(regi, "inco0","bioethl");
***--------------------------------------------------------------------
*RP no CCS should be used in a BAU run, and no CCS at all in 2010
***--------------------------------------------------------------------
vm_cap.fx("2010",regi,teCCS,rlf) = 0;
if(cm_emiscen = 1,
vm_cap.fx(t,regi,teCCS,rlf) = 0;
);
*** ------------------------------------------------------------------------
*** Fix nuclear to historic values
*** ------------------------------------------------------------------------
if (cm_startyear le 2015,
loop(regi,
p_CapFixFromRWfix("2015",regi,"tnrs") = max( pm_aux_capLowerLimit("tnrs",regi,"2015") , pm_NuclearConstraint("2015",regi,"tnrs") );
p_deltaCapFromRWfix("2015",regi,"tnrs") = ( p_CapFixFromRWfix("2015",regi,"tnrs") - pm_aux_capLowerLimit("tnrs",regi,"2015") )
/ 7.5;
p_deltaCapFromRWfix("2010",regi,"tnrs") = ( p_CapFixFromRWfix("2015",regi,"tnrs") - pm_aux_capLowerLimit("tnrs",regi,"2015") )
/ 7.5;
vm_cap.fx("2015",regi,"tnrs","1") = p_CapFixFromRWfix("2015",regi,"tnrs");
);
);
if (cm_startyear le 2020, !! require the realization of at least 50% of the plants that are currently under construction and thus might be finished in the time period 2018-2022
vm_deltaCap.lo("2020",regi,"tnrs","1") = 0.5 * pm_NuclearConstraint("2020",regi,"tnrs") / 5;
vm_deltaCap.up("2020",regi,"tnrs","1") = pm_NuclearConstraint("2020",regi,"tnrs") / 5;
);
if (cm_startyear le 2025 AND cm_nucscen ge 2, !! upper bound calculated in moinput/R/calcCapacityNuclear.R: 50% of planned and 30% of proposed plants, plus extra for lifetime extension and newcomers
vm_deltaCap.up("2025",regi,"tnrs","1") = pm_NuclearConstraint("2025",regi,"tnrs") / 5;
);
if (cm_startyear le 2030 AND cm_nucscen ge 2, !! upper bound calculated in moinput/R/calcCapacityNuclear.R: 50% of planned and 70% of proposed plants, plus extra for lifetime extension and newcomers
vm_deltaCap.up("2030",regi,"tnrs","1") = pm_NuclearConstraint("2030",regi,"tnrs") / 5;
);
display p_CapFixFromRWfix, p_deltaCapFromRWfix;
*** ------------------------------------------------------------------------------------------
*RP* implement switch for scenarios with different nuclear assumptions:
*** ------------------------------------------------------------------------------------------
** FS: swtich on fnrs only in nucscen 0 and 4, (2 is default)
if (cm_nucscen gt 0 AND cm_nucscen ne 4,
vm_deltaCap.up(t,regi,"fnrs",rlf)$(t.val ge 2010)= 0;
vm_cap.fx(t,regi,"fnrs",rlf)$(t.val ge 2010) = 0;
*mh no tnrs:
if (cm_nucscen eq 3,
vm_deltaCap.up(t,regi_nucscen,"tnrs",rlf)$(t.val ge 2010) = 0;
vm_cap.lo(t,regi_nucscen,"tnrs",rlf)$(t.val ge 2010)= 0;
* no new nuclear investments after 2020, until then all currently planned plants are built
if (cm_nucscen eq 5,
vm_deltaCap.up(t,regi_nucscen,"tnrs",rlf)$(t.val gt 2020)= 0;
vm_cap.lo(t,regi_nucscen,"tnrs",rlf)$(t.val gt 2015) = 0;
);
*FS: nuclear phase-out by 2040
if (cm_nucscen eq 7,
vm_prodSe.up(t,regi_nucscen,"peur","seel","tnrs")$(t.val ge 2040) = 0;
);
*** -------------------------------------------------------------
*** *DK* Phaseout of 1st generation biofuel technologies
*** -------------------------------------------------------------
Lavinia Baumstark
committed
if(cm_1stgen_phaseout=1,
vm_deltaCap.up(t,regi,"bioeths",rlf)$(t.val gt 2030) = 0;
vm_deltaCap.up(t,regi,"biodiesel",rlf)$(t.val gt 2030) = 0;
);
*** -----------------------------------------------------------
*mh Implementation of scenarios where capacities are fixed at BAU level:
*** -----------------------------------------------------------
if (cm_emiscen ne 1,
if (c_solscen eq 3,
vm_cap.up(t,regi,"spv",rlf)$(t.val ge 2010) = p_boundtmp(t,regi,"spv",rlf);
);
if (cm_nucscen eq 4,
vm_cap.up(t,regi_nucscen,"tnrs",rlf)$(t.val ge 2010) = p_boundtmp(t,regi_nucscen,"tnrs",rlf);
vm_cap.up(t,regi_nucscen,"fnrs",rlf)$(t.val ge 2010) = p_boundtmp(t,regi_nucscen,"fnrs",rlf);
);
);
*** -----------------------------------------------------------
*mh bounds that narrow the solution space to help the conopt solver:
*** -----------------------------------------------------------
*nr* cumulated capacity never falls below initial cumulated capacity:
vm_capCum.lo(ttot,regi,teLearn)$(ttot.val ge cm_startyear) = pm_data(regi,"ccap0",teLearn);
*nr: floor costs represent the lower bound of learning technologies investment costs
vm_costTeCapital.lo(t,regi,teLearn) = pm_data(regi,"floorcost",teLearn);
*cb 20120319 avoid negative adjustment costs in 2005 (they would allow the model to artificially save money)
v_adjFactor.fx("2005",regi,te)=0;
vm_emiMacSector.lo(t,regi,enty) = 0;
vm_emiMacSector.lo(t,regi,"co2luc")= -5.0; !! afforestation can lead to negative emissions
vm_emiMac.fx(t,regi,"so2") = 0;
vm_emiMac.fx(t,regi,"bc") = 0;
vm_emiMac.fx(t,regi,"oc") = 0;
*** -------------------------------------------------------------------------
*** Exogenous values:
*** -------------------------------------------------------------------------
***----
*RP* fix capacities for wind, spv and csp to real world 2010 and 2015 values:
***----
loop(te$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind")),
vm_cap.lo("2015",regi,te,"1") = 0.95 * p_histCap("2015",regi,te)$(p_histCap("2015",regi,te) gt 1e-10);
vm_cap.up("2015",regi,te,"1") = 1.05 * p_histCap("2015",regi,te)$(p_histCap("2015",regi,te) gt 1e-10);
*additional bound on 2020 expansion: at least yearly as much as in 2016,2017 average
Robert Pietzcker
committed
vm_deltaCap.lo("2020",regi,te,"1") = (p_histCap("2018",regi,te)-p_histCap("2015",regi,te))/3;
);
vm_cap.up("2015",regi,"csp",'1') = 1e-5 + 1.05 * vm_cap.lo("2015",regi,"csp","1"); !! allow offset of 10MW even for countries with no CSP installations to help the solver
Robert Pietzcker
committed
*RR* set lower bounds to spv installed capacity in 2020 to reflect the massive deployment in recent years to 2018 historical values plus a conservative estimation of expected additional deployment until 2020 (+10% per year).
vm_cap.lo("2020",regi,"spv","1")$(p_histCap("2018",regi,"spv")) = p_histCap("2018",regi,"spv")*(1+0.1)**2;
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
*CB* additional upper bound on 2020 deployment: doubling of historic rate plus 2 GW for solar and wind, and 500 MW for CSP
loop(regi,
loop(te$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind")),
vm_deltaCap.up("2020",regi,te,"1") = max(2*(p_histCap("2018",regi,te)-p_histCap("2015",regi,te))/3,2*(p_histCap("2018",regi,te)-p_histCap("2017",regi,te)),0.006$(sameas(te,"spv")) + 0.0055$(sameas(te,"wind"))+0.0005$(sameas(te,"csp")));
);
);
*** lower bound on capacities for ngcc and ngt for regions defined at the p_histCap file
loop(te$(sameas(te,"ngcc") OR sameas(te,"ngt")),
*** vm_cap.lo("2010",regi,te,"1")$p_histCap("2010",regi,te) = 0.75 * p_histCap("2010",regi,te);
vm_cap.lo("2015",regi,te,"1")$p_histCap("2015",regi,te) = 0.75 * p_histCap("2015",regi,te);
);
*** fix emissions to historical emissions in 2010
*** RP: turned off in March 2018, as it produces substantial negative side-effects (requiring strong early retirement in 2010, which influences the future investments even in Reference scenarios)
*** vm_emiTe.up("2010",regi,"co2") = p_boundEmi("2010",regi) ;
*** lower bound on stored CO2
vm_emiTe.lo(ttot,regi,"cco2") = 0;
*** -------------------------------------------------------
*** Advanced technologies shouldn't be built prior to 2015/2020:
*** -------------------------------------------------------
loop(regi,
loop(teNoLearn(te),
if( ( pm_data(regi,"tech_stat",te) eq 2 ) ,
vm_deltaCap.fx("2010",regi,te,rlf) = 0;
vm_cap.lo("2010",regi,te,rlf)=0;
vm_cap.lo("2015",regi,te,rlf)=0;
elseif ( pm_data(regi,"tech_stat",te) eq 3 ),
vm_deltaCap.fx("2010",regi,te,rlf) = 0;
vm_deltaCap.fx("2015",regi,te,rlf) = 0;
vm_cap.lo("2010",regi,te,rlf)=0;
vm_cap.lo("2015",regi,te,rlf)=0;
vm_cap.lo("2020",regi,te,rlf)=0;
);
);
);
*CB 2012024 -----------------------------------------------------
*CB allow for early retirement at the start of free model time
*CB ------------------------------------------------------------
***decrease variable dimensions
vm_capEarlyReti.up(ttot,regi,te) = 0;
***generally allow full early retiremnt for all fossil technologies without CCS
vm_capEarlyReti.up(ttot,regi,te)$(teFosNoCCS(te)) = 1;
*** FS: allow nuclear early retirement (for nucscen 7)
vm_capEarlyReti.up(ttot,regi,"tnrs") = 1;
***restrict early retirement to the modeling time frame (to reduce runtime, the early retirement equations are phased out after 2110)
vm_capEarlyReti.up(ttot,regi,te)$(ttot.val lt 2009 or ttot.val gt 2111) = 0;
*cb 20120224 lower bound of 0.01% to help the model to be aware of the early retirement option
vm_capEarlyReti.lo(ttot,regi,te)$(teFosNoCCS(te) AND ttot.val gt 2011 AND ttot.val lt 2111) = 0.0001;
vm_capEarlyReti.lo(ttot,regi,"tnrs")$(ttot.val gt 2011 AND ttot.val lt 2111) = 0.0001;
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
*cb 20120301 no early retirement for dot, they are used despite their economic non-competitiveness for various reasons.
vm_capEarlyReti.fx(ttot,regi,"dot")=0;
*** -----------------------------------------------------------------------------
*DK 20100929 Bound on CCS injection rate
*** -----------------------------------------------------------------------------
*** default value (0.5%) is consistent with Interview Gerling (BGR)
*** http://www.iz-klima.de/aktuelles/archiv/news-2010/mai/news-05052010-2/
*** 12 Gt storage potential in Germany, 50-75 Mt/a injection => 60 Mt/a => 60/12000=0.005
*LP* if c_ccsinjecratescen=0 --> no CCS at all and vm_co2CCS is fixed to 0 before, therefore the upper bound is only set if there should be CCS!
*** -----------------------------------------------------------------------------
if ( c_ccsinjecratescen gt 0,
loop(regi,
***vm_co2CCS.up(t,regi,"tco2","ico2","ccsinje","1") = pm_dataccs(regi,"quan","1")*sm_ccsinjecrate
vm_co2CCS.up(t,regi,"cco2","ico2","ccsinje","1") = pm_dataccs(regi,"quan","1") * sm_ccsinjecrate;
);
);
*** fix 2010 emissions to historic projections when running a policy scenarios without fixing the 2010 time step to a BAU run. This way, the gdx are better suited for later runs that are based on baselines until 2010 or longer.
*AJS*02122014 Exclude this bound in nash cases, as trying to limit global emissions there will lead to infeasibilities
$ifi %optimization% == "negishi" if( (cm_startyear le 2010 AND cm_emiscen > 1), vm_emiAllGlob.fx('2010','co2') = 8.9 + 1.46; ); !! 8.9 is fossil emissions + cement, 1.4 land use
*** strong reliance on coal-to-liquids is not consistent with SSP1 storyline, therefore limit their use in the SSP 1 and SSP2 policy scenarios
$ifthen %c_SSP_forcing_adjust% == "forcing_SSP1"
vm_prodSe.up(t,regi,"pecoal","seliqfos","coalftrec")$(t.val gt 2050) = 0.00001;
vm_prodSe.up(t,regi,"pecoal","seliqfos","coalftcrec")$(t.val gt 2010) = 0.00001;
$endif
$ifthen %c_SSP_forcing_adjust% == "forcing_SSP2"
if(cm_emiscen gt 1,
vm_prodSe.up(t,regi,"pecoal","seliqfos","coalftcrec")$(t.val gt 2010) = 0.00001;
);
$endif
*** -------------------------------------------------------------------------------------------------------------
*RP* Upper limit on CCS deployment in 2020-2030
*LP* if c_ccsinjecratescen=0 --> no CCS at all and vm_co2CCS is fixed to 0 before, therefore the upper bound is only set if there should be CCS!
*** -------------------------------------------------------------------------------------------------------------
if ( c_ccsinjecratescen gt 0,
vm_co2CCS.up("2020",regi,"cco2","ico2","ccsinje","1") = pm_boundCapCCS(regi);
vm_co2CCS.up("2025",regi,"cco2","ico2","ccsinje","1") = pm_boundCapCCS(regi);
);
loop(regi,
if( (pm_boundCapCCS(regi) eq 0),
vm_cap.fx("2020",regi,teCCS,rlf) = 0;
vm_cap.fx("2025",regi,teCCS,rlf) = 0;
);
);
loop(regi,
if( (p_boundCapCCSindicator(regi) eq 0),
vm_cap.fx("2025",regi,teCCS,rlf) = 0;
vm_cap.fx("2030",regi,teCCS,rlf) = 0;
);
);
*AL* fixing prodFE in 2005 to the value contained in pm_cesdata("2005",regi,in,"quantity"). This is done to ensure that the energy system will reproduce the 2005 calibration values.
*** Fixing will produce clearly attributable errors (good for debugging) when using inconsistent data, as the GAMS accuracy when comparing fixed results is very high (< 1e-8).
***vm_prodFE.fx("2005",regi,se2fe(enty,enty2,te)) = sum(fe2ppfEn(enty2,in), pm_cesdata("2005",regi,in,"quantity") );
vm_deltaCap.up(t,regi,"gasftrec",rlf)$(t.val gt 2005) = 0.0;
vm_deltaCap.up(t,regi,"gasftcrec",rlf)$(t.val gt 2005) = 0.0;
$ontext
*** -------------------------------------------------------------
*** *RP* Chinese depoyment of coal power plants and coal use in industry was probably not only demand-driven, but also policy-driven (faster than demand). Therefore, we implement lower bounds on coal power plants and solid coal use:
*** -------------------------------------------------------------
if (cm_startyear le 2015,
vm_cap.lo("2015","CHN","pc","1") = 0.75; !! WEO says 826GW in 2013, 980 in 2020
vm_cap.lo("2010","CHN","coaltr","1") = 0.79; !! IEA says ~27EJ in 2010. In REMIND, a coaltr cap of 0.647 is equivalent to an FE solids coal level of 20.5 EJ, thus 25*0.647/20.5 = 0.79
vm_cap.lo("2015","CHN","coaltr","1") = 0.88; !! IEA says ~29.7EJ in 2012. In REMIND, a coaltr cap of 0.647 is equivalent to an FE solids coal level of 20.5 EJ, thus 28*0.647/20.5 = 0.88
);
$offtext
$if %c_SSP_forcing_adjust% == "forcing_SSP1" vm_deltaCap.up(t,regi,"coalgas",rlf)$(t.val gt 2010) = 0.00001;
*** -------------------------------------------------------------
*** H2 Curtailment
*** -------------------------------------------------------------
***Fixing h2curt value to zero to avoid the model to generate SE out of nothing.
***Models that have additional se production channels should release this variable (eg. RLDC power module).
loop(prodSeOth2te(enty,te),
vm_prodSeOth.fx(t,regi,"seh2","h2curt") = 0;
);
***---------------------------------------------------------------------------
*** Lower bounds on hydro
***---------------------------------------------------------------------------
*** as most of the costs for hydro are for the initial building, it is unlikely that existing hydro plants are not renovated, even if a completely new plant would not be economic
*** accordingly, set lower bound on hydro generation close to 2005 values
vm_prodSe.lo(t,regi,"pehyd","seel","hydro")$(t.val > 2005) = 0.99 * o_INI_DirProdSeTe(regi,"seel","hydro");
***---------------------------------------------------------------------------
*** make sure the model doesn't use technologies beyond grade 1
***---------------------------------------------------------------------------
*** for pe2se, se2se and se2fe the other grades should not be used
vm_deltaCap.fx(t,regi,te,rlf)$( (NOT rlf.val eq 1) AND ( teSe2rlf(te,"1") OR teFe2rlf(te,"1") ) ) = 0;
vm_cap.fx(ttot,regi,te,rlf)$((NOT rlf.val eq 1) AND ( teSe2rlf(te,"1") OR teFe2rlf(te,"1") ) ) = 0;
***----------------------------------------------------------------------------
*** fix F-gas emissions to inputdata (IMAGE)
***----------------------------------------------------------------------------
*** cm_startyear eq 2015 - SPA0
*** cm_startyear gt 2015 - SPAx
vm_emiFgas.fx(tall,all_regi,all_enty) = f_emiFgas(tall,all_regi,"%c_SSP_forcing_adjust%","%cm_rcp_scen%","%c_delayPolicy%",all_enty);
display vm_emiFgas.L;
*AL* Bugfix. For some reason the model cannot reduce the production of district heating to 0
*AL* where it should be 0. Not fixings can account for this
*AL* Fixing vm_prodSe to 0 avoids the problem
loop ((in,in2) $ (sameAs(in,"feheb") and sameAs(in2,"fehei")),
loop ((t, regi) $ ( (sameAs(t,"2010") OR sameAs(t,"2015"))
AND
((pm_cesdata(t,regi,in,"quantity") + pm_cesdata(t,regi,in,"offset_quantity")
+ pm_cesdata(t,regi,in2,"quantity") + pm_cesdata(t,regi,in2,"offset_quantity")
) eq 0)
AND
(sum(ttot$(ttot.val lt 2005), vm_deltacap.up(ttot,regi,"biochp","1")) eq 0)) ,
vm_prodSe.up(t,regi,"pegas" ,"seel","gaschp") = 0;
vm_prodSe.up(t,regi,"pecoal" ,"seel","coalchp") = 0;
vm_prodSe.up(t,regi,"pecoal" ,"sehe","coalhp") = 0;
vm_prodSe.up(t,regi,"pegeo" ,"sehe","geohe") = 0;
vm_prodSe.up(t,regi,"pesol" ,"sehe","solhe") = 0;
vm_prodSe.up(t,regi,"pebiolc","seel","biochp") = 0;
vm_prodSe.up(t,regi,"pebiolc","sehe","biohp") = 0;
vm_prodSe.up(t,regi,"pegas","sehe","gashp") = 0;
);
);
***----------------------------------------------------------------------------
*** lower bound on share of green hydrogen starting from 2030 (c_greenH2)
***----------------------------------------------------------------------------
v_shGreenH2.lo(t,regi)$(t.val eq 2025) = c_shGreenH2 * 2/3;
v_shGreenH2.lo(t,regi)$(t.val gt 2025) = c_shGreenH2;
Alois Dirnaichner
committed
***----------------------------------------------------------------------------
*** upper bound on bioliquids as a share of transport liquids
***----------------------------------------------------------------------------
v_shBioliq.up(t,regi)$(t.val > 2020) = c_shBioliq;