REMIND - REgional Model of INvestments and Development

3.0.0

created with goxygen 1.2.4

Power sector (32_power)

Description

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.

Interfaces

Interfaces to other modules

Input

module inputs (A: DTcoup | B: IntC | C: RLDC)
  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

Output

Realizations

(A) DTcoup

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.

(B) IntC

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.

(C) RLDC

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.

Definitions

Objects

module-internal objects (A: DTcoup | B: IntC | C: RLDC)
  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

Sets

sets in use
  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)

Authors

Robert Pietzcker, Falko Ueckerdt, Renato Rodrigues

See Also

01_macro, 04_PE_FE_parameters, 05_initialCap, 24_trade, core

References