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