From 1481e06ddb0ee513b0f4b6861f0ccb1715fe6300 Mon Sep 17 00:00:00 2001 From: Robert Pietzcker <pietzcker@pik-potsdam.de> Date: Wed, 11 Mar 2020 23:21:01 +0100 Subject: [PATCH] Use the updated PV investment costs for 2020, and reduce floor cost assumptions --- core/bounds.gms | 6 +++--- core/datainput.gms | 13 ++++++++++++- core/equations.gms | 24 ++++++++++++------------ core/input/generisdata_tech.prn | 4 ++-- core/input/generisdata_tech_SSP1.prn | 4 ++-- core/input/generisdata_tech_SSP5.prn | 8 ++++---- 6 files changed, 35 insertions(+), 24 deletions(-) diff --git a/core/bounds.gms b/core/bounds.gms index b84c883..c69a62c 100755 --- a/core/bounds.gms +++ b/core/bounds.gms @@ -287,12 +287,12 @@ 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 - vm_deltaCap.lo("2020",regi,te,"1") = (p_histCap("2017",regi,te)-p_histCap("2015",regi,te))/2; + 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 -*RR* set lower bounds to spv installed capacity in 2020 to reflect the massive deployment in recent years to 2017 historical values plus a conservative estimation of expected additional deployment until 2020 (+10% per year). -vm_cap.lo("2020",regi,"spv","1")$(p_histCap("2017",regi,"spv")) = p_histCap("2017",regi,"spv")*(1+0.1)**3; +*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; *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, diff --git a/core/datainput.gms b/core/datainput.gms index a46dd2b..ab6bb1f 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -753,7 +753,7 @@ loop(ttot$(ttot.val ge 2005), p_adj_coeff(ttot,regi,"gasftcrec") = 0.8; p_adj_coeff(ttot,regi,"coalftrec") = 0.6; p_adj_coeff(ttot,regi,"coalftcrec") = 0.8; - p_adj_coeff(ttot,regi,"spv") = 0.05; + p_adj_coeff(ttot,regi,"spv") = 0.1; p_adj_coeff(ttot,regi,"wind") = 0.1; p_adj_coeff(ttot,regi,"dac") = 0.8; p_adj_coeff(ttot,regi,'apCarH2T') = 1.0; @@ -874,6 +874,10 @@ pm_data(regi,"floorcost",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi, *** In case regionally differentiated investment costs should be used the corresponding entries are revised: $if %cm_techcosts% == "REG" pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2015",regi,teRegTechCosts); +loop(teRegTechCosts$(sameas(teRegTechCosts,"spv") ), +$if %cm_techcosts% == "REG" pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2020",regi,teRegTechCosts); +); + $if %cm_techcosts% == "REG" pm_data(regi,"incolearn",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"floorcost",te) ; @@ -889,12 +893,19 @@ Execute_Loadpoint 'input' p_capCum = vm_capCum.l; *** in case the technologies did not exist in the gdx, set to a non-zero value p_capCum(t,regi,te)$( NOT p_capCum(t,regi,te)) = sm_eps; +display p_capCum; +*RP overwrite p_capCum by exogenous values for 2020 +p_capCum("2020",regi,"spv") = 0.6 / card(regi2); !! roughly 600GW in 2020 +display p_capCum; pm_data(regi,"learnMult_woFC",teLearn(te)) = pm_data(regi,"incolearn",te)/sum(regi2,(pm_data(regi2,"ccap0",te))**(pm_data(regi,"learnExp_woFC",te))); *RP* adjust parameter learnMult_woFC to take floor costs into account $if %cm_techcosts% == "GLO" pm_data(regi,"learnMult_wFC",teLearn(te)) = pm_data(regi,"incolearn",te)/(sum(regi2,pm_data(regi2,"ccap0",te))**pm_data(regi,"learnExp_wFC",te)); *NB* this is the correction of the original parameter calibration $if %cm_techcosts% == "REG" pm_data(regi,"learnMult_wFC",teLearn(te)) = pm_data(regi,"incolearn",te)/(sum(regi2,p_capCum("2015",regi2,te))**pm_data(regi,"learnExp_wFC",te)); +loop(teRegTechCosts$(sameas(teRegTechCosts,"spv") ), +$if %cm_techcosts% == "REG" pm_data(regi,"learnMult_wFC",teLearn(te)) = pm_data(regi,"incolearn",te)/(sum(regi2,p_capCum("2020",regi2,te))**pm_data(regi,"learnExp_wFC",te)); +); ***parameter calculation for global level, that regional values can gradually converge to fm_dataglob("learnMult_wFC",teLearn(te)) = fm_dataglob("incolearn",te)/(fm_dataglob("ccap0",te) **fm_dataglob("learnExp_wFC", te)); diff --git a/core/equations.gms b/core/equations.gms index 36fb20a..4f8c653 100644 --- a/core/equations.gms +++ b/core/equations.gms @@ -422,35 +422,35 @@ q_costTeCapital(t,regi,teLearn) .. ** fm_dataglob("learnExp_wFC",teLearn) ) )$( t.val le 2005 ) -*** special treatment for 2010: start divergence of regional values by using a -*** 50/50-split global 2005 to regional 2015 in order to phase-in the observed 2015 regional +*** special treatment for 2010, 2015: start divergence of regional values by using a +*** t-split of global 2005 to regional 2020 in order to phase-in the observed 2020 regional *** variation from input-data - + ( 0.5 * fm_dataglob("learnMult_wFC",teLearn) - * ( sum(regi2, vm_capCum("2005",regi2,teLearn)) - + pm_capCumForeign("2005",regi,teLearn) + + ( (2020 - t.val)/15 * fm_dataglob("learnMult_wFC",teLearn) + * ( sum(regi2, vm_capCum(t,regi2,teLearn)) + + pm_capCumForeign(t,regi,teLearn) ) ** fm_dataglob("learnExp_wFC",teLearn) - + 0.5 * pm_data(regi,"learnMult_wFC",teLearn) - * ( sum(regi2, vm_capCum("2015",regi2,teLearn)) - + pm_capCumForeign("2015",regi,teLearn) + + (t.val - 2005)/15 * pm_data(regi,"learnMult_wFC",teLearn) + * ( sum(regi2, vm_capCum(t,regi2,teLearn)) + + pm_capCumForeign(t,regi,teLearn) ) ** pm_data(regi,"learnExp_wFC",teLearn) - )$( t.val eq 2010 ) + )$( (t.val gt 2005) AND (t.val lt 2020) ) *** assuming linear convergence of regional learning curves to global values until 2050 - + ( (pm_ttot_val(t) - 2015) / 35 * fm_dataglob("learnMult_wFC",teLearn) + + ( (pm_ttot_val(t) - 2020) / 30 * fm_dataglob("learnMult_wFC",teLearn) * ( sum(regi2, vm_capCum(t,regi2,teLearn)) + pm_capCumForeign(t,regi,teLearn) ) ** fm_dataglob("learnExp_wFC",teLearn) - + (2050 - pm_ttot_val(t)) / 35 * pm_data(regi,"learnMult_wFC",teLearn) + + (2050 - pm_ttot_val(t)) / 30 * pm_data(regi,"learnMult_wFC",teLearn) * ( sum(regi2, vm_capCum(t,regi2,teLearn)) + pm_capCumForeign(t,regi,teLearn) ) ** pm_data(regi,"learnExp_wFC",teLearn) - )$( t.val ge 2015 AND t.val le 2050 ) + )$( t.val ge 2020 AND t.val le 2050 ) *** globally harmonized costs after 2050 + ( fm_dataglob("learnMult_wFC",teLearn) diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn index ab3f8dc..b0af633 100644 --- a/core/input/generisdata_tech.prn +++ b/core/input/generisdata_tech.prn @@ -70,9 +70,9 @@ inco0 3600 1200 2700 2400 5160 constrTme 4 1 5 1 1 1 3 mix0 eta 1.00 1.00 1.00 1.00 1.00 1.00 1.00 -omf 0.04 0.06 0.025 0.02 0.015 0.025 +omf 0.04 0.06 0.025 0.02 0.020 0.025 lifetime 30 25 130 25 30 25 30 -incolearn 1500 4910 8760 +incolearn 1500 5060 8760 ccap0 0.06 0.005 0.0002 learn 0.108 0.207 0.103 luse 0.09 0.021 diff --git a/core/input/generisdata_tech_SSP1.prn b/core/input/generisdata_tech_SSP1.prn index b8a1370..590a735 100644 --- a/core/input/generisdata_tech_SSP1.prn +++ b/core/input/generisdata_tech_SSP1.prn @@ -70,9 +70,9 @@ inco0 3600 1200 2700 2400 5160 constrTme 4 1 5 1 1 1 3 mix0 eta 1.00 1.00 1.00 1.00 1.00 1.00 1.00 -omf 0.04 0.06 0.025 0.02 0.015 0.025 +omf 0.04 0.06 0.025 0.02 0.020 0.025 lifetime 30 25 130 25 30 25 30 -incolearn 1700 5010 8960 +incolearn 1700 5110 8960 ccap0 0.06 0.005 0.0002 learn 0.108 0.207 0.103 luse 0.09 0.021 diff --git a/core/input/generisdata_tech_SSP5.prn b/core/input/generisdata_tech_SSP5.prn index bef0dfb..1b7d0c8 100644 --- a/core/input/generisdata_tech_SSP5.prn +++ b/core/input/generisdata_tech_SSP5.prn @@ -70,9 +70,9 @@ inco0 3600 1200 2700 2400 5160 constrTme 4 1 5 1 1 1 3 mix0 eta 1.00 1.00 1.00 1.00 1.00 1.00 1.00 -omf 0.04 0.06 0.025 0.02 0.015 0.025 +omf 0.04 0.06 0.025 0.02 0.020 0.025 lifetime 30 25 130 25 30 25 30 -incolearn 1300 4460 8290 +incolearn 1300 4910 8290 ccap0 0.06 0.005 0.0002 learn 0.084 0.17 0.08 luse 0.09 0.021 @@ -136,12 +136,12 @@ omv 36 76 lifetime 40 40 + storspv storwind storcsp -inco0 10800 4180 3310 +inco0 18000 7500 5400 mix0 0.00 0.00 0.00 eta 0.67 0.78 0.72 omf 0.02 0.02 0.02 lifetime 25 25 25 -incolearn 7490 2880 2300 +incolearn 12000 4800 3800 ccap0 0.00005 0.00005 0.00005 learn 0.10 0.10 0.10 -- GitLab