Learn R Programming

airGR (version 1.7.6)

RunModel_Lag: Run with the Lag model

Description

Function which performs a single run for the Lag model over the test period.

Usage

RunModel_Lag(InputsModel, RunOptions, Param, QcontribDown)

Value

[list] see RunModel_GR4J or RunModel_CemaNeigeGR4J for details.

The list value contains an extra item named QsimDown which is a copy of the runoff contribution of the downstream sub-basin contained in argument QcontribDown in [mm/time step].

Arguments

InputsModel

[object of class InputsModel] created with SD model inputs, see CreateInputsModel for details. The object should also contain a key OutputsModel of class CreateInputsModel coming from the simulation of the downstream subcatchment runoff.

RunOptions

[object of class RunOptions] see CreateRunOptions for details

Param

[numeric] vector of 1 parameter

Velocitymean flow velocity [m/s]

QcontribDown

[numeric] vector or [OutputsModel] containing the time series of the runoff contribution of the downstream sub-basin

Author

Olivier Delaigue, David Dorchies, Guillaume Thirel

See Also

RunModel, CreateInputsModel, CreateRunOptions.

Examples

Run this code
#####################################################################
## Simulation of a reservoir with a purpose of low-flow mitigation ##
#####################################################################

## ---- preparation of the InputsModel object

## loading package and catchment data
library(airGR)
data(L0123001)

## ---- simulation of the hydrological catchment with GR4J

InputsModelDown <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR,
                                     Precip = BasinObs$P, PotEvap = BasinObs$E)

## run period selection
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"))

## creation of the RunOptions object
RunOptionsDown <- CreateRunOptions(FUN_MOD = RunModel_GR4J,
                                   InputsModel = InputsModelDown, IndPeriod_Run = Ind_Run)

## simulation of the runoff of the catchment with a GR4J model
Param <- c(X1 = 257.238, X2 = 1.012, X3 = 88.235, X4 = 2.208)
OutputsModelDown <- RunModel_GR4J(InputsModel = InputsModelDown,
                                  RunOptions = RunOptionsDown, Param = Param)

## ---- specifications of the reservoir

## the reservoir withdraws 1 m3/s when it's possible considering the flow observed in the basin
Qupstream <- matrix(-sapply(BasinObs$Qls / 1000 - 1, function(x) {
  min(1, max(0, x, na.rm = TRUE))
}), ncol = 1)

## except between July and September when the reservoir releases 3 m3/s for low-flow mitigation
month <- as.numeric(format(BasinObs$DatesR, "%m"))
Qupstream[month >= 7 & month <= 9] <- 3
Qupstream <- Qupstream * 86400 ## Conversion in m3/day

## the reservoir is not an upstream subcachment: its areas is NA
BasinAreas <- c(NA, BasinInfo$BasinArea)

## delay time between the reservoir and the catchment outlet is 2 days and the distance is 150 km
LengthHydro <- 150

## ---- simulation of the basin with the reservoir influence

InputsModelInf <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR,
                                    Precip = BasinObs$P, PotEvap = BasinObs$E,
                                    Qupstream = Qupstream, LengthHydro = LengthHydro,
                                    BasinAreas = BasinAreas)
## creation of the RunOptions object
RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J,
                               InputsModel = InputsModelInf, IndPeriod_Run = Ind_Run)

## with a delay of 2 days for 150 km, the flow velocity is 75 km per day
Velocity <- (LengthHydro * 1e3 / 2) / (24 * 60 * 60) ## Conversion km/day -> m/s

## run the lag model which routes precipitation-runoff model and upstream flows
OutputsModel <- RunModel_Lag(InputsModel = InputsModelInf,
                             RunOptions = RunOptions,
                             Param = Velocity,
                             QcontribDown = OutputsModelDown)

## results preview of comparison between naturalised (observed) and influenced flow (simulated)
plot(OutputsModel, Qobs = OutputsModel$QsimDown)

Run the code above in your browser using DataLab