End valuation with EMPS (EMPS module)

Values are supplied from running EMPS. The values are aggregated water values for each price area, which needs to be deaggregated before being used by ngLTM. The water values from EMPS divide an aggregated reservoir into a number of layers representing the volume of the reservoir from empty to full. Each layer is a percentage of volume of the reservoir used.

Input data

Input data for the water value module is loaded from VVERD.SAMK files for each area. There’s two dimensions for the values, layer and snow level. Snow level is calculated by a seperate function, but the following chapter is valid for all dimension values.

Input data is N points on a curve where the X-axis denotes percentage volume of the reservoir that is filled, from 0 to 100%. With 50 layers, there should be 51 points on this curve, at 0, 2, 4, 6 … 98, 100.

Modelling

Each reservoir contributes a volume sum rule. The water value is the aggregated value for the area the reservoir is in:

\[\begin{split} \\{i \in reservoirs,\ k = timesteps-1,\ n \in \\{0, 1, ..., num\_layers - 1\\}\\}\end{split}\]

The reservoir volume is divided into a number of layers with equal percentage size of the maximum volume, depending on how many points that the system gets from input data. The value ResMax is either the physical max or the tactical max if this limit is set on the reservoir. Additionally, there might be a minimum restriction set on the reservoir.

No restrictions:

\[ \textrm{VolSize(i)} = \textrm{PhysMax(i)} \]

Max reservoir restriction:

\[ \textrm{VolSize(i)} = \textrm{PhysMax(i)} - (\textrm{PhysMax(i)} - \textrm{ResMax(i,k)}) \]

Minimum reservoir restriction:

\[ \textrm{VolSize(i)} = \textrm{PhysMax(i)} - \textrm{ResMin(i,k)} \]

Both:

\[ \textrm{VolSize(i)} = \textrm{PhysMax(i)} - \textrm{ResMin(i,k)} - (\textrm{PhysMax(i)} - \textrm{ResMax(i,k)}) \]

The layer sizes are calculated from the size of the total usable volume divided by the number of layers, in percentages:

\[ 0 \leq res\_layer(i,n) \leq \textrm{VolSize(i)} * \frac{num\_layers}{100.0} \]
\[ \textrm{VOLSUM}(i): res(i,k) = \sum_{n=0}^{layers}res\_layer(i,n) \]

The objective function contains the value of each layer, and ensures that the “lower” layers are used first.

\[ Obj^{min}: C^Tx - \sum_{i}^{reservoirs}\sum_{n=0}^{layers}\textrm{EnergyEquivalent}(i)*\textrm{WaterValue}(n)*res\_layer(i,n) \]

Important: The input data from the loader is in increasing positive value, meaning we need to invert the order and multiply by -1 to have functional values for ngLTM. The first and lowest value is reserved for use if the reservoir has a minimum volume restriction, and discarded if not. The following points will become the cost of the corresponding vol_cost variable, scaled by the global energy equivalent as explained above.

If the reservoir has a minimum volume restriction, the lowest layer value scaled by the enrgy equivalent is added to the objective cost of the res_min variable.

Important: The value itself is not interpolated between layer values.

Note: Target reservoirs do not get an end valuation.