Newer
Older
*** | (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/30_biomass/magpie_4/bounds.gms
*** -------------------------------------------------------------
*** Bounds on pedem
*** -------------------------------------------------------------
*** -------------------------------------------------------------
*** Bounds on 1st generation biomass annual production
*** -------------------------------------------------------------
*** Prescribe upper and lower limit for first generation biomass from 2030/45 on, so REMIND has freedom before.
*** To avoid infeasibilities it was necessary to modify the initial vintage structure for bioeths.
vm_fuExtr.up(t,regi,"pebios","5")$(t.val ge 2045) = p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.up(t,regi,"pebioil","5")$(t.val ge 2030) = p30_datapebio(regi,"pebioil","5","maxprod",t);
$ifthen.edge_esm_transport "%transport%" == "edge_esm"
*** Slightly relaxed extraction bounds for biofuels.
vm_fuExtr.up(t,regi,"pebios","5")$(t.val ge 2045) = 1.4*p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.up(t,regi,"pebios","5")$(t.val ge 2055) = p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.up(t,regi,"pebioil","5")$(t.val ge 2030) = 2*p30_datapebio(regi,"pebioil","5","maxprod",t);
vm_fuExtr.up(t,regi,"pebioil","5")$(t.val ge 2050) = p30_datapebio(regi,"pebioil","5","maxprod",t);
$endif.edge_esm_transport
Lavinia Baumstark
committed
if(cm_1stgen_phaseout=0,
vm_fuExtr.lo(t,regi,"pebios","5")$(t.val ge 2030) = p30_datapebio(regi,"pebios","5","maxprod",t)*0.9;
vm_fuExtr.lo(t,regi,"pebioil","5")$(t.val ge 2030) = p30_datapebio(regi,"pebioil","5","maxprod",t)*0.9;
else
vm_fuExtr.lo(t,regi,"pebios","5")$(t.val eq 2030) = p30_datapebio(regi,"pebios","5","maxprod",t)*0.9;
vm_fuExtr.lo(t,regi,"pebioil","5")$(t.val eq 2030) = p30_datapebio(regi,"pebioil","5","maxprod",t)*0.9;
);
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
*** -------------------------------------------------------------
*** Bounds on 2nd generation biomass annual production
*** -------------------------------------------------------------
*** bound on global annual pebiolc production in EJ/a
s30_max_pebiolc $(cm_bioenergymaxscen=1) = 100;
s30_max_pebiolc $(cm_bioenergymaxscen=2) = 200;
s30_max_pebiolc $(cm_bioenergymaxscen=3) = 300;
s30_max_pebiolc $(cm_bioenergymaxscen=4) = 152;
p30_max200_path(t) = s30_max_pebiolc;
*** bounds until 2025 taken from old 200 EJ maxprod in generisdata_biosupply_grades.prn (EJ/yr)
p30_max200_path("2005") = 68.25;
p30_max200_path("2010") = 100;
p30_max200_path("2015") = 130;
p30_max200_path("2020") = 160;
p30_max200_path("2025") = 190;
*** Use values if they are smaller than the maximal allowed value (s30_max_pebiolc)
*** otherwise limit to maximal allowed value (s30_max_pebiolc)
loop(t,
if (p30_max200_path(t)<s30_max_pebiolc,
p30_max_pebiolc_path_glob(t) = p30_max200_path(t);
ELSE
p30_max_pebiolc_path_glob(t) = s30_max_pebiolc;
);
);
*** Reduce the global upper bound on purpose grown bio-energy by residues, since the total bound applies to the sum of residues and purpose grown
p30_max_pebiolc_path_glob(t) = p30_max_pebiolc_path_glob(t) * sm_EJ_2_TWa - sum(regi, p30_datapebio(regi,"pebiolc","2","maxprod",t));
display p30_max_pebiolc_path_glob;
***-------------------------------------------------------------
*** Calclate regional bounds with equal marginal costs
*** from global bound (inverting the supply curve)
***-------------------------------------------------------------
loop(ttot$(ttot.val ge cm_startyear),
*** initialization
p30_max_pebiolc_dummy = 0;
p30_pebiolc_price_dummy = 0.01;
while(p30_max_pebiolc_dummy < p30_max_pebiolc_path_glob(ttot),
loop(regi$(NOT sameas(regi,'JPN')),
*** Avoid execution errors for x**y with x<0 by applying the if-clause
if( p30_pebiolc_price_dummy > (i30_bioen_price_a(ttot,regi)) * 1.01,
p30_fuelex_dummy(regi) = (p30_pebiolc_price_dummy - i30_bioen_price_a(ttot,regi)) / i30_bioen_price_b(ttot,regi);
else
p30_fuelex_dummy(regi) = 0;
);
);
*** Exclude JPN to avoid UNDF in p30_max_pebiolc_dummy
p30_max_pebiolc_dummy = sum(regi, p30_fuelex_dummy(regi));
p30_pebiolc_price_dummy = p30_pebiolc_price_dummy + 0.001;
);
p30_max_pebiolc_path(regi,ttot) = p30_fuelex_dummy(regi);
);
display p30_max_pebiolc_path;
***-------------------------------------------------------------
*** In REMIND there are two grades for fuel extraxtion from pebiolc. The first grade
*** is purpose grown bioenergy, the second grade are residues. The residue grade of
*** pebiolc (pebiolc.2) in REMIND is roughly MAgPIE's residue potential (plus some
*** extra demand for traditional biomass, see below).
*** Already in the initial years there are technologies in REMIND that demand biomass.
*** pm_pedem_res contains the biomass demand as it would evolve if all these biomass
*** technologies that are present in 2005 would phase out (phase-out-trajectory). When
*** calculating the maximal residue potential p30_maxprod_residue we make sure (by
*** applying the max operator) that the resulting residue potential is big enough to
*** feed these technologies so they do not need to demand purpose-grown biomass.
*** This is necessary, because in the early years MAgPIE's residue potential is smaller
*** than the initial demand from REMIND's technologies. Except for "biotr" all
*** technologies present in 2005 are allowed to expand, but the resulting additional
*** demand for biomass (exceeding the phase-out-trajectory) will then be supplied
*** from purpose-grown biomass.
p30_maxprod_residue(ttot,regi) = max(p30_datapebio(regi,"pebiolc","2","maxprod",ttot), sum(teBioPebiolc, pm_pedem_res(ttot,regi,teBioPebiolc)));
vm_fuExtr.up(t,regi,"pebiolc","2") = p30_maxprod_residue(t,regi)*1.0001;
*** According to EMF guidelines, the upper bound on total (residues+purpose) global
*** biomass production does not include traditional biomass use. Since the demand
*** for traditional biomass is already supplied by the residue grade we expand the
*** purpose-grown grade by the demand for traditional biomass.
if(cm_bioenergymaxscen>0,
vm_fuExtr.up(t,regi,"pebiolc","1") = p30_max_pebiolc_path(regi,t) + pm_pedem_res(t,regi,"biotr");
);
*** EOF ./modules/30_biomass/magpie_4/bounds.gms