class: center, middle, inverse, title-slide .title[ # Découverte de
airGRiwrm
sur la Moyenne Vallée de l’Hérault ] .subtitle[ ## Gestion intégrée de la ressource en eau avec
airGR
] .author[ ### David Dorchies ] .institute[ ### UMR G-EAU ] .date[ ### Montpellier, le 25 novembre 2024 ] --- # Programme de la formation .pull-left[ ## Pré-requis - Un minimum de connaissance du langage R - Une installation de R (≥4.3.3) et Rstudio: https://posit.co/download/rstudio-desktop/ ## Diffusion du support de cette formation Ce support est disponible sur :<br/> https://airgriwrm.pages.mia.inra.fr/formation-airgriwrm *Code source: https://forgemia.inra.fr/airgriwrm/formation-airgriwrm* ] .pull-right[ | Séquence | Temps | Heure | | ---------------------------------------------------------- | ----- | ----- | | Accueil des participants | 10 mn | 14h00 | | Introduction au modèle semi-distribué | 05 mn | 14h10 | | Présentation du package airGRiwrm | 15 mn | 14h15 | | Installation du package airGRiwrm | 10 mn | 14h30 | | Présentation du jeu de données de la formation | 30 mn | 14h40 | | Créer un réseau semi-distribué avec airGRiwrm | 15 mn | 15h10 | | Calage d'un réseau semi-distribué de modèles hydrologiques | 60 mn | 15h25 | | Régulation du barrage du Salagou | 30 mn | 16h25 | | Fin de la formation | | 16h55 | ] --- class: inverse, middle, center # Le modèle semi-distribué --- # Un modèle semi-distribué : c'est quoi ? .pull-left[ - Découpage du bassin versant en sous-bassins en fonction de la position des stations hydrométriques exutoires de chaque sous-bassin - Le ruissellement de chaque sous-bassin est modélisé par un modèle pluie-débit global (GR...) - Le modèle semi-distribué relie les stations hydrométrique grâce à un routage hydraulique de type "lag" <img src="img/scheme_bvi.png" width="50%" style="display: block; margin: auto;" /> ] .pull-right[ .vertical-center[ ![:scale 90%](img/scheme_GRSD.png) ]] --- # Intérêt du modèle hydrologique semi-distribué .left-column[ Au delà de la simulation de débits ayant une cohérence amont-aval dans le modèle, la semi-distribution et le routage hydraulique permettent l'introduction d'influences humaines : - Prélèvements de débit - Réservoirs - Transferts inter-bassins *Exemple ci-contre avec le bassin versant de l'Aude où sont modélisés 7 réservoirs, des transferts inter-bassins et des canaux de navigation.* ] .right-column[ .center[ ![:scale 62%](img/plot_griwrm_aude.png) ] ] --- class: inverse, middle, center ![:scale 30%](img/logo_airGRiwrm.png) # *airGRiwrm*: extension de *airGR* pour un réseau de modèles semi-distribués --- # Introduction au package **airGRiwrm** .pull-left[ **airGRiwrm** complète la galaxie **airGR** en automatisant la semi-distribution et en ajoutant des fonctionnalités pour simuler les influences humaines. Principalement utilisé pour les études d'impact et d'adaptation aux changements globaux de bassins versants anthropisés. - Le package airGRiwrm est en développement depuis mai 2020 - Diffusé sur [le CRAN depuis mars 2022 (v0.7.0 - sept. 2024)](https://cloud.r-project.org/package=airGRiwrm) - Logiciel gratuit et open-source (Github : https://github.com/inrae/airGRiwrm) .center[ ![:scale 75%](img/website_thumbnail.jpg) ] ] .pull-right[ .center[ ![:scale 70%](img/airgr_galaxy.png) ] Documentation avec des exemples d'utilisation: - https://inrae.github.io/airGRiwrm *(v0.7.0)* - https://inrae.github.io/airGRiwrm/dev/ *(v0.7.0.9000 en développement)* ] --- class: hide_logo # *airGRiwrm*: extension de *airGR* pour un réseau de modèles semi-distribués .pull-left[**airGRiwrm** redéfinit les fonctions de **airGR** pour automatiser la gestion d'un réseau semi-distribué: ``` r library(airGRiwrm) ``` ```r Loading required package: airGR Attaching package: ‘airGRiwrm’ The following objects are masked from ‘package:airGR’: Calibration, CreateCalibOptions, CreateInputsCrit, CreateInputsModel, CreateRunOptions, RunModel ``` Les fonctions originales de **airGR** restent accessibles. Par rapport à **airGR**, on ajoute une étape préalable de description du réseau : avec la fonction `CreateGRiwrm` ] .pull-right[ <img src="index_files/figure-html/diag-airGR-functions-1.png" width="85%" style="display: block; margin: auto;" /> ] --- # Les fonctionnalités de *airGRiwrm* ## Version officielle diffusée sur le CRAN *(v0.7.0)* - Extension de *airGR* sur un réseau semi-distribué via [la description d'un réseau de "noeuds"](https://inrae.github.io/airGRiwrm/reference/CreateGRiwrm.html) confluant de l'amont vers l'aval - Les noeuds de modèle supportent : - Les Modèles GR (pas de temps journalier et horaire) et transfert hydraulique (Lag) - [Un modèle `RunModel_Reservoir`](https://inrae.github.io/airGRiwrm/reference/RunModel_Reservoir.html) pour simuler l'évolution du volume d'un réservoir - D'autres types de noeuds sont disponibles : - [Noeuds `DirectInjection`](https://inrae.github.io/airGRiwrm/articles/V03_Open-loop_influenced_flow.html) pour introduire des influences humaines dans le réseau via des chroniques prédéfinies de débits prélevés ou lâchés - [Noeuds `Ungauged`](https://inrae.github.io/airGRiwrm/articles/V05_Modelling_ungauged_nodes.html) pour simuler les débits du cours d'eau sur des points non jaugés en transférant le modèle et les paramètres d'un noeud jaugé (régionalisation) - [Noeuds `Diversion`](https://inrae.github.io/airGRiwrm/articles/V06_Modelling_regulated_diversion.html) pour dériver une partie du débit d'un noeud vers un autre noeud que son noeud aval (pour les transferts inter-bassin et les canaux de dérivation) - Calage et run des simulations - Régularisation des paramètres ([de Lavenne et al., 2019](https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2018WR024266)) - Simulation en mode "Superviseur" permettant l'utilisation d'algorithmes de régulation centralisée ## Version en développement - Fonction utilisateur de régulation locale à l'échelle du noeud utilisable en calage --- class: inverse, middle, center # Installation du package *airGRiwrm* ![](img/logo_airGRiwrm.png) --- # Installation du package *airGRiwrm* ### La version diffusée sur le CRAN ``` r install.packages("airGRiwrm") ``` ### La version en cours de développement Installation de **airGRiwrm** branche "dev" : ``` r install.packages("remotes") remotes::install_github("inrae/airGRiwrm", "dev") ``` --- class: inverse, middle, center # Le jeu de données de la formation: le cas d'étude "Moyenne Vallée de l'Hérault" --- # Présentation du cas d'étude "Moyenne Vallée de l'Hérault" --- # Synoptique de la représentation du réseau .pull-left[
] -- Exercice: *Quel est l'ordre d'écoulement des différents objets du bassin ?* .pull-right[ <img src="index_files/figure-html/network-basic-synoptic-1.png" width="100%" style="display: block; margin: auto;" /> ] --- # Cas d'étude: chargement des données ## Exercice - Créer un R Notebook sous RStudio - Récupérer le fichier `herault.Rdata` sur https://forgemia.inra.fr/airgriwrm/formation-airgriwrm ([Lien direct](https://forgemia.inra.fr/airgriwrm/formation-airgriwrm/-/raw/master/herault.RData)) - Enregistrer le fichier `herault.Rdata` et le R Notebook dans le même dossier - Définir le working directory (Menu Session > Set working directory > To source file location) - Créer un premier chunk pour : - effacer l'environnement de travail - charger les données du fichier `herault.RData` - afficher la liste des variables présentes dans l'environnement de travail -- ``` r rm(list = ls()) load("herault.RData") ls() #> [1] "DatesR" "PotEvap" "Precip" "Qinf" #> [5] "Qobs" "Qrelease" "reseau_herault" ``` N.B.: Les codes qui ont généré ces données issues de bases de données et de littérature publiques sont disponibles à l'URL:<br/> **https://airgriwrm.pages.mia.inra.fr/airgrccia/articles/** --- # Cas d'étude: chargement des données ## Description des données fournies ``` r ls() #> [1] "DatesR" "PotEvap" "Precip" "Qinf" #> [5] "Qobs" "Qrelease" "reseau_herault" ``` - `reseau_herault` (*data.frame*): Description des noeuds du réseau hydrographique - `DatesR` (*POSIXct*): Dates des pas de temps d'observation - `Precip`, `PotEvap` (*matrix*): Chroniques de précipitations et ETP journalières moyennes sur chaque BVI - `Qinf`, `Qrelease`, `Qobs` (*matrix*): Chroniques des débits prélevés, lâchers par les réservoir, observés aux stations de jaugeage --- # Cas d'étude: description du réseau de stations hydrométriques Exercice: *Afficher le tableau décrivant le réseau de stations* ``` r reseau_herault ``` .left-column[ <img src="index_files/figure-html/network-basic-synoptic2-1.png" width="100%" style="display: block; margin: auto;" /> ] -- .right-column[ |id |down | length| tot_area|libelle_site | |:--------|:--------|------:|----------:|:-------------------------------------------------------| |Y2300020 |NA | NA| 1954.93625|L'Hérault à Aspiran | |Y2140010 |Y2300020 | 33.40| 1407.61063|L'Hérault à Gignac | |Y2140020 |Y2140010 | 45.10| 1227.02063|L'Hérault à Saint-Guilhem-le-Désert [La Combe du Corps] | |Y2100020 |Y2140020 | 73.45| 910.51250|L'Hérault à Laroque | |Y2210010 |Y2300020 | 79.10| 181.88000|La Lergue à Lodève | |Y2230010 |DAM | 0.00| 78.87438|Le Salagou à Clermont-l'Hérault [Mas Audran] | |DAM |Y2300020 | 48.50| NA|Barrage du Salagou | ] --- # Cas d'étude: description du réseau intégrant les prélèvements La variable `Qinf` contient les chroniques de prélèvements agrégés à l'échelle des BVI (Une colonne par BVI) ``` r str(Qinf) #> 'data.frame': 4017 obs. of 6 variables: #> $ Y2100020_WD: num -5258 -5258 -5258 -5258 -5258 ... #> $ Y2140010_WD: num -95933 -95933 -95933 -95933 -95933 ... #> $ Y2140020_WD: num -329 -329 -329 -329 -329 ... #> $ Y2210010_WD: num -810 -810 -810 -810 -810 ... #> $ Y2230010_WD: num -1289 -1289 -1289 -1289 -1289 ... #> $ Y2300020_WD: num -12949 -12949 -12949 -12949 -12949 ... ``` ## Exercice *Ajouter les noeuds de prélèvement dans la description du réseau* - Explorer la variable `Qinf` contenant les chroniques de prélèvement - Créer la liste des identifiants des noeuds à créer - Créer le tableau de description de ces nouveaux noeuds dans le réseau (même colonnes que `reseau_herault`) - Concaténer les deux tableaux de description du réseau --- # Cas d'étude: description du réseau intégrant les prélèvements ``` r id_WD <- names(Qinf) id_bvi_down <- sub("_WD", "", names(Qinf)) reseau_WD <- data.frame( id = id_WD, down = id_bvi_down, length = 0, tot_area = as.numeric(NA), libelle_site = paste("Withdrawals on", reseau_herault$libelle_site[reseau_herault$id %in% id_bvi_down]) ) reseau_herault <- rbind(reseau_herault, reseau_WD) ``` |id |down | length| tot_area|libelle_site | |:-----------|:--------|------:|----------:|:----------------------------------------------------------------------| |Y2300020 |NA | NA| 1954.93625|L'Hérault à Aspiran | |Y2140010 |Y2300020 | 33.40| 1407.61063|L'Hérault à Gignac | |Y2140020 |Y2140010 | 45.10| 1227.02063|L'Hérault à Saint-Guilhem-le-Désert [La Combe du Corps] | |Y2100020 |Y2140020 | 73.45| 910.51250|L'Hérault à Laroque | |Y2210010 |Y2300020 | 79.10| 181.88000|La Lergue à Lodève | |Y2230010 |DAM | 0.00| 78.87438|Le Salagou à Clermont-l'Hérault [Mas Audran] | |DAM |Y2300020 | 48.50| NA|Barrage du Salagou | |Y2100020_WD |Y2100020 | 0.00| NA|Withdrawals on L'Hérault à Aspiran | |Y2140010_WD |Y2140010 | 0.00| NA|Withdrawals on L'Hérault à Gignac | |Y2140020_WD |Y2140020 | 0.00| NA|Withdrawals on L'Hérault à Saint-Guilhem-le-Désert [La Combe du Corps] | |Y2210010_WD |Y2210010 | 0.00| NA|Withdrawals on L'Hérault à Laroque | |Y2230010_WD |Y2230010 | 0.00| NA|Withdrawals on La Lergue à Lodève | |Y2300020_WD |Y2300020 | 0.00| NA|Withdrawals on Le Salagou à Clermont-l'Hérault [Mas Audran] | --- # Cas d'étude: description des observations hydroclimatiques Exercice: *Afficher des informations concernant les dates de chroniques (début/fin) et les statistiques des chroniques de données météo* -- ``` r head(DatesR, 3) #> [1] "2012-08-01 UTC" "2012-08-02 UTC" "2012-08-03 UTC" tail(DatesR, 3) #> [1] "2023-07-29 UTC" "2023-07-30 UTC" "2023-07-31 UTC" summary(Precip) #> Y2300020 Y2140010 Y2140020 Y2100020 #> Min. : 0.00000 Min. : 0.00000 Min. : 0.00000 Min. : 0.0000 #> 1st Qu.: 0.00000 1st Qu.: 0.00000 1st Qu.: 0.00000 1st Qu.: 0.0000 #> Median : 0.01455 Median : 0.02533 Median : 0.06252 Median : 0.1115 #> Mean : 2.21053 Mean : 2.30651 Mean : 2.70923 Mean : 3.6820 #> 3rd Qu.: 0.69084 3rd Qu.: 0.80960 3rd Qu.: 0.95105 3rd Qu.: 1.6304 #> Max. :225.10429 Max. :212.05096 Max. :143.04563 Max. :218.9613 #> Y2210010 Y2230010 #> Min. : 0.00000 Min. : 0.00000 #> 1st Qu.: 0.00000 1st Qu.: 0.00000 #> Median : 0.00476 Median : 0.00168 #> Mean : 3.36031 Mean : 2.16033 #> 3rd Qu.: 1.28997 3rd Qu.: 0.58991 #> Max. :292.21172 Max. :247.89930 summary(PotEvap) #> Y2300020 Y2140010 Y2140020 Y2100020 #> Min. :0.1883 Min. :0.1427 Min. :0.02319 Min. :0.006492 #> 1st Qu.:0.9457 1st Qu.:0.9360 1st Qu.:0.88077 1st Qu.:0.755963 #> Median :2.0877 Median :2.0442 Median :1.95908 Median :1.783624 #> Mean :2.4441 Mean :2.4096 Mean :2.32429 Mean :2.136128 #> 3rd Qu.:3.8575 3rd Qu.:3.8122 3rd Qu.:3.71109 3rd Qu.:3.392739 #> Max. :6.2505 Max. :6.2099 Max. :6.05675 Max. :6.100467 #> Y2210010 Y2230010 #> Min. :0.004761 Min. :0.1409 #> 1st Qu.:0.776905 1st Qu.:0.9391 #> Median :1.790155 Median :2.0392 #> Mean :2.115719 Mean :2.4100 #> 3rd Qu.:3.369112 3rd Qu.:3.7950 #> Max. :5.783518 Max. :6.2375 ``` # Cas d'étude: description des observations hydroclimatiques **Exercice:** *Afficher des informations concernant les dates de chroniques (début/fin) et les statistiques des chroniques de données météo* ``` r TSstudio::ts_plot(cbind(DatesR, PotEvap)) ```