From f7f6bd399fc4adbd63d0f1217de438f1f1997100 Mon Sep 17 00:00:00 2001 From: lecfab Date: Mon, 23 Sep 2024 15:26:13 +0200 Subject: [PATCH] remove outdated input file generisdata_nur_ren.prn --- core/datainput.gms | 35 +++++++++++++---------------- core/input/generisdata_nur_ren.prn | 35 ----------------------------- modules/32_power/IntC/equations.gms | 27 +++++++++++----------- 3 files changed, 29 insertions(+), 68 deletions(-) delete mode 100644 core/input/generisdata_nur_ren.prn diff --git a/core/datainput.gms b/core/datainput.gms index f46f0478a..27c4be587 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -569,9 +569,6 @@ $endif fm_dataemiglob(enty,enty2,te,"co2")$pe2se(enty,enty2,te) = 1/s_zj_2_twa * fm_dataemiglob(enty,enty2,te,"co2"); fm_dataemiglob(enty,enty2,te,"cco2") = 1/s_zj_2_twa * fm_dataemiglob(enty,enty2,te,"cco2"); -table f_datarenglob(char,rlf,*) "global nur and ren data" -$include "./core/input/generisdata_nur_ren.prn" -; table f_dataetaglob(tall,all_te) "global eta data" $include "./core/input/generisdata_varying_eta.prn" ; @@ -961,8 +958,11 @@ $if %cm_MAgPIE_coupling% == "on" p_efFossilFuelExtr(regi,"pebiolc","n2obio") = 0 display p_efFossilFuelExtr; -pm_dataren(regi,"nur",rlf,te) = f_datarenglob("nur",rlf,te); -pm_dataren(regi,"maxprod",rlf,te) = sm_EJ_2_TWa * f_datarenglob("maxprod",rlf,te); +*** capacity factors (nur) are 1 by default +pm_dataren(regi,"nur",rlf,te) = 1; + +*** value copied from old file generisdata_nur_ren.prn (50EJ = 1.5855TWa) +pm_dataren(regi,"maxprod","1","geohe") = 1.5855; *RP* hydro, spv and csp get maxprod for all regions and grades from external file table f_maxProdGradeRegiHydro(all_regi,char,rlf) "input of regionalized maximum from hydro [EJ/a]" @@ -1014,12 +1014,18 @@ $ondelim $include "./core/input/f_dataRegiSolar.cs3r" $offdelim ; -pm_dataren(all_regi,"maxprod",rlf,"csp") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","csp",rlf); -pm_dataren(all_regi,"maxprod",rlf,"spv") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","spv",rlf); -pm_dataren(all_regi,"nur",rlf,"csp") = f_dataRegiSolar(all_regi,"nur","csp",rlf); -pm_dataren(all_regi,"nur",rlf,"spv") = f_dataRegiSolar(all_regi,"nur","spv",rlf); +pm_dataren(all_regi,"maxprod",rlf,"csp") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","csp",rlf); +pm_dataren(all_regi,"maxprod",rlf,"spv") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","spv",rlf); +pm_dataren(all_regi,"nur",rlf,"spv") = f_dataRegiSolar(all_regi,"nur","spv",rlf); p_datapot(all_regi,"limitGeopot",rlf,"pesol") = f_dataRegiSolar(all_regi,"limitGeopot","spv",rlf); -pm_data(all_regi,"luse","spv") = f_dataRegiSolar(all_regi,"luse","spv","1")/1000; +pm_data(all_regi,"luse","spv") = 0.001 * f_dataRegiSolar(all_regi,"luse","spv","1"); + +*** RP: rescale CSP capacity factors in REMIND +*** In the DLR resource data input files, the numbers are based on a SM3/12h setup, +*** while the cost data from IEA seems rather based on a SM2/6h setup (with 40% average CF). +*** Accordingly, decrease CF in REMIND to 2/3 of the DLR values (no need to correct maxprod, +*** as here no miscalculation of total energy yield takes place, in contrast to wind) +pm_dataren(all_regi,"nur",rlf,"csp") = 2/3 * f_dataRegiSolar(all_regi,"nur","csp",rlf); table f_maxProdGeothermal(all_regi,char) "input of regionalized maximum from geothermal [EJ/a]" @@ -1034,10 +1040,6 @@ pm_dataren(all_regi,"maxprod","1","geohdr")$f_maxProdGeothermal(all_regi,"maxpro *** FS: temporary fix: set minimum geothermal potential across all regions to 10 PJ (still negligible even in small regions) to get rid of infeasibilities pm_dataren(all_regi,"maxprod","1","geohdr")$(f_maxProdGeothermal(all_regi,"maxprod") <= 0.01) = sm_EJ_2_TWa * 0.01; - -*mh* set 'nur' for all non renewable technologies to '1': -pm_dataren(regi,"nur",rlf,teNoRe) = 1; - display p_datapot, pm_dataren; ***--------------------------------------------------------------------------- @@ -1127,11 +1129,6 @@ pm_cf("2015",regi,"spv") = pm_cf("2015",regi,"spv") * p_aux_capacityFactorHistOv pm_cf("2020",regi,"spv") = pm_cf("2020",regi,"spv") * (p_aux_capacityFactorHistOverREMIND(regi,"spv")+1)/2; pm_cf("2025",regi,"spv") = pm_cf("2025",regi,"spv") * (p_aux_capacityFactorHistOverREMIND(regi,"spv")+3)/4; -*** RP rescale CSP capacity factors in REMIND - in the DLR resource data input files, the numbers are based on a SM3/12h setup, while the cost data from IEA seems rather based on a SM2/6h setup (with 40% average CF) -*** Accordingly, decrease CF in REMIND to 2/3 of the DLR values (no need to correct maxprod, as here no miscalculation of total energy yield takes place, in contrast to wind) -loop(te$sameas(te,"csp"), - pm_dataren(regi,"nur",rlf,te) = pm_dataren(regi,"nur",rlf,te) * 2/3 ; -); display p_aux_capacityFactorHistOverREMIND, pm_dataren; diff --git a/core/input/generisdata_nur_ren.prn b/core/input/generisdata_nur_ren.prn deleted file mode 100644 index ed725b05c..000000000 --- a/core/input/generisdata_nur_ren.prn +++ /dev/null @@ -1,35 +0,0 @@ -*** SOF ./core/input/generisdata_nur_ren.prn -*TA: This file includes the capacity factors (nur) for different renewable energy sources and for different grades. -*TA: Max. annual global production (maxprod) is given in EJ/a for wind onshore, hydro, geohdr, geohe. -* The potential is categorized into different greades. - - - - wind spv hydro geohdr geohe csp storspv storwind storcsp gridspv gridwind gridcsp -nur.1 0.31 0.230 0.550 1.000 1.000 0.72 1 1 1 0.85 0.85 0.85 -nur.2 0.28 0.215 0.450 0.68 -nur.3 0.24 0.200 0.350 0.65 -nur.4 0.20 0.185 0.250 0.61 -nur.5 0.17 0.172 0.150 0.57 -nur.6 0.15 0.160 0.53 -nur.7 0.13 0.150 0.48 -nur.8 0.12 0.140 0.43 -nur.9 0.11 0.130 0.40 -nur.10 0.10 -nur.11 0.08 -nur.12 0.07 - - -maxprod.1 50 8 0.112 50.0 -maxprod.2 40 16 -maxprod.3 40 18 -maxprod.4 40 8 -maxprod.5 40 -maxprod.6 40 -maxprod.7 60 - - - - - -*** EOF ./core/input/generisdata_nur_ren.prn diff --git a/modules/32_power/IntC/equations.gms b/modules/32_power/IntC/equations.gms index be046fafc..956b5dacf 100644 --- a/modules/32_power/IntC/equations.gms +++ b/modules/32_power/IntC/equations.gms @@ -56,8 +56,9 @@ q32_usableSeTe(t,regi,entySe,te)$(sameas(entySe,"seel") AND teVRE(te)).. ***--------------------------------------------------------------------------- *' Definition of capacity constraints for storage: ***--------------------------------------------------------------------------- -*' This equation calculates the storage cpacity for each testor that needs to be installed based on the amount of v32_storloss that is calculated below in -*' q32_storloss. Multiplying v32_storloss with "eta/(1-eta)" yields the total output of a storage technology; this output has to be smaller than cap * capfac. +*' This equation calculates the storage cpacity for each teStor that needs to be installed based on the amount of +*' v32_storloss that is calculated below in q32_storloss. Multiplying v32_storloss with "eta/(1-eta)" yields +*' the total output of a storage technology; this output has to be smaller than cap * capfac. q32_limitCapTeStor(t,regi,teStor)$( t.val ge 2020 ) .. ( 0.5$( cm_VRE_supply_assumptions eq 1 ) !! reduce storage investment needs by half for VRE_supply_assumptions = 1 + 1$( cm_VRE_supply_assumptions ne 1 ) @@ -68,39 +69,37 @@ q32_limitCapTeStor(t,regi,teStor)$( t.val ge 2020 ) .. =l= sum(te2rlf(teStor,rlf), vm_capFac(t,regi,teStor) - * pm_dataren(regi,"nur",rlf,teStor) * vm_cap(t,regi,teStor,rlf) ) ; -*** H2 storage implementation: Storage technologies (storspv, storwind etc.) also -*** represent H2 storage. This is implemented by scaling up capacities of -*** H2 turbines (h2turbVRE, seh2 -> seel) with VRE capacities which require storage (according to q32_limitCapTeStor). +*** H2 storage implementation: +*** Storage technologies (storspv, storwind etc.) also represent H2 storage. +*** This is implemented by scaling up capacities of H2 turbines (h2turbVRE, seh2 -> seel) +*** with VRE capacities which require storage (according to q32_limitCapTeStor). *** These H2 turbines (h2turbVRE) do not have capital cost. Their cost are already considered in storage technologies. -*** H2 turbines do not need be built if sufficient gas turbines (ngt) are available to provide flexibility. -*' Require a certain capacity of either hydrogen or gas turbines as peaking backup capacity. The driver is the testor capacity, which in turn is determined by v32_storloss +*** H2 turbines are not needed if sufficient gas turbines (ngt) are available to provide flexibility. +*' Require a certain capacity of either hydrogen or gas turbines as peaking backup capacity. The driver is the teStor capacity, which in turn is determined by v32_storloss q32_h2turbVREcapfromTestor(t,regi).. vm_cap(t,regi,"h2turbVRE","1") + vm_cap(t,regi,"ngt","1") =g= - sum(teStor, - p32_storageCap(teStor,"h2turbVREcapratio") * vm_cap(t,regi,teStor,"1") ) + sum(teStor, p32_storageCap(teStor,"h2turbVREcapratio") * vm_cap(t,regi,teStor,"1") ) ; *** h2turbVRE hydrogen turbines should only be built in conjunction with storage capacities and not on its own q32_h2turbVREcapfromTestorUp(t,regi).. vm_cap(t,regi,"h2turbVRE","1") =l= - sum(te$teStor(te), - p32_storageCap(te,"h2turbVREcapratio") * vm_cap(t,regi,te,"1") ) + sum(teStor, p32_storageCap(teStor,"h2turbVREcapratio") * vm_cap(t,regi,teStor,"1") ) ; *** build additional electrolysis capacities with stored VRE electricity, phase-in from 2030 to 2040 q32_elh2VREcapfromTestor(t,regi).. vm_cap(t,regi,"elh2","1") =g= - sum(te$teStor(te), p32_storageCap(te,"elh2VREcapratio") * vm_cap(t,regi,te,"1") ) * p32_phaseInElh2VREcap(t) + sum(teStor, p32_storageCap(teStor,"elh2VREcapratio") * vm_cap(t,regi,teStor,"1") ) * p32_phaseInElh2VREcap(t) ; @@ -165,7 +164,7 @@ q32_shStor(t,regi,teVRE)$(t.val ge 2015).. *' as it drives storage investments and thus the additional costs seen by VRE. It depends linearly on the usableSE output from this VRE, and linearly on the *' SPECIFIC integration challenges, which in turn are mainly the adjusted share of the technology itself (v32_shSTor), but also increase when the total VRE share *' increases beyond a (time-dependent) threshold. -*' The term "(1-eta)/eta" is equal to the ratio "losses of a testor" to "output of a testor". +*' The term "(1-eta)/eta" is equal to the ratio "losses of a teStor" to "output of a teStor". *' An example: If the specific integration challenges (v32_shStor + p32_Fact * v32_shAddInt) of eg. PV would reach 100%, then ALL the usable output of PV *' would have to be "stabilized" by going through storsp, so the total storage losses & curtailment would exactly represent the (1-eta) values of storspv. When *' the specific integration challenge term () is below 100%, the required storage and resulting losses are scaled down accordingly.