Commit 988438fb authored by Niina Helistö's avatar Niina Helistö
Browse files

Adding an equation for limiting reserve provision of units with investments

parent 7cf211ff
......@@ -27,6 +27,7 @@ Model building /
// Unit Operation
q_maxDownward
q_maxUpward
* q_reserveProvision
* q_startup
* q_startuptype
* q_onlineLimit
......
......@@ -27,6 +27,7 @@ Model invest /
// Unit Operation
q_maxDownward
q_maxUpward
q_reserveProvision
q_startshut
q_startuptype
q_onlineOnStartUp
......
......@@ -27,6 +27,7 @@ Model schedule /
// Unit Operation
q_maxDownward
q_maxUpward
* q_reserveProvision
q_startshut
q_startuptype
q_onlineLimit
......
......@@ -54,6 +54,7 @@ equations
// Unit Operation
q_maxDownward(mType, grid, node, unit, f, t) "Downward commitments will not undercut power plant minimum load constraints or maximum elec. consumption"
q_maxUpward(mType, grid, node, unit, f, t) "Upward commitments will not exceed maximum available capacity or consumed power"
q_reserveProvision(restype, up_down, node, unit, f, t) "Reserve provision limited for units"
q_startshut(mType, unit, f, t) "Online capacity now minus online capacity in the previous interval is equal to started up minus shut down capacity"
q_startuptype(mType, starttype, unit, f, t) "Startup type depends on the time the unit has been non-operational"
q_onlineOnStartUp(unit, f, t) "Unit must be online after starting up"
......
......@@ -359,6 +359,33 @@ q_maxUpward(m, gnuft(grid, node, unit, f, t))${ [ ord(t) < tSolveFirst + smax(
]${uft_shutdownTrajectory(unit, f, t)}
;
* --- Reserve Provision of Units with Investments -----------------------------
q_reserveProvision(nuRescapable(restypeDirectionNode(restype, up_down, node), unit), ft(f, t))${ ord(t) <= tSolveFirst + p_nReserves(node, restype, 'reserve_length')
and nuft(node, unit, f, t)
and (unit_investLP(unit) or unit_investMIP(unit))
and not ft_reservesFixed(node, restype, f+df_reserves(node, restype, f, t), t)
} ..
+ v_reserve(restype, up_down, node, unit, f+df_reserves(node, restype, f, t), t)
=L=
+ p_nuReserves(node, unit, restype, up_down)
* [
+ sum(grid, p_gnu(grid, node, unit, 'maxGen') + p_gnu(grid, node, unit, 'maxCons') ) // Reserve sets and variables are currently lacking the grid dimension...
+ sum(t_invest(t_)${ ord(t_)<=ord(t) },
+ v_invest_LP(unit, t_)${unit_investLP(unit)}
* sum(grid, p_gnu(grid, node, unit, 'unitSizeTot')) // Reserve sets and variables are currently lacking the grid dimension...
+ v_invest_MIP(unit, t_)${unit_investMIP(unit)}
* sum(grid, p_gnu(grid, node, unit, 'unitSizeTot')) // Reserve sets and variables are currently lacking the grid dimension...
) // END sum(t_)
]
* [
+ 1${ft_realized(f+df_reserves(node, restype, f, t), t)} // reserveReliability limits the reliability of reserves locked ahead of time.
+ p_nuReserves(node, unit, restype, 'reserveReliability')${not ft_realized(f+df_reserves(node, restype, f, t), t)}
] // How to consider reserveReliability in the case of investments when we typically only have "realized" time steps?
;
* --- Unit Startup and Shutdown -----------------------------------------------
q_startshut(m, uft_online(unit, f, t)) ..
......
......@@ -65,6 +65,7 @@ $iftheni.debug NOT '%debug%' == 'yes'
// Unit Operation
Option clear = q_maxDownward;
Option clear = q_maxUpward;
Option clear = q_reserveProvision;
Option clear = q_startshut;
Option clear = q_startuptype;
Option clear = q_onlineLimit;
......@@ -406,7 +407,7 @@ ft_reservesFixed(node, restype, f_solve(f), t_active(t))
and p_nReserves(node, restype, 'update_frequency')
and p_nReserves(node, restype, 'gate_closure')
and ord(t) <= tSolveFirst + p_nReserves(node, restype, 'gate_closure') + p_nReserves(node, restype, 'update_frequency') - mod(tSolveFirst - 1 + p_nReserves(node, restype, 'gate_closure') - mSettings(mSolve, 't_jump') + p_nReserves(node, restype, 'update_frequency') - p_nReserves(node, restype, 'update_offset'), p_nReserves(node, restype, 'update_frequency')) - mSettings(mSolve, 't_jump')
and not [ restypeReleasedForRealization(restype) // Free desired reserves for the to-be-realized time steps
and not [ restypeReleasedForRealization(restype) // Free desired reserves for the to-be-realized time steps
and ft_realized(f, t)
]
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment