Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Reservoir model is developed and designed as a relatively straightforward reservoir routing model, that simulates flow through a reservoir with a level-outflow release table defined. Specifically, the model is able to precisely replicate  the uncontrolled outlet reservoir behaviour of the legacy Deltares RTC-Tools 1 codebase, which is no longer developed and supported. Because the adapter model is based on Java, it can run on Windows/Linux systems.

...

Configuring a pi-version 1.8 is required for the diagnostics of the model. The model will write diagnostics to the filename that is configured in the General Adapter (the model reads it from the outputDiagnosticFile field in the run_info file). The logging will be to the level that is configured in Delft-FEWS (typically debug/info/warn/error).

idMapping
Anchor
IRM_IDmapping
IRM_IDmapping

The location/parameters used in Delft-FEWS can be transformed to model variableId locations/parameters by ID-mapping. The configuration files for ID-mapping can be of a general form, as long as the reservoir model have been set up with identical variables for the inputs/outputs. The model will look for the required variables (as configured in the IRM model file) in the parameter field of the PI timeseries. 

...

  • level or state value (at model start time)
  • inflow timeseries (complete run period)
  • outflow release timeseries (optional)   

exportRunFileActivity

...

The model results (typically consisting of level, storage, inflow and outflow release timeseries) can be imported using the importActivities. The importFile name configured will be written to the run_info file and consequently be created by the Reservoir model. Note that specific idImport configuration is required.      

...

 ((2S_(t+1))/Δt+Q_(t+1) )=(I_t+I_(t+1))+((2S_t)/Δt-Q_t )

In order to compute the outflow release Qt, a storage-outflow release function relating 2S/∆t+Q and Q is needed, this is the G(h) function. The elevation-storage-outflow release table can be computed using this function:

...

In routing the flow through time, all terms in the right hand side of the above function are known, and so the values ((2S_(t+1))/Δt+Q_(t+1) ) can be computed. The value Qt+1 can be determined from the storage outflow release function 2S/∆t+Q versus Q by linear interpolation of the tabular values. To set up the data required for the next time interval, the value K(t), ((2S_(t+1))/Δt-Q_(t+1) ) is calculated by:

...

The backward Euler reservoir routing scheme is an implicit scheme that uses the backward difference approximation for the derivative. The equation for the backward Euler reservoir routing scheme can be written as follows:

QS[t+1] = QS[t] + Δt* ( I[t+1] - O[t+1,S[t]] )

where:

QS[t+1] represents the reservoir outflow storage at the next time step (n+1).Q

S[t] is represents the reservoir outflow storage at the current time step (n).

Δt represents the time step.
I[t+1] is the inflow into the reservoir at the next time step (n+1).
In this scheme, the outflow O[t+1,S[t]] is the reservoir release at the next time step is calculated by adding the product of the time step and the difference between the inflow and evaporation at the next time step to the current outflow. (n+1), based on the storage-release relation using S[t] for the lookup input.

dynamicInterpolation

When the dynamicInterpolation element is set to true, the level/storage and level/outlet tables are dynamically (every timestep) interpolated to the precise value, using the elevationInterpolationMethod. In this case, the elevationInterval element is ignored. 

When the dynamicInterpolation element is set to false, the level/storage and level/outlet tables are precalculated (only once) using the elevationInterpolationMethod, to the specified elevationInterval.  

elevationInterpolationMethod

Linear interpolation is the only available interpolation method

elevationInterval

The elevationInterval or elevation resolution at which the configured level/storage and level/outlet tables need to be recalculated. Note that the level output at each timestep is processed to that elevationInterval. When a value needs to be determined from the table the largest entry that is still smaller than the precalculated table elements is used (the model always rounds down). The consequence is that reservoir inflows/outflows releases at a timestep that result in level/storage changes that are smaller than the interval/resolution will not be taken into account. This means that the model will underestimate the flow and water balance will not be closed.    

elevationInterpolationMethod

Linear interpolation is the only available interpolation method

elevationInterval

The elevationInterval or elevation resolution at which the configured level/storage and level/outlet tables need to be recalculated.

storageCharacteristics

strictly increasing, same number of elements

uncontrolled outlet

same number of elements

input / output files

The naming convention of the input and output timeseries files are free, the model will determine which files to read for the input based on the inputTimeSeriesFile filed in the run_info file. The following two input timeseries files are suggested:

  • importState.xml
    • level values, or
    • storage values
  • import.xml
    • Inflow
    • outflow (optional)

The startDateTime and endDateTime in the run_info file are used by the model to determine the start (startDateTime) and end (endDateTime) of the model run. The model will pick the starting (state) value for level/storage (level has precedent in case of an inconsistency), inflow, release from the inputTimeSeriesFiles at the specific .

If a starting level value is missing, the model will use the starting storage value. If both starting level/storage cannot be determined from the input files, the model will throw an error.

storageCharacteristics

The storageCharacteristic storageTable contains a storage-level lookup table that is strictly increasing. Note that this table should have the identical storage inputs as the capacityCharacteristics outletTable from the uncontrolledOutlet.

uncontrolledOutlet

The uncontrolledOutlet element contains capacityCharacteristics outletTable which relates storage-release. Note that this table should have the identical storage inputs as the storageCharacteristic storageTable.

The <input><release> element can be set to the timeseries variable that can overwrite (take precedence) the lookup value for the release. 

The <output><release> element determines where the resulting release timeseries is saved to 

input / output variables and files

In the input section, the model input variables will be configured. The model will look for the required variables in the parameter field of the PI timeseries (see idMapping). The Reservoir Model code will try to parse the configured model variables (like IIn, QOut, etc) from the parameterId of the PI timeseries, the locationId is not used.

n the output section, the model output variables will be configured. When writing the output timeseries, the locationId used in the import PI xml files will be used as the locationId in the output PI xml files. 

The naming convention of the input and output timeseries filenames are free, the model will determine which files to read for the input based on the inputTimeSeriesFile filed in the run_info file. The following two input timeseries files are suggested:

  • importState.xml
    • level values, or (HIn)
    • storage values (SIn)
  • import.xml
    • inflow (IIn)
    • release (optional) (QIn)

Note that for the suggested variableId's, the postfix In and Out are used to denote if the series are Inputs for, or Outputs from the model.

The startDateTime and endDateTime in the run_info file are used by the model to determine the start (startDateTime) and end (endDateTime) of the model run. The model will pick the starting (state) value for level/storage (level has precedent in case of an inconsistency), inflow, release from the inputTimeSeriesFiles at the specific . If a starting level value is missing, the model will use the starting storage value. If both starting level/storage cannot be determined from the input files, the model will throw an error. Inflow and release values at the starting time are not required at the first timestep. When they are not found, a value of 0 is used.

The following output timeseries file is suggested:

  • export.xml
    • inflow (IOut)
    • release (QOut)
    • storage (SOut)
    • level (HOut)

In case state functionality is configured in the run_info file (inputStateDescriptionFile is defined), the model will also write the outputs to the write location as defined in the stateLocation file (e.g. exportState.xml)

Image Addedinflow and outflow values at the starting time are not required at the first timestep. When they are not found, a value of 0 is used.

Reservoir Model specifics

...