Skip to content

Commit

Permalink
Merge pull request #1837 from lecfab/nurPrnRemoval
Browse files Browse the repository at this point in the history
Remove outdated input file generisdata_nur_ren.prn
  • Loading branch information
lecfab authored Sep 26, 2024
2 parents a95573d + 96fcf05 commit a223150
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 67 deletions.
36 changes: 17 additions & 19 deletions core/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -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"
;
Expand Down Expand Up @@ -961,8 +958,12 @@ $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;

*** geothermal heatpumps (geohe) do not get maxprod and nur from f_maxProdGradeRegi files
*** we set regional maxprod to 200EJ = 6.342TWa to represent unlimited potential
pm_dataren(regi,"maxprod","1","geohe") = 6.342;

*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]"
Expand Down Expand Up @@ -1014,12 +1015,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]"
Expand All @@ -1034,10 +1041,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;

***---------------------------------------------------------------------------
Expand Down Expand Up @@ -1127,11 +1130,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;

Expand Down
35 changes: 0 additions & 35 deletions core/input/generisdata_nur_ren.prn

This file was deleted.

30 changes: 17 additions & 13 deletions modules/32_power/IntC/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -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 capacity 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 )
Expand All @@ -68,39 +69,42 @@ 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,
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)
;


Expand Down Expand Up @@ -165,7 +169,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.
Expand Down

0 comments on commit a223150

Please sign in to comment.