The 32_power module determines the operation production decisions for the electricity supply.
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
The RLDC
realization (Residual Load Duration Curve)
distinguishes different operation electricity supply decisions under
four distinct load bands, plus additional peak capacity
requirements.
Description | Unit | A | B | C | |
---|---|---|---|---|---|
cm_bioprod_histlim | regional parameter to limit biomass (pebiolc.1) production to a multiple of the 2015 production | x | x | ||
cm_ccapturescen | carbon capture option choice | x | |||
cm_emiscen | policy scenario choice | x | |||
cm_flex_tax | switch for enabling flexibility tax | x | x | ||
cm_FlexTaxFeedback | switch deciding whether flexibility tax feedback on buildlings and industry electricity prices is on | x | x | ||
cm_nucscen | nuclear option choice | x | |||
cm_PriceDurSlope_elh2 | slope of price duration curve of electrolysis | x | x | ||
cm_solwindenergyscen | scenario for fluctuating renewables, 1 is reference, 2 is pessimistic with limits to fluctuating SE el share | x | x | x | |
cm_VRE_supply_assumptions | default (0), optimistic (1), sombre (2), or bleak (3) assumptions on VRE supply | x | x | ||
pm_boundCapCCS (all_regi) |
installed and planed capacity of CCS | x | |||
pm_cap0 (all_regi, all_te) |
standing capacity in 2005 as calculated by the initialization routine generisinical. Unit: TWa | x | |||
pm_cf (tall, all_regi, all_te) |
Installed capacity availability - capacity factor (fraction of the year that a plant is running) | x | x | x | |
pm_data (all_regi, char, all_te) |
Large array for most technical parameters of technologies; more detail on the individual technical parameters can be found in the declaration of the set ‘char’ | x | x | x | |
pm_dataren (all_regi, char, rlf, all_te) |
Array including both regional renewable potential and capacity factor | x | x | x | |
pm_emifac (tall, all_regi, all_enty, all_enty, all_te, all_enty) |
emission factor by technology for all types of emissions in emiTe | x | |||
pm_eta_conv (tall, all_regi, all_te) |
Time-dependent eta for technologies that do not have explicit time-dependant etas, still eta converges until 2050 to dataglob_values. | \(efficiency (0..1)\) | x | x | x |
pm_fuExtrOwnCons (all_regi, all_enty, all_enty) |
energy own consumption in the extraction sector with first enty being the output produced and the second enty being the input required | x | x | x | |
pm_IO_input (all_regi, all_enty, all_enty, all_te) |
Energy input based on IEA data | x | x | ||
pm_prodCouple (all_regi, all_enty, all_enty, all_te, all_enty) |
own consumption | x | x | x | |
pm_SEPrice (ttot, all_regi, all_enty) |
parameter to capture all SE prices (tr$2005/TWa) | x | x | x | |
qm_budget (ttot, all_regi) |
Budget balance | x | x | x | |
sm_eps | small number: 1e-9 | x | x | x | |
vm_cap (tall, all_regi, all_te, rlf) |
net total capacities | x | x | x | |
vm_capDistr (tall, all_regi, all_te, rlf) |
net capacities, distributed to the different grades for renewables | x | |||
vm_capFac (ttot, all_regi, all_te) |
capacity factor of conversion technologies | x | x | x | |
vm_co2CCS (ttot, all_regi, all_enty, all_enty, all_te, rlf) |
all differenct ccs. | \(GtC/a\) | x | x | x |
vm_deltaCap (tall, all_regi, all_te, rlf) |
capacity additions | x | |||
vm_demSe (ttot, all_regi, all_enty, all_enty, all_te) |
se demand. | \(TWa\) | x | x | x |
vm_demSeOth (ttot, all_regi, all_enty, all_te) |
other sety demand from certain technologies, have to calculated in additional equations | \(TWa\) | x | ||
vm_flexAdj (tall, all_regi, all_te) |
flexibility adjustment used for flexibility subsidy (tax) to emulate price changes of technologies which see lower-than-average (higher-than-average) elec. prices | \(trUSD/TWa\) | x | x | |
vm_fuExtr (ttot, all_regi, all_enty, rlf) |
fuel use | \(TWa\) | x | x | x |
vm_Mport (tall, all_regi, all_enty) |
Import of traded commodity. | x | x | x | |
vm_prodFe (ttot, all_regi, all_enty, all_enty, all_te) |
fe production. | \(TWa\) | x | x | x |
vm_prodSe (tall, all_regi, all_enty, all_enty, all_te) |
se production. | \(TWa\) | x | x | x |
vm_prodSeOth (ttot, all_regi, all_enty, all_te) |
other sety production from certain technologies, have to be calculated in additional equations | \(TWa\) | x | ||
vm_usableSe (ttot, all_regi, entySe) |
usable se before se2se and MP/XP (pe2se, +positive oc from pe2se, -storage losses). | \(TWa\) | x | x | x |
vm_usableSeTe (ttot, all_regi, entySe, all_te) |
usable se produced by one te (pe2se, +positive oc from pe2se, -storage losses). | \(TWa\) | x | x | x |
vm_Xport (tall, all_regi, all_enty) |
Export of traded commodity. | x | x | x |
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
v32_shStor(ttot,all_regi,all_te) "share of seel production from renewables that needs to be stored, range 0..1 [0,1]"
v32_storloss(ttot,all_regi,all_te) "total energy loss from storage for a given technology [TWa]"
v32_shSeEl(ttot,all_regi,all_te) "new share of electricity production in % [%]"
v32_testdemSeShare(ttot,all_regi,all_te) "test variable for tech share of SE electricity demand"
;
v32_flexPriceShare(tall,all_regi,all_te) "share of average electricity price that flexible technologies see [share: 0...1]"
v32_flexPriceShareMin(tall,all_regi,all_te) "possible minimum of share of average electricity price that flexible technologies see [share: 0...1]"
;
\[\begin{multline*} \sum_{pe2se(enty,enty2,te)} vm\_prodSe(t,regi,enty,enty2,te) + \sum_{se2se(enty,enty2,te)} vm\_prodSe(t,regi,enty,enty2,te) + \sum_{pc2te\left(enty,entySE(enty3),te,enty2\right)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) + \sum_{pc2te\left(enty4,entyFE(enty5),te,enty2\right)}\left( pm\_prodCouple(regi,enty4,enty5,te,enty2) \cdot vm\_prodFe(t,regi,enty4,enty5,te) \right) + \sum_{pc2te(enty,enty3,te,enty2)}\left( \sum_{teCCS2rlf(te,rlf)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_co2CCS(t,regi,enty,enty3,te,rlf) \right) \right) + vm\_Mport(t,regi,enty2) = \sum_{se2fe(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{se2se(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{teVRE} v32\_storloss(t,regi,teVRE) + \sum_{pe2rlf(enty3,rlf2)}\left( \left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) \cdot vm\_fuExtr(t,regi,enty3,rlf2)\right)\$\left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) gt 0\right)\right)\$\left(t.val > 2005\right) + vm\_Xport(t,regi,enty2) \end{multline*}\]
\[\begin{multline*} vm\_usableSe(t,regi,entySe) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(entyPe,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,entyPe,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,entyPe,enty3,te,entySe) \cdot vm\_prodSe(t,regi,entyPe,enty3,te) \right) - \sum_{teVRE} v32\_storloss(t,regi,teVRE) \end{multline*}\]
\[\begin{multline*} vm\_usableSeTe(t,regi,entySe,te) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(enty,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,enty,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,enty,enty3,te,entySe) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) - \sum_{teVRE\$sameas(te,teVRE)} v32\_storloss(t,regi,teVRE) \end{multline*}\]
\[\begin{multline*} \left( 0.5\$\left( cm\_VRE\_supply\_assumptions eq 1 \right) + 1\$\left( cm\_VRE\_supply\_assumptions ne 1 \right) \right) \cdot \sum_{VRE2teStor(teVRE,teStor)} v32\_storloss(t,regi,teVRE) \cdot \frac{ pm\_eta\_conv(t,regi,teStor) }{ \left(1 - pm\_eta\_conv(t,regi,teStor)\right) } \leq \sum_{te2rlf(teStor,rlf)}\left( vm\_capFac(t,regi,teStor) \cdot pm\_dataren(regi,"nur",rlf,teStor) \cdot vm\_cap(t,regi,teStor,rlf) \right) \end{multline*}\]
\[\begin{multline*} vm\_cap(t,regi,"elh2","1") \geq \sum_{te\$testor(te)}\left( p32\_storageCap(te,"elh2VREcapratio") \cdot vm\_cap(t,regi,te,"1") \right) \end{multline*}\]
\[\begin{multline*} vm\_cap(t,regi,"h2turbVRE","1") = \sum_{te\$testor(te)}\left( p32\_storageCap(te,"h2turbVREcapratio") \cdot vm\_cap(t,regi,te,"1") \right) \end{multline*}\]
\[\begin{multline*} \sum_{pe2se\left(enty,"seel",teChp(te)\right)} vm\_prodSe(t,regi,enty,"seel",te) \leq p32\_shCHP(regi,"bscu") \cdot \sum_{pe2se(enty,"seel",te)} vm\_prodSe(t,regi,enty,"seel",te) \end{multline*}\]
q32_limitCapTeGrid(t,regi)$( t.val ge 2015 ) ..
vm_cap(t,regi,"gridwind",'1')
/ p32_grid_factor(regi)
=g=
vm_prodSe(t,regi,"pesol","seel","spv")
+ vm_prodSe(t,regi,"pesol","seel","csp")
+ 1.5 * vm_prodSe(t,regi,"pewin","seel","wind")
$IFTHEN.WindOff %cm_wind_offshore% == "1"
+ 3 * vm_prodSe(t,regi,"pewin","seel","windoff")
$ENDIF.WindOff
;
\[\begin{multline*} \frac{ v32\_shSeEl(t,regi,teVRE) }{ 100 } \cdot vm\_usableSe(t,regi,"seel") = vm\_usableSeTe(t,regi,"seel",teVRE) \end{multline*}\]
\[\begin{multline*} v32\_shStor(t,regi,teVRE) \geq p32\_factorStorage(regi,teVRE) \cdot 100 \cdot \left( \left(1.e-10 +\frac{ \left(v32\_shSeEl(t,regi,teVRE)+\frac{ \sum_{VRE2teVRElinked(teVRE,teVRE2)} v32\_shSeEl(t,regi,teVRE2) }{s32\_storlink}\right)}{100 }\right) ^{ p32\_storexp(regi,teVRE) }- \left(1.e-10 ^{ p32\_storexp(regi,teVRE) }\right) - 0.07 \right) \end{multline*}\]
\[\begin{multline*} v32\_storloss(t,regi,teVRE) = \frac{ v32\_shStor(t,regi,teVRE) }{ 93 } \cdot \sum_{VRE2teStor(teVRE,teStor)}\left(\frac{ \left(1 - pm\_eta\_conv(t,regi,teStor) \right) }{ pm\_eta\_conv(t,regi,teStor) }\right) \cdot vm\_usableSeTe(t,regi,"seel",teVRE) \end{multline*}\]
\[\begin{multline*} vm\_usableSe(t,regi,"seel") \leq \sum_{pe2se(enty,"seel",te)\$\left(NOT teVRE(te)\right)}\left( pm\_data(regi,"flexibility",te) \cdot vm\_prodSe(t,regi,enty,"seel",te) \right) + \sum_{se2se(enty,"seel",te)\$\left(NOT teVRE(te)\right)}\left( pm\_data(regi,"flexibility",te) \cdot vm\_prodSe(t,regi,enty,"seel",te) \right) + \sum_{pe2se(enty,"seel",teVRE)}\left( pm\_data(regi,"flexibility",teVRE) \cdot \left(vm\_prodSe(t,regi,enty,"seel",teVRE)-v32\_storloss(t,regi,teVRE)\right) \right) + \sum_{pe2se(enty,"seel",teVRE)}\left( \sum_{VRE2teStor(teVRE,teStor)}\left( pm\_data(regi,"flexibility",teStor) \cdot \left(vm\_prodSe(t,regi,enty,"seel",teVRE)-v32\_storloss(t,regi,teVRE)\right) \right) \right) \end{multline*}\]
\[\begin{multline*} vm\_usableSeTe(t,regi,"seel","spv") + vm\_usableSeTe(t,regi,"seel","wind") + vm\_usableSeTe(t,regi,"seel","csp") \leq 0.2 \cdot vm\_usableSe(t,regi,"seel") \end{multline*}\]
\[\begin{multline*} v32\_flexPriceShareMin(t,regi,te) \cdot 4 \cdot vm\_capFac(t,regi,te) = p32\_PriceDurSlope(regi,te) \cdot \left(\power\left(vm\_capFac(t,regi,te) - 0.5,4\right) - 0.5^{4}\right) + 4 \cdot vm\_capFac(t,regi,te) \end{multline*}\]
\[\begin{multline*} v32\_flexPriceShare(t,regi,te) = 1 - \left(1-v32\_flexPriceShareMin(t,regi,te)\right) \cdot \frac{ \sum_{teVRE} v32\_shSeEl(t,regi,teVRE)}{100 } \end{multline*}\]
\[\begin{multline*} \sum_{en2en(enty,enty2,te)\$teFlexTax(te)}\left( vm\_demSe(t,regi,enty,enty2,te)\right) = \sum_{en2en(enty,enty2,te)\$teFlexTax(te)}\left( vm\_demSe(t,regi,enty,enty2,te) \cdot v32\_flexPriceShare(t,regi,te)\right) \end{multline*}\]
\[\begin{multline*} vm\_flexAdj(t,regi,te) = \left(1-v32\_flexPriceShare(t,regi,te)\right) \cdot pm\_SEPrice(t,regi,"seel")\$\left(cm\_flex\_tax eq 1 \& t.val ge 2025\right) \end{multline*}\]
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
Limitations There are no known limitations.
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
v32_shStor(ttot,all_regi,all_te) "share of seel production from renewables that needs to be stored, range 0..1 [0,1]"
v32_storloss(ttot,all_regi,all_te) "total energy loss from storage for a given technology [TWa]"
v32_shSeEl(ttot,all_regi,all_te) "new share of electricity production in % [%]"
v32_testdemSeShare(ttot,all_regi,all_te) "test variable for tech share of SE electricity demand"
;
v32_flexPriceShare(tall,all_regi,all_te) "share of average electricity price that flexible technologies see [share: 0...1]"
v32_flexPriceShareMin(tall,all_regi,all_te) "possible minimum of share of average electricity price that flexible technologies see [share: 0...1]"
;
\[\begin{multline*} \sum_{pe2se(enty,enty2,te)} vm\_prodSe(t,regi,enty,enty2,te) + \sum_{se2se(enty,enty2,te)} vm\_prodSe(t,regi,enty,enty2,te) + \sum_{pc2te\left(enty,entySE(enty3),te,enty2\right)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) + \sum_{pc2te\left(enty4,entyFE(enty5),te,enty2\right)}\left( pm\_prodCouple(regi,enty4,enty5,te,enty2) \cdot vm\_prodFe(t,regi,enty4,enty5,te) \right) + \sum_{pc2te(enty,enty3,te,enty2)}\left( \sum_{teCCS2rlf(te,rlf)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_co2CCS(t,regi,enty,enty3,te,rlf) \right) \right) + vm\_Mport(t,regi,enty2) = \sum_{se2fe(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{se2se(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{teVRE} v32\_storloss(t,regi,teVRE) + \sum_{pe2rlf(enty3,rlf2)}\left( \left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) \cdot vm\_fuExtr(t,regi,enty3,rlf2)\right)\$\left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) gt 0\right)\right)\$\left(t.val > 2005\right) + vm\_Xport(t,regi,enty2) \end{multline*}\]
\[\begin{multline*} vm\_usableSe(t,regi,entySe) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(entyPe,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,entyPe,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,entyPe,enty3,te,entySe) \cdot vm\_prodSe(t,regi,entyPe,enty3,te) \right) - \sum_{teVRE} v32\_storloss(t,regi,teVRE) \end{multline*}\]
\[\begin{multline*} vm\_usableSeTe(t,regi,entySe,te) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(enty,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,enty,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,enty,enty3,te,entySe) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) - \sum_{teVRE\$sameas(te,teVRE)} v32\_storloss(t,regi,teVRE) \end{multline*}\]
\[\begin{multline*} \left( 0.5\$\left( cm\_VRE\_supply\_assumptions eq 1 \right) + 1\$\left( cm\_VRE\_supply\_assumptions ne 1 \right) \right) \cdot \sum_{VRE2teStor(teVRE,teStor)} v32\_storloss(t,regi,teVRE) \cdot \frac{ pm\_eta\_conv(t,regi,teStor) }{ \left(1 - pm\_eta\_conv(t,regi,teStor)\right) } \leq \sum_{te2rlf(teStor,rlf)}\left( vm\_capFac(t,regi,teStor) \cdot pm\_dataren(regi,"nur",rlf,teStor) \cdot vm\_cap(t,regi,teStor,rlf) \right) \end{multline*}\]
\[\begin{multline*} vm\_cap(t,regi,"elh2","1") \geq \sum_{te\$testor(te)}\left( p32\_storageCap(te,"elh2VREcapratio") \cdot vm\_cap(t,regi,te,"1") \right) \end{multline*}\]
\[\begin{multline*} vm\_cap(t,regi,"h2turbVRE","1") = \sum_{te\$testor(te)}\left( p32\_storageCap(te,"h2turbVREcapratio") \cdot vm\_cap(t,regi,te,"1") \right) \end{multline*}\]
\[\begin{multline*} \sum_{pe2se\left(enty,"seel",teChp(te)\right)} vm\_prodSe(t,regi,enty,"seel",te) \leq p32\_shCHP(regi,"bscu") \cdot \sum_{pe2se(enty,"seel",te)} vm\_prodSe(t,regi,enty,"seel",te) \end{multline*}\]
q32_limitCapTeGrid(t,regi)$( t.val ge 2020 ) ..
vm_cap(t,regi,"gridwind",'1')
/ p32_grid_factor(regi)
=g=
vm_prodSe(t,regi,"pesol","seel","spv")
+ vm_prodSe(t,regi,"pesol","seel","csp")
+ 1.5 * vm_prodSe(t,regi,"pewin","seel","wind")
$IFTHEN.WindOff %cm_wind_offshore% == "1"
+ 3 * vm_prodSe(t,regi,"pewin","seel","windoff")
$ENDIF.WindOff
;
\[\begin{multline*} \frac{ v32\_shSeEl(t,regi,teVRE) }{ 100 } \cdot vm\_usableSe(t,regi,"seel") = vm\_usableSeTe(t,regi,"seel",teVRE) \end{multline*}\]
\[\begin{multline*} v32\_shStor(t,regi,teVRE) \geq p32\_factorStorage(regi,teVRE) \cdot 100 \cdot \left( \left(1.e-10 +\frac{ \left(v32\_shSeEl(t,regi,teVRE)+\frac{ \sum_{VRE2teVRElinked(teVRE,teVRE2)} v32\_shSeEl(t,regi,teVRE2) }{s32\_storlink}\right)}{100 }\right) ^{ p32\_storexp(regi,teVRE) }- \left(1.e-10 ^{ p32\_storexp(regi,teVRE) }\right) - 0.07 \right) \end{multline*}\]
\[\begin{multline*} v32\_storloss(t,regi,teVRE) = \frac{ v32\_shStor(t,regi,teVRE) }{ 93 } \cdot \sum_{VRE2teStor(teVRE,teStor)}\left(\frac{ \left(1 - pm\_eta\_conv(t,regi,teStor) \right) }{ pm\_eta\_conv(t,regi,teStor) }\right) \cdot vm\_usableSeTe(t,regi,"seel",teVRE) \end{multline*}\]
\[\begin{multline*} vm\_usableSe(t,regi,"seel") \leq \sum_{pe2se(enty,"seel",te)\$\left(NOT teVRE(te)\right)}\left( pm\_data(regi,"flexibility",te) \cdot vm\_prodSe(t,regi,enty,"seel",te) \right) + \sum_{se2se(enty,"seel",te)\$\left(NOT teVRE(te)\right)}\left( pm\_data(regi,"flexibility",te) \cdot vm\_prodSe(t,regi,enty,"seel",te) \right) + \sum_{pe2se(enty,"seel",teVRE)}\left( pm\_data(regi,"flexibility",teVRE) \cdot \left(vm\_prodSe(t,regi,enty,"seel",teVRE)-v32\_storloss(t,regi,teVRE)\right) \right) + \sum_{pe2se(enty,"seel",teVRE)}\left( \sum_{VRE2teStor(teVRE,teStor)}\left( pm\_data(regi,"flexibility",teStor) \cdot \left(vm\_prodSe(t,regi,enty,"seel",teVRE)-v32\_storloss(t,regi,teVRE)\right) \right) \right) \end{multline*}\]
\[\begin{multline*} vm\_usableSeTe(t,regi,"seel","spv") + vm\_usableSeTe(t,regi,"seel","wind") + vm\_usableSeTe(t,regi,"seel","csp") \leq 0.2 \cdot vm\_usableSe(t,regi,"seel") \end{multline*}\]
\[\begin{multline*} v32\_flexPriceShareMin(t,regi,te) \cdot 4 \cdot vm\_capFac(t,regi,te) = p32\_PriceDurSlope(regi,te) \cdot \left(\power\left(vm\_capFac(t,regi,te) - 0.5,4\right) - 0.5^{4}\right) + 4 \cdot vm\_capFac(t,regi,te) \end{multline*}\]
\[\begin{multline*} v32\_flexPriceShare(t,regi,te) = 1 - \left(1-v32\_flexPriceShareMin(t,regi,te)\right) \cdot \frac{ \sum_{teVRE} v32\_shSeEl(t,regi,teVRE)}{100 } \end{multline*}\]
\[\begin{multline*} \sum_{en2en(enty,enty2,te)\$teFlexTax(te)}\left( vm\_demSe(t,regi,enty,enty2,te)\right) = \sum_{en2en(enty,enty2,te)\$teFlexTax(te)}\left( vm\_demSe(t,regi,enty,enty2,te) \cdot v32\_flexPriceShare(t,regi,te)\right) \end{multline*}\]
\[\begin{multline*} vm\_flexAdj(t,regi,te) = \left(1-v32\_flexPriceShare(t,regi,te)\right) \cdot pm\_SEPrice(t,regi,"seel")\$\left(cm\_flex\_tax eq 1 \& t.val ge 2025\right) \end{multline*}\]
The IntC
realization (Integrated Costs) assumes a single
electricity market balance.
This module determines power system supply specific technology behavior, which sums up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energy types in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
In summary, the specific power technology equations found in this module reflect the points below.
Storage requirements are based on intermittent renewables share, synergies between different renewables production profiles and curtailment.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Operation reserve requirements are enforced to provide enough flexibility to the power system frequency regulation.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
Limitations There are no known limitations.
The RLDC
realization (Residual Load Duration Curve)
distinguish different operation electricity supply decisions under four
distinct load bands, plus additional peak capacity requirements.
This module determine power system supply specific technology behavior, which summs up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energies in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
The residual load duration curve is obtained after discounting intermittent renewables generation (solar and wind) from the total demand.
An exogenous unit commitment model (DIMES) is used to estimate a third degree fitting curve for each load band representing the intermittent renewables generation contribution at different renewable penetration shares in the system.
Curtailament is defined using the same process - a per load band third degree fitting curve that determines the curtailment based on the renewables share.
Dispatchable power generation technologies have their capacity factor endogenously determined by the use in the distinct load bands.
Short term storage is dependable of wind and solar penetration shares and estimated exogenously to a third degree fitting curve.
A reserve margin capacity is required to be provided by dispatchable technologies only. The reserve margin size is determined by the peak capacity that is also estimated exogenously for different levels of renewables penetration in the system.
CSP co-firing with H2 or other gases is included. Self-correlation and PV correlation inside each load bands are considered.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
Hydropower load band flexibility is limited due to run-of-river power plants and water use regulation constraints.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
The RLDC
realization (Residual Load Duration Curve)
distinguish different operation electricity supply decisions under four
distinct load bands, plus additional peak capacity requirements.
This module determine power system supply specific technology behavior, which summs up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energies in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
The residual load duration curve is obtained after discounting intermittent renewables generation (solar and wind) from the total demand.
An exogenous unit commitment model (DIMES) is used to estimate a third degree fitting curve for each load band representing the intermittent renewables generation contribution at different renewable penetration shares in the system.
Curtailament is defined using the same process - a per load band third degree fitting curve that determines the curtailment based on the renewables share.
Dispatchable power generation technologies have their capacity factor endogenously determined by the use in the distinct load bands.
Short term storage is dependable of wind and solar penetration shares and estimated exogenously to a third degree fitting curve.
A reserve margin capacity is required to be provided by dispatchable technologies only. The reserve margin size is determined by the peak capacity that is also estimated exogenously for different levels of renewables penetration in the system.
CSP co-firing with H2 or other gases is included. Self-correlation and PV correlation inside each load bands are considered.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
Hydropower load band flexibility is limited due to run-of-river power plants and water use regulation constraints.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
\[\begin{multline*} v32\_scaleCap(t,regi) \cdot p32\_capFacDem(regi) + \sum_{pc2te\left(enty,entySE(enty3),te,enty2\right)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) + \sum_{pc2te\left(enty4,entyFE(enty5),te,enty2\right)}\left( pm\_prodCouple(regi,enty4,enty5,te,enty2) \cdot vm\_prodFe(t,regi,enty4,enty5,te) \right) + \sum_{pc2te(enty,enty3,te,enty2)}\left( \sum_{teCCS2rlf(te,rlf)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_co2CCS(t,regi,enty,enty3,te,rlf) \right) \right) + vm\_Mport(t,regi,enty2) = \sum_{se2fe(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{se2se(enty2,enty3,te)} vm\_demSe(t,regi,enty2,enty3,te) + \sum_{pe2rlf(enty3,rlf2)}\left( \left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) \cdot vm\_fuExtr(t,regi,enty3,rlf2)\right)\$\left(pm\_fuExtrOwnCons\left(regi, enty2, enty3\right) gt 0\right)\right)\$\left(t.val > 2005\right) + vm\_Xport(t,regi,enty2) \end{multline*}\]
\[\begin{multline*} vm\_usableSe(t,regi,entySe) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(entyPe,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,entyPe,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,entyPe,enty3,te,entySe) \cdot vm\_prodSe(t,regi,entyPe,enty3,te) \right) \end{multline*}\]
\[\begin{multline*} vm\_usableSeTe(t,regi,entySe,te) = \sum_{pe2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{se2se(enty,entySe,te)} vm\_prodSe(t,regi,enty,entySe,te) + \sum_{pc2te\left(enty,entySe(enty3),te,entySe\right)\$\left(pm\_prodCouple(regi,enty,enty3,te,entySe) gt 0\right)}\left( pm\_prodCouple(regi,enty,enty3,te,entySe) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) \end{multline*}\]
\[\begin{multline*} v32\_shTh(t,regi,teVRE) = \frac{ \sum_{pe2se(entyPe,"seel",teVRE)} vm\_prodSe(t,regi,entyPe,"seel",teVRE) }{ \left( v32\_scaleCap(t,regi) \cdot p32\_capFacDem(regi) + \sum_{pc2te\left(enty,entySE(enty3),te,enty2\right)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_prodSe(t,regi,enty,enty3,te) \right) + \sum_{pc2te\left(enty4,entyFE(enty5),te,enty2\right)}\left( pm\_prodCouple(regi,enty4,enty5,te,enty2) \cdot vm\_prodFe(t,regi,enty4,enty5,te) \right) + \sum_{pc2te(enty,enty3,te,enty2)}\left( \sum_{teCCS2rlf(te,rlf)}\left( pm\_prodCouple(regi,enty,enty3,te,enty2) \cdot vm\_co2CCS(t,regi,enty,enty3,te,rlf) \right) \right) \right) } \end{multline*}\]
\[\begin{multline*} \sum_{tese2rlf(te,rlf)} vm\_cap(t,regi,te,rlf) = v32\_scaleCap(t,regi) \cdot \left( \sum\left(LoB, v32\_capLoB(t,regi,te,LoB) \right) + v32\_capER(t,regi,te) \right) \end{multline*}\]
\[\begin{multline*} v32\_curt(t,regi) = \sum_{pe2se(entyPe,"seel",teVRE)} vm\_prodSe(t,regi,entyPe,"seel",teVRE) - v32\_scaleCap(t,regi) \cdot \left( p32\_capFacDem(regi) - \sum_{LoB}\left( p32\_capFacLoB(LoB) \cdot v32\_LoBheight(t,regi,LoB) \right) \right) + v32\_overProdCF(t,regi,"csp") \cdot vm\_cap(t,regi,"csp","1") \end{multline*}\]
\[\begin{multline*} v32\_curtFit(t,regi) = p32\_curtOn(regi) \cdot \left( p32\_RLDCcoeff(regi,"p00","curtShVRE") + p32\_RLDCcoeff(regi,"p10","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") + p32\_RLDCcoeff(regi,"p01","curtShVRE") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p20","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 }+ p32\_RLDCcoeff(regi,"p11","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p02","curtShVRE") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p30","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 3 }+ p32\_RLDCcoeff(regi,"p21","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 } \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p12","curtShVRE") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p03","curtShVRE") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 3 }\right) \end{multline*}\]
q32_curtFitwCSP(t,regi)..
v32_curt(t,regi)
=e=
( v32_curtFit(t,regi) + 0.02 ) * sum(pe2se(entyPe,"seel",teVRE), vm_prodSe(t,regi,entyPe,"seel",teVRE) )
+ v32_overProdCF(t,regi,"csp") * vm_cap(t,regi,"csp","1")
+ v32_CurtModelminusFit(t,regi) * sum(pe2se(entyPe,"seel",teVRE), vm_prodSe(t,regi,entyPe,"seel",teVRE) )
$if %cm_Full_Integration% == "on" + v32_FullIntegrationSlack(t,regi)
;
\[\begin{multline*} v32\_LoBheightCumExact(t,regi,LoB) = p32\_RLDCcoeff(regi,"p00",LoB) + p32\_RLDCcoeff(regi,"p10",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") + p32\_RLDCcoeff(regi,"p01",LoB) \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p20",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 }+ p32\_RLDCcoeff(regi,"p11",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p02",LoB) \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p30",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 3 }+ p32\_RLDCcoeff(regi,"p21",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 } \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p12",LoB) \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p03",LoB) \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 3 } \end{multline*}\]
\[\begin{multline*} v32\_LoBheightCum(t,regi,LoB) \geq v32\_LoBheightCumExact(t,regi,LoB) \end{multline*}\]
\[\begin{multline*} v32\_LoBheight(t,regi,LoB) \geq \left( v32\_LoBheightCum(t,regi,LoB) - v32\_LoBheightCum(t,regi,LoB+1)\$\left(LoB.val < card(LoB)\right) \right) \cdot \left( 1\$\left(LoB.val < card(LoB)\right) + \left(\frac{ 1 }{ p32\_capFacLoB(LoB) }\right)\$\left(LoB.val = card(LoB)\right) \right) \end{multline*}\]
\[\begin{multline*} \sum_{teRLDCDisp} v32\_capLoB(t,regi,teRLDCDisp,LoB) = v32\_LoBheight(t,regi,LoB) \end{multline*}\]
\[\begin{multline*} vm\_capFac(t,regi,te) = \frac{ \left( \sum_{LoB}\left( \left( p32\_capFacLoB(LoB)\$\left( \left(LoB.val <> 4\right) OR NOT sameas(te,"csp") \right) + \left(\frac{4}{3 } \cdot p32\_avCapFac(t,regi,"csp")\right)\$\left( \left(LoB.val eq 4\right) \& sameas(te,"csp") \right) \right) \cdot v32\_capLoB(t,regi,te,LoB) \right) + v32\_capER(t,regi,te) \cdot 0.01 \right) }{ \left(\sum_{LoB} v32\_capLoB(t,regi,te,LoB) + v32\_capER(t,regi,te) + 1e-9\right) } \end{multline*}\]
\[\begin{multline*} \frac{ \sum_{teRe2rlfDetail(te,rlf)}\left( pm\_dataren(regi,"nur",rlf,te) \cdot vm\_capDistr(t,regi,te,rlf) \right) }{ \left( vm\_cap(t,regi,te,"1") + 1e-10 \right) }+ 3e-5 \geq vm\_capFac(t,regi,te) + v32\_overProdCF(t,regi,te) \end{multline*}\]
\[\begin{multline*} vm\_cap(t,regi,"storspv","1") \geq v32\_scaleCap(t,regi) \cdot \left( p32\_RLDCcoeff(regi,"p00","STScost") + p32\_RLDCcoeff(regi,"p10","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") + p32\_RLDCcoeff(regi,"p01","STScost") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p20","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 }+ p32\_RLDCcoeff(regi,"p11","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p02","STScost") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p30","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 3 }+ p32\_RLDCcoeff(regi,"p21","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 } \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p12","STScost") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p03","STScost") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 3 }\right) \end{multline*}\]
\[\begin{multline*} v32\_peakCap(t,regi) = p32\_RLDCcoeff(regi,"p00","peak") + p32\_RLDCcoeff(regi,"p10","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") + p32\_RLDCcoeff(regi,"p01","peak") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p20","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 }+ p32\_RLDCcoeff(regi,"p11","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p02","peak") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p30","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 3 }+ p32\_RLDCcoeff(regi,"p21","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") ^{ 2 } \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) + p32\_RLDCcoeff(regi,"p12","peak") \cdot v32\_shTh(t,regi,"wind")\$teVRE("wind") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 2 }+ p32\_RLDCcoeff(regi,"p03","peak") \cdot \left( v32\_shTh(t,regi,"spv")\$teVRE("spv") + v32\_shTh(t,regi,"csp")\$teVRE("csp") \right) ^{ 3 } \end{multline*}\]
\[\begin{multline*} \sum_{teRLDCDisp(te)\$\left(NOT sameas(te,"hydro")\right)}\left( \sum_{tese2rlf(te,rlf)} vm\_cap(t,regi,te,rlf) \right) + 0.8 \cdot vm\_cap(t,regi,"hydro","1") \geq v32\_scaleCap(t,regi) \cdot \left( v32\_peakCap(t,regi) + p32\_ResMarg(t,regi) \right) \end{multline*}\]
q32_H2cofiring(t,regi)$(t.val > 2010)..
vm_demSeOth(t,regi,"seh2","csp")
+ vm_demSeOth(t,regi,"segabio","csp")
+ vm_demSeOth(t,regi,"segafos","csp")
$if %cm_Full_Integration% == "on" + 1e6
=g=
v32_H2cof_PVsh(t,regi)
+ v32_H2cof_Lob4(t,regi)
+ v32_H2cof_Lob3(t,regi)
+ v32_H2cof_CSPsh(t,regi)
;
\[\begin{multline*} v32\_H2cof\_Lob3(t,regi) \geq \frac{ 1}{0.4 } \cdot v32\_scaleCap(t,regi) \cdot v32\_capLoB(t,regi,"csp","3") \cdot \left( p32\_capFacLoB("3") - p32\_avCapFac(t,regi,"csp") \right) \end{multline*}\]
\[\begin{multline*} v32\_H2cof\_Lob4(t,regi) \geq \frac{ 1}{0.4 } \cdot v32\_scaleCap(t,regi) \cdot v32\_capLoB(t,regi,"csp","4") \cdot \left( p32\_capFacLoB("4") -\frac{ 4}{3 } \cdot p32\_avCapFac(t,regi,"csp") \right) \end{multline*}\]
\[\begin{multline*} v32\_H2cof\_PVsh(t,regi) = \frac{ 1}{0.4 } \cdot v32\_scaleCap(t,regi) \cdot 0.5 \cdot vm\_cap(t,regi,"csp","1") \cdot \left(0.65 - p32\_avCapFac(t,regi,"csp") \right) \cdot v32\_shTh(t,regi,"spv") \end{multline*}\]
\[\begin{multline*} v32\_H2cof\_CSPsh(t,regi) = \frac{ 1}{0.4 } \cdot v32\_scaleCap(t,regi) \cdot vm\_cap(t,regi,"csp","1") \cdot \left(0.65 - p32\_avCapFac(t,regi,"csp") \right) \cdot v32\_shTh(t,regi,"csp") \end{multline*}\]
\[\begin{multline*} \frac{ vm\_cap(t,regi,"h2curt","1") }{ v32\_scaleCap(t,regi) } \leq v32\_sqrtCurt(t,regi) \end{multline*}\]
\[\begin{multline*} pm\_eta\_conv(t,regi,"h2curt") \cdot vm\_cap(t,regi,"h2curt","1") \cdot \frac{ 2}{3 } \cdot v32\_sqrtCurt(t,regi) \geq vm\_prodSeOth(t,regi,"seh2","h2curt") \end{multline*}\]
\[\begin{multline*} v32\_sqrtCurt(t,regi) = sqrt\left(\frac{ 2}{3 } \cdot \left(\frac{\frac{ v32\_curt(t,regi) }{ v32\_scaleCap(t,regi) }}{ p32\_capFacDem(regi) }+ 1e-6 \right) \right) \end{multline*}\]
\[\begin{multline*} p32\_capFacLoB("4") \cdot v32\_capLoB(t,regi,"hydro","4") \geq 0.2 \cdot \sum_{LoB}\left( p32\_capFacLoB(LoB) \cdot v32\_capLoB(t,regi,"hydro",LoB) \right) \end{multline*}\]
\[\begin{multline*} \sum_{pe2se\left(enty,"seel",teChp(te)\right)} vm\_prodSe(t,regi,enty,"seel",te) \leq p32\_shCHP(regi,"bscu") \cdot \sum_{pe2se(enty,"seel",te)} vm\_prodSe(t,regi,enty,"seel",te) \end{multline*}\]
q32_limitCapTeGrid(t,regi)$( t.val ge 2015 ) ..
vm_cap(t,regi,"gridwind",'1')
/ p32_grid_factor(regi)
=g=
vm_prodSe(t,regi,"pesol","seel","spv")
+ vm_prodSe(t,regi,"pesol","seel","csp")
+ 1.5 * vm_prodSe(t,regi,"pewin","seel","wind")
$IFTHEN.WindOff %cm_wind_offshore% == "1"
+ 1.5 * vm_prodSe(t,regi,"pewin","seel","windoff")
$ENDIF.WindOff
;
\[\begin{multline*} vm\_usableSeTe(t,regi,"seel","spv") + vm\_usableSeTe(t,regi,"seel","wind") + vm\_usableSeTe(t,regi,"seel","csp") \leq 0.2 \cdot vm\_usableSe(t,regi,"seel") \end{multline*}\]
The RLDC
realization (Residual Load Duration Curve)
distinguish different operation electricity supply decisions under four
distinct load bands, plus additional peak capacity requirements.
This module determine power system supply specific technology behavior, which summs up to the general core capacity equations to define the power sector operation and investment decisions.
Contrary to other secondary energies in REMIND, this requires to move the electricity secondary energy balance (supply = demand) from the core to the module code.
The residual load duration curve is obtained after discounting intermittent renewables generation (solar and wind) from the total demand.
An exogenous unit commitment model (DIMES) is used to estimate a third degree fitting curve for each load band representing the intermittent renewables generation contribution at different renewable penetration shares in the system.
Curtailament is defined using the same process - a per load band third degree fitting curve that determines the curtailment based on the renewables share.
Dispatchable power generation technologies have their capacity factor endogenously determined by the use in the distinct load bands.
Short term storage is dependable of wind and solar penetration shares and estimated exogenously to a third degree fitting curve.
A reserve margin capacity is required to be provided by dispatchable technologies only. The reserve margin size is determined by the peak capacity that is also estimated exogenously for different levels of renewables penetration in the system.
CSP co-firing with H2 or other gases is included. Self-correlation and PV correlation inside each load bands are considered.
Hydrogen can be used to reduce renewable power curtailment and provide flexibility to the system future generation.
Hydropower load band flexibility is limited due to run-of-river power plants and water use regulation constraints.
Combined heat and power technologies flexibility is limited to technology and spatial observed data.
Additional grid capacities are calculated for high intermittent renewable capacity (solar and wind) and regional spatial differences.
Limitations There are no known limitations.
Description | Unit | A | B | C | |
---|---|---|---|---|---|
f32_factorStorage (all_regi, all_te) |
multiplicative factor that scales total curtailment and storage requirements up or down in different regions for different technologies (e.g. down for PV in regions where high solar radiation coincides with high electricity demand) | x | x | ||
f32_RLDC_Coeff_LoB (all_regi, RLDCbands, PolyCoeff) |
RLDC coefficients for combined Wind-Solar Polynomial | x | |||
f32_RLDC_Coeff_Peak (all_regi, RLDCbands, PolyCoeff) |
RLDC coefficients for combined Wind-Solar Polynomial | x | |||
f32_shCHP (all_regi, char) |
upper boundary of chp electricity generation | x | x | x | |
f32_storageCap (char, all_te) |
multiplicative factor between dummy seel<–>h2 technologies and storXXX technologies | x | x | ||
o32_dispatchDownPe2se (ttot, all_regi, all_te) |
output parameter to check by how much a pe2se te reduced its output below the normal, in % of the normal output. | x | |||
p32_avCapFac (ttot, all_regi, all_te) |
Average load factor (Nur) of the first 5 grades of a technology | x | |||
p32_capFacDem (all_regi) |
Average demand factor of a power sector | \(0,1\) | x | ||
p32_capFacLoB (LoB) |
Capacity factor of a load band | \(0,1\) | x | ||
p32_curtOn (all_regi) |
Control variable for curtailment fitted from the DIMES-Results | x | |||
p32_factorStorage (all_regi, all_te) |
multiplicative factor that scales total curtailment and storage requirements up or down in different regions for different technologies (e.g. down for PV in regions where high solar radiation coincides with high electricity demand) | x | x | ||
p32_grid_factor (all_regi) |
multiplicative factor that scales total grid requirements down in comparatively small or homogeneous regions like Japan, Europe or India | x | x | x | |
p32_gridexp (all_regi, all_te) |
exponent that determines how grid requirement per kW increases with market share of wind and solar. 1 means specific marginal costs increase linearly | x | x | ||
p32_LoBheight0 (all_regi, LoB) |
Load band heights at 0% VRE share (declared here, on the data input file, because it is only used for the p32_capFacDem definition) | \(0,1\) | x | ||
p32_PriceDurSlope (all_regi, all_te) |
slope of price duration curve used for calculation of electricity price for flexible technologies, determines how fast electricity price declines at lower capacity factors | x | x | ||
p32_ResMarg (ttot, all_regi) |
Reserve margin as markup on actual peak capacity | \(0,1\) | x | ||
p32_RLDCcoeff (all_regi, PolyCoeff, RLDCbands) |
Coefficients for the non-separable wind/solar-cross-product polynomial RLDC fit | x | |||
p32_shCHP (all_regi, char) |
upper boundary of chp electricity generation | x | x | x | |
p32_storageCap (all_te, char) |
multiplicative factor between dummy seel<–>h2 technologies and storXXX technologies | x | x | ||
p32_storexp (all_regi, all_te) |
exponent that determines how curtailment and storage requirements per kW increase with market share of wind and solar. 1 means specific marginal costs increase linearly | x | x | ||
q32_balSe (ttot, all_regi, all_enty) |
balance equation for electricity secondary energy | x | x | x | |
q32_capAdeq (ttot, all_regi) |
Make sure dispatchable capacities > peak capacity | x | |||
q32_capFac (ttot, all_regi, all_te) |
Calculate resulting capacity factor for all power technologies | x | |||
q32_capFacTER (ttot, all_regi, all_te) |
Make sure that the non-bio renewables observe the limited capacity Factor | x | |||
q32_curt (ttot, all_regi) |
Calculate total curtailment | x | |||
q32_curtCapH2 (ttot, all_regi) |
Calculate the H2 capacity from curtailed electricity | x | |||
q32_curtFit (ttot, all_regi) |
Calculate curtailment from DIMES-fit | x | |||
q32_curtFitwCSP (ttot, all_regi) |
Calculate curtailment from DIMES-fit, including 0.3 CSP | x | |||
q32_curtProdH2 (ttot, all_regi) |
Calculate the H2 production from curtailed electricity | x | |||
q32_elh2VREcapfromTestor (tall, all_regi) |
calculate capacities of dummy seel–>h2 technology from storXXX technologies | x | x | ||
q32_fillLoB (ttot, all_regi, LoB) |
Fill Load Bands with power production | x | |||
q32_flexAdj (tall, all_regi, all_te) |
calculate flexibility used in flexibility tax for technologies with electricity input | x | x | ||
q32_flexPriceBalance (tall, all_regi) |
constraint such that flexible electricity prices balanance to average electricity price | x | x | ||
q32_flexPriceShare (tall, all_regi, all_te) |
calculate share of average electricity price that flexible technologies see | x | x | ||
q32_flexPriceShareMin | calculatae miniumum share of average electricity that flexible technologies can see | x | x | ||
q32_H2cof_CSPsh (ttot, all_regi) |
Cofiring CSP due to self-correlation with CSP | x | |||
q32_H2cof_LoB3 (ttot, all_regi) |
Cofiring CSP due to use in LoB 3 | x | |||
q32_H2cof_LoB4 (ttot, all_regi) |
Cofiring CSP due to use in LoB 4 | x | |||
q32_H2cof_PVsh (ttot, all_regi) |
Cofiring CSP due to correlation with PV | x | |||
q32_H2cofiring (ttot, all_regi) |
Calculate co-firing needs | x | |||
q32_h2turbVREcapfromTestor (tall, all_regi) |
calculate capacities of dummy seel<–h2 technology from storXXX technologies | x | x | ||
q32_hydroROR (ttot, all_regi) |
Represent Run-Of-River Hydro by requiring that 20% of produced hydro electricity comes from baseload | x | |||
q32_limitCapTeChp (ttot, all_regi) |
capacitiy constraint for chp electricity generation | x | x | x | |
q32_limitCapTeGrid (ttot, all_regi) |
calculate the additional grid capacity required by VRE | x | x | x | |
q32_limitCapTeStor (ttot, all_regi, teStor) |
calculate the storage capacity required by vm_storloss | x | x | ||
q32_limitSolarWind (tall, all_regi) |
limits on fluctuating renewables, only turned on for special EMF27 scenarios | x | x | x | |
q32_LoBheightCumExact (ttot, all_regi, LoB) |
Calculate height of load bands from theoretical wind and solar share | x | |||
q32_LoBheightCumExactNEW (ttot, all_regi, LoB) |
Calculate the model-used height of load bands, which need to have some slack (=g=) compared to the exact calulcation of v32_LoBheightCumExact to keep v32_LoBheightCum > 0 | x | |||
q32_LoBheightExact (ttot, all_regi, LoB) |
Calculate height of load bands from theoretical wind and solar share | x | |||
q32_operatingReserve (ttot, all_regi) |
operating reserve for necessary flexibility | x | x | ||
q32_peakCap (ttot, all_regi) |
Calculate peak capacity after RLDC | x | |||
q32_scaleCapTe (ttot, all_regi, all_te) |
Calculate upscaled power capacitites from ‘relative to peak demand’ up to total system level | x | |||
q32_shSeEl (ttot, all_regi, all_te) |
calculate share of electricity production of a technology (v32_shSeEl) | x | x | ||
q32_shStor (ttot, all_regi, all_te) |
equation to calculate v32_shStor | x | x | ||
q32_shTheo (ttot, all_regi, all_te) |
Calculate theoretical share of wind and solar in power production | x | |||
q32_sqrtCurt (ttot, all_regi) |
Calculate helper variable: share of the year for which curtailment is higher than 1/3 of maximum curtailment | x | |||
q32_stor_pv (ttot, all_regi) |
Calculate the short term storage requirements due to renewables | x | |||
q32_storloss (ttot, all_regi, all_te) |
equation to calculate vm_storloss | x | x | ||
q32_usableSe (ttot, all_regi, all_enty) |
calculate usable se before se2se and MP/XP (without storage) | x | x | x | |
q32_usableSeTe (ttot, all_regi, entySe, all_te) |
calculate usable se produced by one technology (vm_usableSeTe) | x | x | x | |
s32_storlink | how strong is the influence of two similar renewable energies on each other’s storage requirements (1= complete, 4= rather small) | x | x | ||
v32_capER (ttot, all_regi, all_te) |
Early retired capacities | \(0,1\) | x | ||
v32_capLoB (ttot, all_regi, all_te, LoB) |
Capacity of a technology within one load band relative to peak demand | \(0,1\) | x | ||
v32_curt (ttot, all_regi) |
Curtailment of power in the RLDC formulation of the power sector | \(TWa\) | x | ||
v32_CurtModelminusFit (ttot, all_regi) |
Difference between model curtailment and fitted curtailment | x | |||
v32_flexPriceShare (tall, all_regi, all_te) |
share of average electricity price that flexible technologies see | \(share: 0...1\) | x | x | |
v32_flexPriceShareMin (tall, all_regi, all_te) |
possible minimum of share of average electricity price that flexible technologies see | \(share: 0...1\) | x | x | |
v32_H2cof_CSPsh (ttot, all_regi) |
Amount of cofiring of gas/H2 to CSP needed due to self-correlation of CSP | x | |||
v32_H2cof_Lob3 (ttot, all_regi) |
Amount of cofiring of gas/H2 to CSP needed due to use of CSP in LoB 3, which has a high CF | x | |||
v32_H2cof_Lob4 (ttot, all_regi) |
Amount of cofiring of gas/H2 to CSP needed due to use of CSP in LoB 4, which has a high CF | x | |||
v32_H2cof_PVsh (ttot, all_regi) |
Amount of cofiring of gas/H2 to CSP needed due to correlation with PV | x | |||
v32_LoBheight (ttot, all_regi, LoB) |
Height of each load band relative to Peak Demand | \(0,1\) | x | ||
v32_LoBheightCum (ttot, all_regi, LoB) |
Cumulative height of each load band relative to Peak Demand | \(0,1\) | x | ||
v32_overProdCF (ttot, all_regi, all_te) |
Overproduction CF from dispatchable renewable energies (csp and hydro) | \(0,1\) | x | ||
v32_peakCap (ttot, all_regi) |
Peak capacity after RLDC | \(0,1\) | x | ||
v32_scaleCap (ttot, all_regi) |
Scale Factor to scale the power capacitites from ‘relative to Peak Demand’ up to total system level | \(TW\) | x | ||
v32_shSeEl (ttot, all_regi, all_te) |
new share of electricity production in % | \(\%\) | x | x | |
v32_shStor (ttot, all_regi, all_te) |
share of seel production from renewables that needs to be stored, range 0..1 | \(0,1\) | x | x | |
v32_shTh (ttot, all_regi, all_te) |
Theoretical share of variable renewable energies | \(0,1\) | x | ||
v32_sqrtCurt (ttot, all_regi) |
Helper variable: share of the year for which curtailment is higher than 1/3 of maximum curtailment - this is the amount that we assume we can use for producing H2. Because we assume a 1-to-3 ratio of time to capacity for curtailment, it is also used to calculate the curtailed capacity | x | |||
v32_storloss (ttot, all_regi, all_te) |
total energy loss from storage for a given technology | \(TWa\) | x | x | |
v32_testdemSeShare (ttot, all_regi, all_te) |
test variable for tech share of SE electricity demand | x | x |
description | |
---|---|
all_enty | all types of quantities |
all_regi | all regions |
all_te | all energy technologies, including from modules |
char | characteristics of technologies |
emi2te(all_enty, all_enty, all_te, all_enty) | map emissions to technologies |
en2en(all_enty, all_enty, all_te) | all energy conversion mappings |
enty(all_enty) | all types of quantities |
entyPe(all_enty) | Primary energy types (PE) |
entySe(all_enty) | secondary energy types |
in(all_in) | All inputs and outputs of the CES function |
LoB(RLDCbands) | Electricity load band |
modules | all the available modules |
pc2te(all_enty, all_enty, all_te, all_enty) | mapping for own consumption of technologies |
pe2rlf(all_enty, rlf) | map exhaustible energy to grades for qm_fuel2pe |
pe2se(all_enty, all_enty, all_te) | map primary energy carriers to secondary |
PeakDep(RLDCbands) | RLDC elements that scale with peak (not curtailment, storage) |
PolyCoeff | Which coefficients exist for the RLDC formulation |
regi(all_regi) | all regions used in the solution process |
RLDCbands | ??? |
rlf | cost levels of fossil fuels |
run | iterator for performance test iterations |
se2fe(all_enty, all_enty, all_te) | map secondary energy to end-use energy using a technology |
se2se(all_enty, all_enty, all_te) | map secondary energy to secondary energy using a technology |
t(ttot) | modeling time, usually starting in 2005, but later for fixed delay runs |
tall | time index |
te(all_te) | energy technologies |
te2rlf(all_te, rlf) | all technologies to grades |
teBioPebiolc(all_te) | biomass technologies using pebiolc |
teCCS(all_te) | Technologies with CCS |
teCCS2rlf(all_te, rlf) | mapping for CCS technologies to grades |
teChp(all_te) | Technologies that produce seel as main output und sehe as secondary output - dynamically defined |
teFlex(all_te) | all technologies which can benefit from flexibility tax |
teFlexTax(all_te) | all technologies to which flexibility tax/subsidy applies, flexible technologies are those in teFlex, inflexible technologies those which are not in teFlex |
teNoLearn(all_te) | Technologies without learning effect |
teNotBase(all_te) | Technologies that can’t go into the last LoB (baseload) as they can’t run for 7500 FLh |
teNotLoB1(all_te) | Technologies that can’t go into the first LoB as they are difficult to cycle continuously & quickly |
teRe2rlfDetail(all_te, rlf) | mapping for se techologies to grades |
teReNoBio(all_te) | renewable technologies except for biomass |
teRLDCDisp(all_te) | RLDC Dispatchable technologies that produce seel |
teStor(all_te) | storage technologies |
teVRE(all_te) | technologies requiring storage |
ttot(tall) | time index with spin up |
VRE2teStor(all_te, teStor) | mapping to know which technology uses which storage technology |
VRE2teVRElinked(all_te, all_te) | mapping between the technologies requiring storage which use the same fluctutating source (so the shareseel counts half towards the other shareseel) |
Robert Pietzcker, Falko Ueckerdt, Renato Rodrigues
01_macro, 04_PE_FE_parameters, 05_initialCap, 24_trade, core