Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • airGRiwrm airGRiwrm
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 28
    • Issues 28
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 4
    • Merge requests 4
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

La forge institutionnelle d'INRAE étant en production depuis le 10 juin 2025, nous vous recommandons d'y créer tous vos nouveaux projets.

  • IN-WOP
  • airGRiwrmairGRiwrm
  • Issues
  • #90
Closed
Open
Issue created Jul 26, 2022 by Dorchies David@david.dorchiesOwner

Integration of reservoirs as nodes in the network

Following #51 (closed) which allows to integrate a time series of a released flow in the middle of the network, the idea here is to be able to model the volume of a reservoir in a GRiwrm node with a given release time series. This release time series can be provided for the simulation (open-loop / feed-forward control) or calculated by a controller in a supervision (closed-loop / feedback control).

For the moment, the only available way to simulate a reservoir is to handle it manually through a supervisor and at least one controller. With this solution, only the management rules (release) would be handled manually.

Modelled processes

What about having a dedicated RunModel function which would model the following processes:

graph TD
    R([fa:fa-water Reservoir])
    P(fa:fa-cloud-rain Precip) -- + --> R
    U[fa:fa-bacon Qupstream] -- + --> R
    R -- - --> E(fa:fa-sun PotEvap)
    R -- Release --> D[fa:fa-bacon River downstream]

The main process to model is the mass conservation in the reservoir:

 V(t) = V(t-\Delta t) + \sum Q_{upstream}(t) - Q_{release}(t) + Q_P(t) - Q_{PE}(t)

Implementation of RunModel_Reservoir

Integration of precipitation and evaporation can be optional if necessary data are not available.

The provided InputsModel would contain Precip and PotEvap and the release would be provided in the argument Qobs of CreateInputsModel.GRiwrm like for a direct injection node.

OutputsModel would contain Qsim the release time series and Vsim the simulated volume.

V would be a state variable in the model and an initial value must be handled and can be treated like a reservoir state in a GR model (With Vini = 0 by default).

Further variables are necessary to handle this calculation:

  1. The relationship between the water area and the volume for the calculation of the volume lost by evaporation
  2. The useful capacity of the reservoir (can be the maximum volume in 1. by default)
  3. The direct run-off area for the volume gained by precipitation (can be the maximum water area in 1. by default)

The useful capacity could be a parameter of the model which could be calibrated...

In case of overflow of the reservoir, this overflow can be added to the release flow provided by the user. This overflow can also be attenuated in order to simulate the release over a spillway using a free weir equation and with some assumptions on the water height over the spillway.

Implementation in the GRiwrm network

An inline reservoir would be integrate as follow in the network:

graph LR
CHAUM_07 --> |0km| PANNEC_R
PANNEC_R --> |153km| GURGY_02
style PANNEC_R fill:#9ed6e3

For a reservoir behind a derivation, the situation is more challenging and can be done using a Diversion:

graph LR
  BAR-S_06 -->|6km| SEINE_P7
  SEINE_P7 -->|32km| SEINE_R8
  SEINE_P7 --> SEINE(SEINE)
  SEINE--> SEINE_R8
  SEINE_R8 -->|41.7km| MERY-_22
  style SEINE_P7 fill:#afa, stroke:#faa, stroke-width:3px
  style SEINE_R8 fill:#afa
  style SEINE fill:#9de
  style MERY-_22 fill:#afa
  style BAR-S_06 fill:#eef
  linkStyle 2 stroke:#faa, stroke-width:2px,stroke-dasharray: 5 5;
graph LR
LOUVE_19 -->|0.5km| MARNE_P28
MARNE_P23 -->|3km| STDIZ_04
MARNE_P23 --> M(MARNE)
MARNE_P28 --> M
MARNE_P28 -->|25.6km| MARNE_R25
M --> MARNE_R25
STDIZ_04 -->|28.7km| MARNE_R25
MARNE_R25 -->|56.9km| CHALO_21
style MARNE_P28 fill:#afa, stroke:#faa, stroke-width:3px
style MARNE_P23 fill:#eef, stroke:#faa, stroke-width:3px
style MARNE_R25 fill:#afa
style STDIZ_04 fill:#afa 
style CHALO_21 fill:#afa
style M fill:#9de
linkStyle 2 stroke:#faa, stroke-width:2px,stroke-dasharray: 5 5;
linkStyle 3 stroke:#faa, stroke-width:2px,stroke-dasharray: 5 5;
Edited Nov 29, 2022 by Dorchies David
Assignee
Assign to
Time tracking