Hydro pump node
Introduced type and its field
The HydroPump
node represents a hydropower unit that consumes electricity to pump water between two reservoir in a hydropower system. The HydroPump
can convert electricity to potential energy stored in the reservoirs by pumping water between reservoirs at different head levels under the assumption that the reservoirs has constant head level. The conversion from electric energy is the reversed process of the energy conversion in the HydroGenerator
and can be described by an power-discharge relationship, where discharge refer to the flow of pumped water.
Standard fields
HydroPump
nodes build on the HydroUnit
and the RefNetworkNode
nodes, but add additional fields. The standard fields are:
id
:
The fieldid
is only used for providing a name to the node. This is similar to the approach utilized inEnergyModelsBase
.cap::TimeProfile
:
The installed capacity corresponds to the nominal capacity of the node. It is the installed pumping capacity, either in form of volume water per time period or power capacity.opex_var::TimeProfile
:
The variable operational expenses are based on the capacity utilization through the variablecap_use
.opex_fixed::TimeProfile
:
The fixed operating expenses are relative to the installed capacity (through the fieldcap
) and the chosen duration of a strategic period as outlined on UtilizeTimeStruct
. It is important to note that you can only useFixedProfile
orStrategicProfile
for the fixed OPEX, but notRepresentativeProfile
orOperationalProfile
. In addition, all values have to be non-negative.data::Vector{Data}
:
An entry for providing additional data to the model.Additional constraints The
data
field can be used to add minimum, maximum, and schedule constraints on pumping using the general constraints types.
HydroGenerator
nodes do not utilize the fields input
and output
. Instead, the input and output resources are identified from the fields water_resource
and electricity_resource
described below.
Additional fields
pq_curve::AbstractPqCurve
:
Describes the relationship between consumed power (electricity) and pumped water. The input can be provided by using the subtypePqPoints
or as a single energy equivalent.
The input provided to the pq_curve
field has to be relative to the installed capacity, so that either the maximum discharge or the maximum power value given by the PqPoints
equals 1. If a single energy equivalent is provided the cap::TimeProfile
must refer to the power capacity of the HydroGenerator
node.
water_resource::Resource
:
The water resource that the node pumps between reservoirs.electricity_resource::Resource
:
The electricity resource consumed in the node.
HydroPump
nodes include the fields water_resource
and electricity_resource
field instead of the input
and output
fields of RefNetworkNode
. The conversion of the water resource is set to 1 since the amount of water in the system is constant. The conversion to electricity is described by the input provided in the pq_curve::AbstractPqCurve
field.
Mathematical description
The HydroPump
inherits its mathematical description from the HydroUnit
and NetworkNode.
Variables
Standard variables
The HydroPump
utilizes the standard variables from the NetworkNode, as described on the page Optimization variables.
- $\texttt{opex\_var}$
- $\texttt{opex\_fixed}$
- $\texttt{cap\_use}$
- $\texttt{cap\_inst}$
- $\texttt{flow\_in}$
- $\texttt{flow\_out}$
Additional variables
In addition to the standard variables, the variables presented below are defined for HydroUnit
nodes. These variabels are hence created for HydroPump
nodes.
$\texttt{discharge\_segments}[n, t, q]$: One discharge variable is defined for each segment
q
of the PQ-curve defined by the fieldpq_curve
of node $n$ in operational period $t$ with unit volume per time unit.
IfPqPoints
are provided, the number of discharge segments will be $Q$, where $Q+1$ is the length of the vectors in the fields ofPqPoints
. There is only one discharge segment if an energy equivalent is used. The $\texttt{discharge\_segments}$ variables define the utilisation of each discharge segment and sums up to the total discharge.discharge_segments Sequential allocation is not enforced by binary variables, but will occure sequentially if the problem if set up correctly. A non-convex PQ-curve for the pump may result in a non-sequential allocation.
The following variables are created if required by the additional constraints:
- $\texttt{gen\_penalty\_up}[n, t, p]$: Variable for penalizing violation of the maximum constraint of the resource
p
in direction up inHydroGenerator
node $n$ in operational period $t$ with unit volume per time unit. Up implies in this case that the reservoir volume is larger than planned. - $\texttt{gen\_penalty\_down}[n, t, p]$: Variable for penalizing violation of the maximum constraint of the resource
p
in direction down inHydroGenerator
node $n$ in operational period $t$ with unit volume per time unit. Down implies in this case that the reservoir volume is smaller than planned.
Constraints
In the following sections the vector of HydroPump
nodes are omitted from the descriptions. Instead, it is implicitly assumed that the constraints are valid $\forall n ∈ N$ for all HydroPump
types if not stated differently. In addition, all constraints are valid $\forall t \in T$ (that is in all operational periods) or $\forall t_{inv} \in T^{Inv}$ (that is in all strategic periods).
Standard constraints
HydroPump
nodes utilize in general the standard constraints described in Constraint functions for NetworkNode
. The majority of these constraints are hence ommitted in the following description.
The new methods for the functions constraints_capacity
and constraints_opex_var
are explained in the section for HydroGenerator
.
Furthermore, we dispatche on the flow constraints for HydroPump
nodes. The mathematical description is the same as for the HydroGenerator
nodes, except that electricity flows into the node (is consumed) rather than out of the node:
constraints_flow_in
:
It is assumed that the amount of water is constant forHydroGenerator
nodes, and the flow of water into the node therefore equals the flow out.\[ \texttt{flow\_in}[n, t, water\_resource(n)] = \texttt{flow\_out}[n, t, water\_resource(n)]\]
The flow of electricity into the node is given by the:
\[\texttt{flow\_in}[n, t, electricity\_resource(n)] = \texttt{cap\_use}[n, t]\]
constraints_flow_out
:
The flow out of water is constrained to total discharge given by the sum of the $\texttt{discharge\_segments[n,t,q]}$ variables, where Q is the number of segments in the PQ-curve (i.e., Q+1 PQ-points):\[\texttt{flow\_out}[n, t, water\_resource(n)] = \sum_{q=1}^{Q}\texttt{discharge\_segments[n,t,q]}\]
In addition to being constrained by the installed capacity, the $\texttt{cap\_use}$ variables are constrained by the discharge of water multiplied with the conversion rate given by $\texttt{E[q]}$ which is the slope of each segment in the PQ-curve:
\[\texttt{cap\_use}[n, t] = \sum_{q=1}^{Q}(\texttt{discharge\_segments}[n,t,q] \times \texttt{E[q]})\]
The discharge segments are constrained by the
discharge_levels
of thePqPoints
:\[\begin{aligned} \texttt{discharge\_segment}[n, t, q] \leq & capacity(n, t) \times (discharge\_levels[q+1] \\ & - discharge\_levels[q]) \qquad \forall q \in [1,Q] \\ \end{aligned}\]
The
capacity(n, t)
returns the installed capacity and is used to scale the relative values of thePqPoints
to absolute values.
If a single energy eqivalent is used, two points (zero and max) are created to describe a single discharge segment with the slope of the energy equivalent and the capacity of node n
. In this case, the installed capacity of the node, provided in the pq_curve::AbstractPqCurve field, has to refer to the power capacity.
Furthermore, the dispatch on constraints_flow_in
includes additional pumping capacity constraints. The constraints are optional and only added to the problem if given as input in the Data
field of the nodes. Soft constraints, i.e., constraints with a penalty, are used if the constraints have non-infinite penalty values. For HydroPump
nodes, the constraints can be defined for the electricity_resource
and water_resource
, limiting the flow into of the node.
Minimum constraints for pumping:
\[\begin{aligned} \texttt{flow\_out}[n, t, p] \geq & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{min}\\ \texttt{flow\_out}[n, t, p] + \& \texttt{gen\_penalty\_up}[n, t, p] \geq \\ & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{min} \\ \end{aligned}\]
Maximum constraints for pumping:
\[\begin{aligned} \texttt{flow\_out}[n, t, p] \leq & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{max}\\ \texttt{flow\_out}[n, t, p] - & \texttt{gen\_penalty\_down}[n, t, p] \leq \\ & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{max} \\ \end{aligned}\]
Scheduling constraints for v:
\[\begin{aligned} \texttt{flow\_out}[n, t, p] = & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{sch}\\ \texttt{flow\_out}[n, t, p] + & \texttt{gen\_penalty\_up}[n, t, p] - \texttt{gen\_penalty\_down}[n, t] = \\ & capacity(n, t, p) \times value(c, t) \qquad & \forall c \in C^{sch} \\ \end{aligned}\]
where $value(c,t)$ returns the relative limit of constraint c
and $capacity(n,t, p)$ returns the installed capacity of node n
for resource p
. The sets $C^{min}$,$C^{max}$, and $C^{sch}$ contain additional minimum, maximum and scheduling constraints, repectively.