Operating Plan
TalsimNG includes a storage operation model, i.e.it offers the possibility to simulate storage regulation and distribution through defined operating rules. Existing or proposed operating rules need to be converted into a TalsimNG compatible form.
The model equivalent to conducting measurements within the river basin is the retrieval of socalled system states of the system elements. Further, these system states are processed and connected to mathematical and logical operators (also consecutively) into control clusters. The variety of options and possible connections allows for the representation of almost any desired operating rule. The system state / the control cluster representing the operating rule is linked to the system element to which the rule should be applied to. In the case of a storage, physical boundaries for releases as well as internal dependencies can be implemented. The result is the control logic of the river basin model.
System State
To determine how to represent a system state / system states, one should consider the following questions regarding the operation rules:
Subject  Questions about realworld operating rule  Questions about TalsimNG river basin model  Implementation in TalsimNG 

Measured variable  Which measured variables are the operating rules based on? Which variables are measured?  Which is the equivalent simulated variable, or which simulated variable could be used for reference / derivation? All simulated variables i.e. the system element's input, output, and state variables are generally accessible (e.g. discharge, storage volume, ...).  Choose a system element and a simulated variable. → Implement a system state. 
Spatial reference  Which location is the measurement made at?  Which specific system element (key) represents the measurement (with which simulated variable for the system state)?  
Temporal reference  What is the temporal reference of the measurement? Is the instantaneous value used, a balance, or a previous day's value?  Which of the available options in TalsimNG represents the temporal reference best?  Define the objective of the system state and adjust the options for value changes respectively. 
Transformation  Is the measured value changed subsequently before its inclusion in the operating rule (e.g. unit conversion, weighting function, ...)?  Which function in TalsimNG represents the transformation?  Select and implement the transformation function of the system state. 
After answering the questions, a system state can be created. Subsequently, state attributes describing the system state can be specified. The following options are available:
Sytem State Attributes
TalsimNG offers the following types of system state attributes:
A  Current value  Value is the current value without any modifications 
F  Function  Value is transformed by applying a function 
B  Balance (with target)  Value is used as a discrepancy from the target value in % 
C  Balance (without target)  Value is calculated as a balance from several timesteps 
Z  Objective function  Value is the result of an objective function 
P  Control gauge  Currently disabled 
S  Sum  Value is not a single value but is calculated as the sum of the system state 
Current Value
The option current value uses the simulated value of the current timestep without any modifications:
result = current value of the system state
Function
The option function also uses the current timestep as time reference, but it includes the possibility to transform the value by applying a function. As the values from this option and all the following options (current value is the only exception) can be transformed, the general transformation process will only be explained in the next section.
Balance
A balance can be defined as
 an average over the last n time steps (max. 1200)
 a fixed timeframe (start date to end date)
 a constant timeframe (moving average)
 the ith time step
In the case of Balance (without target), the balance itself is the initial value for the subsequent transformation.
In the case of Balance (with target) the discrepancy from the target value is used as the initial value for the transformation and is calculated as follows:
Discrepancy = ((BALANCE target value) / target value) * 100
The target value is defined as a constant possibly scaled with an annual pattern.
Sum
Value Modification
Transformation Function
The system states can be transformed additionally by applying a function (exception: current value). In the following all transformation options are listed:

Capacity curve 

Constant annual pattern 

Variable annual pattern 

Poolbased operating plan 

Timedependent function 
Capacity Curve
The simplest option and the default for any system state that is not treated as current value is the capacity curve. The option takes previously entered supporting points to create a function, which is then used for the transformation of values. The function's entry value is corresponding to the system state's type (e.g. current value (entry value) with function (type), balance (entry value) with balance without target (type), or discrepancy (entry value) with balance with target (type)). The function can be either interpreted as a step function or interpolation between the supporting points is performed.
If the user chooses not to perform a transformation, the capacity curve can be defined as a 1:1 function. It is important that the entire value range is included because otherwise yvalues smaller than the first supporting point by default use the yvalue of the first supporting point and yvalues bigger than the yvalue of the last supporting point by default use the yvalue of the last supporting point. In addition, the option to interpolate between the supporting points must be activated.
xvalue  yvalue 

10000  10000 
10000  10000 
If the user chooses to define constants for the implementation of the operating rules, it is also possible with the option capacity curve:
xvalue  yvalue 

0  20 
1  20 
Annual Pattern
With the option annual pattern, a function with one supporting point is defined for each chosen time period within one year. With a constant annual pattern, the division of the year into time periods is undertaken by month, resulting in a total of 12 supporting points. With a variable annual pattern, the division of the year into time periods is undertaken at the desired dates.
For each (temporal) supporting point, values for x and y are entered. If, before the transformation, the system state value is smaller than the xvalue, it is set to zero. If it is equal to or bigger than the xvalue, it is transformed to the yvalue. Every current date / time stamp constitutes which respective supporting point is then used for the transformation.
By default, the supporting points are kept constant within each time frame. Yet, it is also possible to linearly interpolate over time.
Poolbased Operating Plan
With the option poolbased operating plan, the storage volume during a year is divided into different zones (pools), where each pool is associated with a fixed release level. Hence, for each defined release level and for each fixed time period the specific storage volumes are entered. However, the option poolbased operating plan is not restricted to this use. Generally, any chosen xvalue (usually: storage volume) can be transformed into a yvalue (usually: storage releases) via a poolbased operating plan. To do this, the yvalues of the supporting points need to be ascending and identical for every timestep.
By default, the entered supporting points of the poolbased operating plan are interpreted similarly to a step function but in blocks. However, it is also possible to interpolate over time and / or interpolate linearly between the supporting points of x/yvalues.
Timedependent Function
The timedependent function acts similar to the poolbased operating plan, yet is more flexibly applicable: For different periods, the supporting points of the yvalues only need to correspond regarding their number but do not have to be identical in value. Furthermore, they do not necessarily have to be ascending. Hence, one picks a userdefined function with individual x and yvalues.
By default, the entered supporting points are interpreted similarly to a step function, but in blocks. However, it is also possible to interpolate over time and / or interpolate linearly between the supporting points of x/yvalues.
Control Cluster
A control cluster is the combination of system states and other control clusters using mathematical and logical operators. While a system state represents the condition of a system element, a control cluster describes the aggregation of several system states.
The following operators are available for combination of system states:
+/  Addition and subtraction 
●/÷  Multiplication and division 
<>≤≥  Comparative operators 
mn, mx  Minimum and maximum 
A control cluster can consist of up to five different system states and/or control clusters. As control clusters can continuously be linked, there is no limit to their number, and any possible combination is feasible. There are no limits regarding e.g. the combination of different values and units. It is the user's responsibility to achieve reasonable combinations.
When building new control clusters, the comprising system states/control clusters can be scaled by a factor before using the operator for combination (see Connection window(?)).
The control cluster itself, just like the system states, has a system state attribute and can be transformed further with a transformation function (see state attribute window).
Lastly, the control cluster can be limited in its value range (see connections).
Control Logic
If a rule in a control cluster/ system state is assigned in a way that it represents the desired release from a storage or it describes the division from a diversion, the control cluster/ system state is connected to the respective system element. Dependencies between various releases can be implemented either via the definition of a control cluster or using the option internal dependency from the storage element.