Commit 5a298fbc authored by Delaigue Olivier's avatar Delaigue Olivier
Browse files

v1.6.3.10 docs: minor text and style revisions in the sd_model vignette

Commit b4287b28
Refs #34
parent ec243d37
Pipeline #16654 failed with stages
in 26 seconds
Package: airGR
Type: Package
Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
Version: 1.6.3.9
Version: 1.6.3.10
Date: 2020-10-14
Authors@R: c(
person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
......
## Release History of the airGR Package
### 1.6.3.9 Release Notes (2020-10-14)
### 1.6.3.10 Release Notes (2020-10-14)
#### New features
......
---
title: "Simulating a reservoir with semi-distributed GR4J model"
author: "David Dorchies"
bibliography: V00_airgr_ref.bib
output: rmarkdown::html_vignette
vignette: >
......@@ -20,7 +21,7 @@ library(imputeTS)
The **airGR** package implements semi-distributed model capabilities using a lag model between subcatchments. It allows to chain together several lumped models as well as integrating anthropogenic influence such as reservoirs or withdrawals.
`RunModel_LAG` documentation gives an example of simulating the influence of a reservoir in a lumped model. Try `example(RunModel_LAG)` to get it.
`RunModel_Lag` documentation gives an example of simulating the influence of a reservoir in a lumped model. Try `example(RunModel_Lag)` to get it.
In this vignette, we show how to calibrate 2 sub-catchments in series with a semi-distributed model consisting of 2 GR4J models. For doing this we compare two strategies for calibrating the downstream subcatchment:
......@@ -64,18 +65,18 @@ The operations are exactly the same as the ones for a GR4J lumped model. So we d
```{r}
InputsModelUp <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR,
Precip = BasinObs$P, PotEvap = BasinObs$E)
Precip = BasinObs$P, PotEvap = BasinObs$E)
Ind_Run <- seq(which(format(BasinObs$DatesR, format = "%Y-%m-%d") == "1990-01-01"),
which(format(BasinObs$DatesR, format = "%Y-%m-%d") == "1999-12-31"))
RunOptionsUp <- CreateRunOptions(FUN_MOD = RunModel_GR4J,
InputsModel = InputsModelUp, IndPeriod_Run = Ind_Run,
IniStates = NULL, IniResLevels = NULL, IndPeriod_WarmUp = NULL)
InputsModel = InputsModelUp, IndPeriod_Run = Ind_Run,
IniStates = NULL, IniResLevels = NULL, IndPeriod_WarmUp = NULL)
InputsCritUp <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModelUp,
RunOptions = RunOptionsUp, VarObs = "Q", Obs = BasinObs$Qmm[Ind_Run])
RunOptions = RunOptionsUp, VarObs = "Q", Obs = BasinObs$Qmm[Ind_Run])
CalibOptionsUp <- CreateCalibOptions(FUN_MOD = RunModel_GR4J, FUN_CALIB = Calibration_Michel)
OutputsCalibUp <- Calibration_Michel(InputsModel = InputsModelUp, RunOptions = RunOptionsUp,
InputsCrit = InputsCritUp, CalibOptions = CalibOptionsUp,
FUN_MOD = RunModel_GR4J)
InputsCrit = InputsCritUp, CalibOptions = CalibOptionsUp,
FUN_MOD = RunModel_GR4J)
```
And see the result of the simulation:
......@@ -88,7 +89,7 @@ OutputsModelUp <- RunModel_GR4J(InputsModel = InputsModelUp, RunOptions = RunOpt
# Calibration of the downstream subcatchment with upstream flow observations
Observed flow data contain `NA` values and a complete time series is mandatory for running the LAG model. We propose to complete the observed upstream flow with linear interpolation:
Observed flow data contain `NA` values and a complete time series is mandatory for running the Lag model. We propose to complete the observed upstream flow with linear interpolation:
```{r}
QObsUp <- imputeTS::na_interpolation(BasinObs$Qmm)
......@@ -106,14 +107,14 @@ InputsModelDown1 <- CreateInputsModel(
)
```
And then calibrate the combination of LAG model for upstream flow transfer and GR4J model for the runoff of the downstream subcatchment:
And then calibrate the combination of Lag model for upstream flow transfer and GR4J model for the runoff of the downstream subcatchment:
```{r}
RunOptionsDown <- CreateRunOptions(FUN_MOD = RunModel_GR4J,
InputsModel = InputsModelDown1, IndPeriod_Run = Ind_Run,
IniStates = NULL, IniResLevels = NULL, IndPeriod_WarmUp = NULL)
InputsModel = InputsModelDown1, IndPeriod_Run = Ind_Run,
IniStates = NULL, IniResLevels = NULL, IndPeriod_WarmUp = NULL)
InputsCritDown <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModelDown1,
RunOptions = RunOptionsDown, VarObs = "Q", Obs = QObsDown[Ind_Run])
RunOptions = RunOptionsDown, VarObs = "Q", Obs = QObsDown[Ind_Run])
CalibOptionsDown <- CreateCalibOptions(FUN_MOD = RunModel_GR4J,
FUN_CALIB = Calibration_Michel,
IsSD = TRUE) # Don't forget to specify that it's an SD model here
......@@ -129,7 +130,7 @@ InputsModelDown2 <- InputsModelDown1
InputsModelDown2$Qupstream[Ind_Run] <- OutputsModelUp$Qsim
```
`RunModel` is run in order to automatically combine GR4J and LAG models.
`RunModel` is run in order to automatically combine GR4J and Lag models.
```{r}
OutputsModelDown1 <- RunModel(InputsModel = InputsModelDown2,
......@@ -159,22 +160,22 @@ ParamDown2 <- OutputsCalibDown2$ParamFinalR
# Discussion
## Identification of LAG parameter
## Identification of Lag parameter
The theoretical LAG parameter should be equal to:
```{r}
LAG <- InputsModelDown1$LengthHydro / (2 * 86400)
paste(format(LAG), "m/s")
Lag <- InputsModelDown1$LengthHydro / (2 * 86400)
paste(format(Lag), "m/s")
```
Both calibrations overestimate this parameter:
```{r}
mLag <- matrix(c(LAG, OutputsCalibDown1$ParamFinalR[1], OutputsCalibDown2$ParamFinalR[1]), ncol = 1)
mLag <- matrix(c(Lag, OutputsCalibDown1$ParamFinalR[1], OutputsCalibDown2$ParamFinalR[1]), ncol = 1)
rownames(mLag) = c("theoretical", "calibrated with observed upstream flow",
"calibrated with simulated upstream flow")
colnames(mLag) = c("LAG parameter")
colnames(mLag) = c("Lag parameter")
knitr::kable(mLag)
```
......@@ -183,7 +184,7 @@ knitr::kable(mLag)
Theoretically, the parameters of the downstream GR4J model should be the same as the upstream one and we know the lag time. So this set of parameter should give a better performance criteria:
```{r}
ParamDownTheo <- c(LAG, OutputsCalibUp$ParamFinalR)
ParamDownTheo <- c(Lag, OutputsCalibUp$ParamFinalR)
OutputsModelDownTheo <- RunModel(InputsModel = InputsModelDown2,
RunOptions = RunOptionsDown,
Param = ParamDownTheo,
......@@ -200,7 +201,7 @@ comp <- matrix(c(0, OutputsCalibUp$ParamFinalR, rep(OutputsCalibDown1$ParamFinal
OutputsCalibDown2$ParamFinalR, ParamDownTheo), ncol = 5, byrow = TRUE)
comp <- cbind(comp, c(OutputsCalibUp$CritFinal, OutputsCalibDown1$CritFinal,
CritDown1$CritValue, OutputsCalibDown2$CritFinal, CritDownTheo$CritValue))
colnames(comp) <- c("LAG", paste0("x", 1:4), "NSE")
colnames(comp) <- c("Lag", paste0("x", 1:4), "NSE")
rownames(comp) <- c("Calibration of the upstream subcatchment",
"Calibration 1 with observed upstream flow",
"Validation 1 with simulated upstream flow",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment