From 795cbd0af3116a9a9aeaea2bd3ad6bf26928265e Mon Sep 17 00:00:00 2001 From: Dorchies David <david.dorchies@inrae.fr> Date: Thu, 8 Apr 2021 10:40:40 +0200 Subject: [PATCH] refactor: add roxygen output to the repository - also solve airGR compatibility issue Refs #34 --- .gitignore | 3 - .gitlab-ci.yml | 3 +- NAMESPACE | 38 ++++++ data-raw/logo_airGRiwrm.xcf | Bin 0 -> 119424 bytes man/Calibration.GRiwrmInputsModel.Rd | 34 +++++ man/Calibration.InputsModel.Rd | 77 +++++++++++ man/Calibration.Rd | 19 +++ man/CheckColumnTypes.Rd | 26 ++++ man/ConvertMeteoSD.Rd | 36 ++++++ man/CreateCalibOptions.GRiwrmInputsModel.Rd | 19 +++ man/CreateCalibOptions.InputsModel.Rd | 16 +++ man/CreateCalibOptions.Rd | 19 +++ man/CreateController.Rd | 42 ++++++ man/CreateEmptyGRiwrmInputsModel.Rd | 17 +++ man/CreateInputsCrit.GRiwrmInputsModel.Rd | 31 +++++ man/CreateInputsCrit.InputsModel.Rd | 135 ++++++++++++++++++++ man/CreateInputsCrit.Rd | 19 +++ man/CreateInputsModel.GRiwrm.Rd | 27 ++++ man/CreateInputsModel.Rd | 19 +++ man/CreateInputsModel.default.Rd | 16 +++ man/CreateOneGRiwrmInputsModel.Rd | 27 ++++ man/CreateRunOptions.GRiwrmInputsModel.Rd | 19 +++ man/CreateRunOptions.InputsModel.Rd | 16 +++ man/CreateRunOptions.Rd | 19 +++ man/CreateSupervisor.Rd | 38 ++++++ man/DiagramGRiwrm.Rd | 34 +++++ man/GRiwrm.Rd | 37 ++++++ man/OutputsModelQsim.Rd | 30 +++++ man/RunModel.GR.Rd | 67 ++++++++++ man/RunModel.GRiwrmInputsModel.Rd | 23 ++++ man/RunModel.InputsModel.Rd | 69 ++++++++++ man/RunModel.Rd | 19 +++ man/RunModel.SD.Rd | 29 +++++ man/RunModel.Supervisor.Rd | 23 ++++ man/Severn.Rd | 23 ++++ man/UpdateQsimUpstream.Rd | 21 +++ man/checkRunModelParameters.Rd | 18 +++ man/createControl.Rd | 22 ++++ man/doSupervision.Rd | 14 ++ man/getDataFromLocation.Rd | 19 +++ man/getModelTimeStep.Rd | 17 +++ man/getNoSD_Ids.Rd | 17 +++ man/getNodeRanking.Rd | 17 +++ man/getSD_Ids.Rd | 17 +++ man/plot.Qm3s.Rd | 43 +++++++ man/setDataToLocation.Rd | 19 +++ 46 files changed, 1288 insertions(+), 5 deletions(-) create mode 100644 NAMESPACE create mode 100644 data-raw/logo_airGRiwrm.xcf create mode 100644 man/Calibration.GRiwrmInputsModel.Rd create mode 100644 man/Calibration.InputsModel.Rd create mode 100644 man/Calibration.Rd create mode 100644 man/CheckColumnTypes.Rd create mode 100644 man/ConvertMeteoSD.Rd create mode 100644 man/CreateCalibOptions.GRiwrmInputsModel.Rd create mode 100644 man/CreateCalibOptions.InputsModel.Rd create mode 100644 man/CreateCalibOptions.Rd create mode 100644 man/CreateController.Rd create mode 100644 man/CreateEmptyGRiwrmInputsModel.Rd create mode 100644 man/CreateInputsCrit.GRiwrmInputsModel.Rd create mode 100644 man/CreateInputsCrit.InputsModel.Rd create mode 100644 man/CreateInputsCrit.Rd create mode 100644 man/CreateInputsModel.GRiwrm.Rd create mode 100644 man/CreateInputsModel.Rd create mode 100644 man/CreateInputsModel.default.Rd create mode 100644 man/CreateOneGRiwrmInputsModel.Rd create mode 100644 man/CreateRunOptions.GRiwrmInputsModel.Rd create mode 100644 man/CreateRunOptions.InputsModel.Rd create mode 100644 man/CreateRunOptions.Rd create mode 100644 man/CreateSupervisor.Rd create mode 100644 man/DiagramGRiwrm.Rd create mode 100644 man/GRiwrm.Rd create mode 100644 man/OutputsModelQsim.Rd create mode 100644 man/RunModel.GR.Rd create mode 100644 man/RunModel.GRiwrmInputsModel.Rd create mode 100644 man/RunModel.InputsModel.Rd create mode 100644 man/RunModel.Rd create mode 100644 man/RunModel.SD.Rd create mode 100644 man/RunModel.Supervisor.Rd create mode 100644 man/Severn.Rd create mode 100644 man/UpdateQsimUpstream.Rd create mode 100644 man/checkRunModelParameters.Rd create mode 100644 man/createControl.Rd create mode 100644 man/doSupervision.Rd create mode 100644 man/getDataFromLocation.Rd create mode 100644 man/getModelTimeStep.Rd create mode 100644 man/getNoSD_Ids.Rd create mode 100644 man/getNodeRanking.Rd create mode 100644 man/getSD_Ids.Rd create mode 100644 man/plot.Qm3s.Rd create mode 100644 man/setDataToLocation.Rd diff --git a/.gitignore b/.gitignore index 9cc7067..e1d4aad 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,7 @@ # Project-specific -# Man pages generated by Roxygen -man/*.Rd /.vscode/ -/NAMESPACE ############################################################################### diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index be30b41..8e834df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,9 +22,8 @@ cache: before_script: - mkdir -p $R_LIBS_USER $BUILD_LOGS_DIR - echo "R_LIBS='$R_LIBS_USER'" > .Renviron - - R -e 'remotes::install_gitlab("HYCAR-Hydro/airgr@dev", host = "gitlab.irstea.fr")' + - R -e 'install.packages("airGR")' - R -e 'devtools::install_deps(dep = T)' - - R -e "devtools::document(roclets = c('rd', 'collate', 'namespace'))" .check: stage: checks diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..4f40750 --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,38 @@ +# Generated by roxygen2: do not edit by hand + +S3method(Calibration,GRiwrmInputsModel) +S3method(Calibration,InputsModel) +S3method(ConvertMeteoSD,GRiwrm) +S3method(ConvertMeteoSD,character) +S3method(ConvertMeteoSD,matrix) +S3method(CreateCalibOptions,GRiwrmInputsModel) +S3method(CreateCalibOptions,InputsModel) +S3method(CreateInputsCrit,GRiwrmInputsModel) +S3method(CreateInputsCrit,InputsModel) +S3method(CreateInputsModel,GRiwrm) +S3method(CreateInputsModel,default) +S3method(CreateRunOptions,GRiwrmInputsModel) +S3method(CreateRunOptions,InputsModel) +S3method(RunModel,GR) +S3method(RunModel,GRiwrmInputsModel) +S3method(RunModel,InputsModel) +S3method(RunModel,SD) +S3method(RunModel,Supervisor) +S3method(plot,Qm3s) +export(Calibration) +export(CheckColumnTypes) +export(ConvertMeteoSD) +export(CreateCalibOptions) +export(CreateController) +export(CreateInputsCrit) +export(CreateInputsModel) +export(CreateRunOptions) +export(CreateSupervisor) +export(DiagramGRiwrm) +export(GRiwrm) +export(RunModel) +export(createControl) +export(getNodeRanking) +import(airGR) +importFrom(grDevices,rainbow) +importFrom(graphics,matplot) diff --git a/data-raw/logo_airGRiwrm.xcf b/data-raw/logo_airGRiwrm.xcf new file mode 100644 index 0000000000000000000000000000000000000000..a5055051d031378f0e0377d10080642b4bdd4d23 GIT binary patch literal 119424 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 z
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 BD_sBp literal 0 HcmV?d00001 diff --git a/man/Calibration.GRiwrmInputsModel.Rd b/man/Calibration.GRiwrmInputsModel.Rd new file mode 100644 index 0000000..8416c82 --- /dev/null +++ b/man/Calibration.GRiwrmInputsModel.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Calibration.GRiwrmInputsModel.R +\name{Calibration.GRiwrmInputsModel} +\alias{Calibration.GRiwrmInputsModel} +\title{Calibration of a semi-distributed run-off model} +\usage{ +\method{Calibration}{GRiwrmInputsModel}( + InputsModel, + RunOptions, + InputsCrit, + CalibOptions, + useUpstreamQsim = TRUE, + ... +) +} +\arguments{ +\item{InputsModel}{object of class \emph{GRiwrmInputsModel}, see \code{\link{CreateInputsModel.GRiwrm}} for details.} + +\item{RunOptions}{object of class \emph{GRiwrmRunOptions}, see \code{\link{CreateRunOptions.GRiwrmInputsModel}} for details.} + +\item{InputsCrit}{object of class \emph{GRiwrmInputsCrit}, see \code{\link{CreateInputsCrit.GRiwrmInputsModel}} for details.} + +\item{CalibOptions}{object of class \emph{GRiwrmCalibOptions}, see \code{\link{CreateCalibOptions.GRiwrmInputsModel}} for details.} + +\item{useUpstreamQsim}{boolean describing if simulated (\code{TRUE}) or observed (\code{FALSE}) flows are used for calibration. Default is \code{TRUE}.} + +\item{...}{further arguments passed to \code{\link[airGR]{Calibration}}.} +} +\value{ +GRiwrmOutputsCalib object which is a list of OutputsCalib (See \code{\link[airGR]{Calibration}}) for each node of the semi-distributed model. +} +\description{ +Calibration of a semi-distributed run-off model +} diff --git a/man/Calibration.InputsModel.Rd b/man/Calibration.InputsModel.Rd new file mode 100644 index 0000000..7bf2e2c --- /dev/null +++ b/man/Calibration.InputsModel.Rd @@ -0,0 +1,77 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Calibration.InputsModel.R +\name{Calibration.InputsModel} +\alias{Calibration.InputsModel} +\title{Wrapper to \code{\link[airGR]{Calibration}} for one sub-basin.} +\usage{ +\method{Calibration}{InputsModel}(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link[airGR]{CreateInputsModel}} for details} + +\item{...}{Further arguments for compatibility with S3 method} +} +\value{ +[list] see \code{\link[airGR]{Calibration_Michel}} +} +\description{ +Calibration algorithm that optimises the error criterion selected as objective function using the provided functions. +} +\examples{ +library(airGR) + +## loading catchment data +data(L0123001) + +## preparation of InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, + Precip = BasinObs$P, PotEvap = BasinObs$E) + +## calibration 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")) + +## preparation of RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, + InputsModel = InputsModel, IndPeriod_Run = Ind_Run) + +## calibration criterion: preparation of the InputsCrit object +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, + RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD = RunModel_GR4J, FUN_CALIB = Calibration_Michel) + +## calibration +OutputsCalib <- Calibration(InputsModel = InputsModel, RunOptions = RunOptions, + InputsCrit = InputsCrit, CalibOptions = CalibOptions, + FUN_MOD = RunModel_GR4J, + FUN_CALIB = Calibration_Michel) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel(InputsModel = InputsModel, RunOptions = RunOptions, + Param = Param, FUN = RunModel_GR4J) + +## results preview +plot(OutputsModel, Qobs = BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, + RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_KGE, InputsModel = InputsModel, + RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) +} +\seealso{ +\code{\link[airGR]{Calibration_Michel}}, +\code{\link[airGR]{ErrorCrit}}, \code{\link[airGR]{TransfoParam}}, +\code{\link[airGR]{CreateInputsModel}}, \code{\link[airGR]{CreateRunOptions}}, +\code{\link[airGR]{CreateInputsCrit}}, \code{\link[airGR]{CreateCalibOptions}}. +} +\author{ +Laurent Coron, Olivier Delaigue +} diff --git a/man/Calibration.Rd b/man/Calibration.Rd new file mode 100644 index 0000000..9575c6d --- /dev/null +++ b/man/Calibration.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Calibration.R +\name{Calibration} +\alias{Calibration} +\title{Calibration of either \strong{airGR} model and \strong{airGRiwrm} semi-distributive model} +\usage{ +Calibration(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{the class of the first parameter determine which calibration is used} + +\item{...}{further arguments passed to or from other methods.} +} +\value{ +\emph{OutputsCalib} or \emph{GRiwrmOutputsCalib} object +} +\description{ +Calibration of either \strong{airGR} model and \strong{airGRiwrm} semi-distributive model +} diff --git a/man/CheckColumnTypes.Rd b/man/CheckColumnTypes.Rd new file mode 100644 index 0000000..2b780e9 --- /dev/null +++ b/man/CheckColumnTypes.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/GRiwrm.R +\name{CheckColumnTypes} +\alias{CheckColumnTypes} +\title{Check the column types of a \link{data.frame}} +\usage{ +CheckColumnTypes(df, coltypes) +} +\arguments{ +\item{df}{\link{data.frame} to check} + +\item{coltypes}{named \link{list} with the name of the columns to check as key and the required type as value} +} +\value{ +\link{NULL} or throw an error if a wrong type is detected. +} +\description{ +Check the column types of a \link{data.frame} +} +\examples{ +CheckColumnTypes( + data.frame(string = c("A"), numeric = c(1), stringsAsFactors = FALSE), + list(string = "character", numeric = "double") +) + +} diff --git a/man/ConvertMeteoSD.Rd b/man/ConvertMeteoSD.Rd new file mode 100644 index 0000000..addee9f --- /dev/null +++ b/man/ConvertMeteoSD.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ConvertMeteoSD.R +\name{ConvertMeteoSD} +\alias{ConvertMeteoSD} +\alias{ConvertMeteoSD.GRiwrm} +\alias{ConvertMeteoSD.character} +\alias{ConvertMeteoSD.matrix} +\title{Convert meteorological data from basin scale to sub-basin scale} +\usage{ +ConvertMeteoSD(x, ...) + +\method{ConvertMeteoSD}{GRiwrm}(x, meteo, ...) + +\method{ConvertMeteoSD}{character}(x, griwrm, meteo, ...) + +\method{ConvertMeteoSD}{matrix}(x, areas, temperature = FALSE, ...) +} +\arguments{ +\item{x}{either a \link{GRiwrm} network description, a \link{character} id of a node, a \link{matrix} containing meteorological data} + +\item{...}{Parameters passed to the methods} + +\item{meteo}{\link{matrix} or \link{data.frame} containing meteorological data. Its \link{colnames} should be equal to the IDof the basins} + +\item{griwrm}{\link{GRiwrm} object describing the semi-distributive network} + +\item{areas}{\link{numeric} vector with the total area of the basin followed by the areas of the upstream basins in km^2^} + +\item{temperature}{\link{logical} \code{TRUE} if the meteorological data is temperature. if \code{FALSE} minimum output values are bounded to zero} +} +\value{ +Either a \link{matrix} containing the converted meteorological data +} +\description{ +Convert meteorological data from basin scale to sub-basin scale +} diff --git a/man/CreateCalibOptions.GRiwrmInputsModel.Rd b/man/CreateCalibOptions.GRiwrmInputsModel.Rd new file mode 100644 index 0000000..32e6a67 --- /dev/null +++ b/man/CreateCalibOptions.GRiwrmInputsModel.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateCalibOptions.GRiwrmInputsModel.R +\name{CreateCalibOptions.GRiwrmInputsModel} +\alias{CreateCalibOptions.GRiwrmInputsModel} +\title{Title} +\usage{ +\method{CreateCalibOptions}{GRiwrmInputsModel}(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{GRiwrmInputsModel}, see \code{\link{CreateInputsModel.GRiwrm}} for details.} + +\item{...}{further arguments passed to \code{\link[airGR]{CreateCalibOptions}}.} +} +\value{ +\emph{GRiwrmCalibOptions} object. +} +\description{ +Title +} diff --git a/man/CreateCalibOptions.InputsModel.Rd b/man/CreateCalibOptions.InputsModel.Rd new file mode 100644 index 0000000..ef3962d --- /dev/null +++ b/man/CreateCalibOptions.InputsModel.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateCalibOptions.InputsModel.R +\name{CreateCalibOptions.InputsModel} +\alias{CreateCalibOptions.InputsModel} +\title{Wrapper to \code{\link[airGR]{CreateCalibOptions}} for one sub-basin.} +\usage{ +\method{CreateCalibOptions}{InputsModel}(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{InputsModel}. See \code{\link[airGR]{CreateInputsModel}} for details} + +\item{...}{Arguments passed to \code{\link[airGR]{CreateCalibOptions}}} +} +\description{ +Wrapper to \code{\link[airGR]{CreateCalibOptions}} for one sub-basin. +} diff --git a/man/CreateCalibOptions.Rd b/man/CreateCalibOptions.Rd new file mode 100644 index 0000000..3a697ae --- /dev/null +++ b/man/CreateCalibOptions.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateCalibOptions.R +\name{CreateCalibOptions} +\alias{CreateCalibOptions} +\title{CreateCalibOptions both available for \emph{InputsModel} and \emph{GRwirmInputsModel} objects} +\usage{ +CreateCalibOptions(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{InputsModel} or \emph{GRwirmInputsModel}. See \code{\link{CreateInputsModel}} for details} + +\item{...}{further arguments passed to or from other methods} +} +\value{ +Either a \code{CalibOptions} or a \code{GRiwrmCalibOptions} object +} +\description{ +CreateCalibOptions both available for \emph{InputsModel} and \emph{GRwirmInputsModel} objects +} diff --git a/man/CreateController.Rd b/man/CreateController.Rd new file mode 100644 index 0000000..8e45c37 --- /dev/null +++ b/man/CreateController.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/createController.R +\name{CreateController} +\alias{CreateController} +\title{Create and add a controller in a supervisor} +\usage{ +CreateController(supervisor, ctrl.id, Y, U, FUN) +} +\arguments{ +\item{supervisor}{\code{Supervisor} object, see \link{CreateSupervisor}} + +\item{ctrl.id}{\link{character} id of the controller (see Details)} + +\item{Y}{\link{character} location of the controlled and/or measured variables in the model. See \link{createControl}} + +\item{U}{\link{character} location of the command variables in the model. See \link{createControl}} + +\item{FUN}{\link{function} controller logic which calculates \code{U} from \code{Y} (see Details)} +} +\value{ +\code{Controller} +} +\description{ +Create and add a controller in a supervisor +} +\details{ +\code{ctrl.id} parameter is a unique id for finding the controller in the supervisor. +If a controller with the same id already exists, it is overwritten by this new one. + +\code{FUN} parameter should be a function with one \link{numeric} parameter. +This parameter will receive the measured values of at \code{Y} locations as input +for the previous time step and returns calculated \code{U}. These \code{U} will then be applied +at their location for the current time step of calculation of the model. +} +\examples{ +# First create a Supervisor from a model +example("CreateSupervisor") +# A controller which usually releases 0.1 m3/s and provides +# extra release if the downstream flow is below 0.5 m3/s +logicDamRelease <- function(Y) max(0.5 - Y[1], 0.1) +CreateController(sv, "DamRelease", Y = c("54001"), U = c("54095"), FUN = logicDamRelease) +} diff --git a/man/CreateEmptyGRiwrmInputsModel.Rd b/man/CreateEmptyGRiwrmInputsModel.Rd new file mode 100644 index 0000000..0e1bcad --- /dev/null +++ b/man/CreateEmptyGRiwrmInputsModel.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.GRiwrm.R +\name{CreateEmptyGRiwrmInputsModel} +\alias{CreateEmptyGRiwrmInputsModel} +\title{Create an empty InputsModel object for \strong{airGRiwrm} nodes} +\usage{ +CreateEmptyGRiwrmInputsModel(griwrm) +} +\arguments{ +\item{griwrm}{a \code{GRiwrm} object (See \link{GRiwrm})} +} +\value{ +\emph{GRiwrmInputsModel} empty object +} +\description{ +Create an empty InputsModel object for \strong{airGRiwrm} nodes +} diff --git a/man/CreateInputsCrit.GRiwrmInputsModel.Rd b/man/CreateInputsCrit.GRiwrmInputsModel.Rd new file mode 100644 index 0000000..68d659f --- /dev/null +++ b/man/CreateInputsCrit.GRiwrmInputsModel.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsCrit.GRiwrmInputsModel.R +\name{CreateInputsCrit.GRiwrmInputsModel} +\alias{CreateInputsCrit.GRiwrmInputsModel} +\title{Create \emph{GRiwrmInputsCrit} object for \strong{airGRiwrm}.} +\usage{ +\method{CreateInputsCrit}{GRiwrmInputsModel}( + InputsModel, + FUN_CRIT = airGR::ErrorCrit_NSE, + RunOptions, + Qobs, + ... +) +} +\arguments{ +\item{InputsModel}{object of class \emph{GRiwrmInputsModel}, see \code{\link{CreateInputsModel.GRiwrm}} for details.} + +\item{FUN_CRIT}{[function (atomic or list)] error criterion function (e.g. \code{\link[airGR]{ErrorCrit_RMSE}}, \code{\link[airGR]{ErrorCrit_NSE}})} + +\item{RunOptions}{object of class \emph{GRiwrmRunOptions}, see \code{[CreateRunOptions.GRiwrm]} for details.} + +\item{Qobs}{matrix or data frame containing observed flows. Column names correspond to nodes ID} + +\item{...}{further arguments passed to \link[airGR:CreateInputsCrit]{airGR::CreateInputsCrit}.} +} +\value{ +Object of class \emph{GRiwrmInputsCrit} which is a list of \code{airGR::InputsCrit} objects (See \link[airGR:CreateInputsCrit]{airGR::CreateInputsCrit}) +} +\description{ +This function does the same operations as \link[airGR:CreateInputsCrit]{airGR::CreateInputsCrit} for all sub-basins of the GRiwrm model. +} diff --git a/man/CreateInputsCrit.InputsModel.Rd b/man/CreateInputsCrit.InputsModel.Rd new file mode 100644 index 0000000..2636e24 --- /dev/null +++ b/man/CreateInputsCrit.InputsModel.Rd @@ -0,0 +1,135 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsCrit.InputsModel.R +\name{CreateInputsCrit.InputsModel} +\alias{CreateInputsCrit.InputsModel} +\title{Wrapper to \code{\link[airGR]{CreateInputsCrit}} for one sub-basin.} +\usage{ +\method{CreateInputsCrit}{InputsModel}(InputsModel, FUN_CRIT, ...) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link[airGR]{CreateInputsModel}} for details} + +\item{FUN_CRIT}{[function (atomic or list)] error criterion function (e.g. \code{\link[airGR]{ErrorCrit_RMSE}}, \code{\link[airGR]{ErrorCrit_NSE}})} + +\item{...}{Further arguments for compatibility with S3 method} +} +\value{ +[list] object of class \emph{InputsCrit} containing the data required to evaluate the model outputs; it can include the following: + \tabular{ll}{ + \emph{$FUN_CRIT } \tab [function] error criterion function (e.g. \code{\link[airGR]{ErrorCrit_RMSE}}, \code{\link[airGR]{ErrorCrit_NSE}}) \cr + \emph{$Obs } \tab [numeric] series of observed variable(s) ([mm/time step] for discharge or SWE, [-] for SCA) \cr + \emph{$VarObs } \tab [character] names of the observed variable(s) \cr + \emph{$BoolCrit } \tab [boolean] boolean giving the time steps considered in the computation \cr + \emph{$transfo } \tab [character] name of the transformation (e.g. \code{""}, \code{"sqrt"}, \code{"log"}, \code{"inv"}, \code{"sort"}, \code{"boxcox"} or a number for power transformation) \cr + \emph{$epsilon } \tab [numeric] small value to add to all observations and simulations when \code{"log"} or \code{"inv"} transformations are used [same unit as \code{Obs}] \cr + \emph{$Weights } \tab [numeric] vector (same length as \code{VarObs}) giving the weights to use for elements of \code{FUN_CRIT} [-] \cr + } + +When \code{Weights = NULL}, \code{CreateInputsCrit} returns an object of class \emph{Single} that is a list such as the one described above. \cr +When \code{Weights} contains at least one \code{NULL} value and \code{Obs} contains a list of observations, \code{CreateInputsCrit} returns an object of class \emph{Multi} that is a list of lists such as the one described above. The \code{\link[airGR]{ErrorCrit}} function will then compute the different criteria prepared by \code{CreateInputsCrit}. \cr +When \code{Weights} is a list of at least 2 numerical values, \code{CreateInputsCrit} returns an object of class \emph{Compo} that is a list of lists such as the one described above. This object will be useful to compute composite criterion with the \code{\link[airGR]{ErrorCrit}} function. \cr +To calculate composite or multiple criteria, it is necessary to use the \code{ErrorCrit} function. The other \code{ErrorCrit_*} functions (e.g. \code{\link[airGR]{ErrorCrit_RMSE}}, \code{\link[airGR]{ErrorCrit_NSE}}) can only use objects of class \emph{Single} (and not \emph{Multi} or \emph{Compo}). \cr +} +\description{ +Creation of the \code{InputsCrit} object required to the \code{ErrorCrit_*} functions. This function is used to define whether the user wants to calculate a single criterion, multiple criteria in the same time, or a composite criterion, which averages several criteria. +} +\details{ +Users wanting to use \code{FUN_CRIT} functions that are not included in the package must create their own InputsCrit object accordingly. \cr \cr + +## --- Period of calculation + +Criteria can be calculated over discontinuous periods (i.e. only over winter periods, or when observed discharge is below a certain threshold). To do so, please indicate in \code{Bool_Crit} which indices must be used for calcullation. Discontinuous periods are allowed in the \code{Bool_Crit} argument. + +## --- Transformations + +Transformations are simple functions applied to the observed and simulated variables used in order to change their distribution. Transformations are often used in hydrology for modifying the weight put on errors made for high flows or low flows. The following transformations are available: \cr \cr +\itemize{ + \item \code{""}: no transformation is used (default case) + \item \code{"sqrt"}: squared root transformation + \item \code{"log"}: logarithmic transformation (see below regarding the specific case of KGE or KGE2) + \item \code{"inv"}: inverse transformation + \item \code{"sort"}: sort transformation (the simulated and observed variables are sorted from lowest to highest) + \item \code{"boxcox"}: Box-Cox transformation (see below for details) + \item numeric: power transformation (see below for details) +} +We do not advise computing KGE or KGE' with log-transformation as it might be wrongly influenced by discharge values close to 0 or 1 and the criterion value is dependent on the discharge unit. See Santos et al. (2018) for more details and alternative solutions (see the references list below). \cr \cr +In order to make sure that KGE and KGE2 remain dimensionless and are not impacted by zero values, the Box-Cox transformation (\code{transfo = "boxcox"}) uses the formulation given in Equation 10 of Santos et al. (2018). Lambda is set to 0.25 accordingly. \cr \cr +The syntax of the power transformation allows a numeric or a string of characters. For example for a squared transformation, the following can be used: \code{transfo = 2}, \code{transfo = "2"} or \code{transfo = "^2"}. Negative values are allowed. Fraction values are not allowed (e.g., \code{"-1/2"} must instead be written \code{"-0.5"}).\cr \cr + +## --- The epsilon value + +The epsilon value is useful when \code{"log"} or \code{"inv"} transformations are used (to avoid calculation of the inverse or of the logarithm of zero). If an epsilon value is provided, then it is added to the observed and simulated variable time series at each time step and before the application of a transformation. The epsilon value has no effect when the \code{"boxcox"} transformation is used. The impact of this value and a recommendation about the epsilon value to use (usually one hundredth of average observation) are discussed in Pushpalatha et al. (2012) for NSE and in Santos et al. (2018) for KGE and KGE'. \cr \cr + +## --- Single, multiple or composite criteria calculation + +Users can set the following arguments as atomic or list: \code{FUN_CRIT}, \code{Obs}, \code{VarObs}, \code{BoolCrit}, \code{transfo}, \code{Weights}. If the list format is chosen, all the lists must have the same length. \cr +Calculation of a single criterion (e.g. NSE computed on discharge) is prepared by providing to \code{CreateInputsCrit} arguments atomics only. \cr +Calculation of multiple criteria (e.g. NSE computed on discharge and RMSE computed on discharge) is prepared by providing to \code{CreateInputsCrit} arguments lists except for \code{Weights} that must be set as \code{NULL}. \cr +Calculation of a composite criterion (e.g. the average between NSE computed on discharge and NSE computed on log of discharge) is prepared by providing to \code{CreateInputsCrit} arguments lists including \code{Weights}. \cr +\code{\link[airGR]{ErrorCrit_RMSE}} cannot be used in a composite criterion since it is not a unitless value. +} +\examples{ +library(airGR) + +## loading catchment data +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, + Precip = BasinObs$P, PotEvap = BasinObs$E) + +## calibration 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")) + +## preparation of RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel, + IndPeriod_Run = Ind_Run) + +## simulation +Param <- c(X1 = 257.238, X2 = 1.012, X3 = 88.235, X4 = 2.208) +OutputsModel <- RunModel_GR4J(InputsModel = InputsModel, RunOptions = RunOptions, Param = Param) + +## single efficiency criterion: Nash-Sutcliffe Efficiency +InputsCritSingle <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, + InputsModel = InputsModel, RunOptions = RunOptions, + Obs = list(BasinObs$Qmm[Ind_Run]), + VarObs = "Q", transfo = "", + Weights = NULL) +str(InputsCritSingle) +invisible(ErrorCrit(InputsCrit = InputsCritSingle, OutputsModel = OutputsModel)) + +## 2 efficiency criteria: RMSE and Nash-Sutcliffe Efficiency +InputsCritMulti <- CreateInputsCrit(FUN_CRIT = list(ErrorCrit_RMSE, ErrorCrit_NSE), + InputsModel = InputsModel, RunOptions = RunOptions, + Obs = list(BasinObs$Qmm[Ind_Run], BasinObs$Qmm[Ind_Run]), + VarObs = list("Q", "Q"), transfo = list("", "sqrt"), + Weights = NULL) +str(InputsCritMulti) +invisible(ErrorCrit(InputsCrit = InputsCritMulti, OutputsModel = OutputsModel)) + +## efficiency composite criterion: Nash-Sutcliffe Efficiency mixing +## both raw and log-transformed flows +InputsCritCompo <- CreateInputsCrit(FUN_CRIT = list(ErrorCrit_NSE, ErrorCrit_NSE), + InputsModel = InputsModel, RunOptions = RunOptions, + Obs = list(BasinObs$Qmm[Ind_Run], BasinObs$Qmm[Ind_Run]), + VarObs = list("Q", "Q"), transfo = list("", "log"), + Weights = list(0.4, 0.6)) +str(InputsCritCompo) +invisible(ErrorCrit(InputsCrit = InputsCritCompo, OutputsModel = OutputsModel)) +} +\references{ +Pushpalatha, R., Perrin, C., Le Moine, N. and Andréassian, V. (2012). + A review of efficiency criteria suitable for evaluating low-flow simulations. + Journal of Hydrology, 420-421, 171-182, doi: 10.1016/j.jhydrol.2011.11.055. +\cr\cr +Santos, L., Thirel, G. and Perrin, C. (2018). + Technical note: Pitfalls in using log-transformed flows within the KGE criterion. + Hydrol. Earth Syst. Sci., 22, 4583-4591, doi: 10.5194/hess-22-4583-2018. +} +\seealso{ +\code{\link[airGR]{RunModel}}, \code{\link[airGR]{CreateInputsModel}}, \code{\link[airGR]{CreateRunOptions}}, \code{\link[airGR]{CreateCalibOptions}}, \code{\link[airGR]{ErrorCrit}} +} +\author{ +Olivier Delaigue, Laurent Coron, Guillaume Thirel +} diff --git a/man/CreateInputsCrit.Rd b/man/CreateInputsCrit.Rd new file mode 100644 index 0000000..c2178e6 --- /dev/null +++ b/man/CreateInputsCrit.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsCrit.R +\name{CreateInputsCrit} +\alias{CreateInputsCrit} +\title{Creation of the InputsCrit object required to the ErrorCrit functions} +\usage{ +CreateInputsCrit(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{InputsModel for \strong{airGRiwrm} (See \code{[CreateInputsModel.GRiwrm]}) or \strong{airGR} (See \code{\link[airGR]{CreateInputsModel}})} + +\item{...}{further arguments passed to or from other methods.} +} +\value{ +Either a \code{InputsCrit} or a \code{GRiwrmInputsCrit} object +} +\description{ +Creation of the InputsCrit object required to the ErrorCrit functions +} diff --git a/man/CreateInputsModel.GRiwrm.Rd b/man/CreateInputsModel.GRiwrm.Rd new file mode 100644 index 0000000..50d4563 --- /dev/null +++ b/man/CreateInputsModel.GRiwrm.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.GRiwrm.R +\name{CreateInputsModel.GRiwrm} +\alias{CreateInputsModel.GRiwrm} +\title{Create InputsModel object for a \strong{airGRiwrm} network} +\usage{ +\method{CreateInputsModel}{GRiwrm}(x, DatesR, Precip, PotEvap, Qobs, ...) +} +\arguments{ +\item{x}{GRiwrm object describing the diagram of the semi-distributed model, see \code{[GRiwrm]}.} + +\item{DatesR}{Vector of POSIXt observation time steps.} + +\item{Precip}{Matrix or data frame of numeric containing precipitation in mm. Column names correspond to node IDs.} + +\item{PotEvap}{Matrix or data frame of numeric containing potential evaporation in mm. Column names correspond to node IDs.} + +\item{Qobs}{Matrix or data frame of numeric containing potential observed flow in mm. Column names correspond to node IDs.} + +\item{...}{further arguments passed to \code{\link[airGR]{CreateInputsModel}}.} +} +\value{ +GRiwrmInputsModel object equivalent to \strong{airGR} InputsModel object for a semi-distributed model (See \code{\link[airGR]{CreateInputsModel}}) +} +\description{ +Create InputsModel object for a \strong{airGRiwrm} network +} diff --git a/man/CreateInputsModel.Rd b/man/CreateInputsModel.Rd new file mode 100644 index 0000000..213f986 --- /dev/null +++ b/man/CreateInputsModel.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.R +\name{CreateInputsModel} +\alias{CreateInputsModel} +\title{Generic function for creating \code{InputsModel} object for either \strong{airGR} or \strong{airGRiwrm}} +\usage{ +CreateInputsModel(x, ...) +} +\arguments{ +\item{x}{First parameter determining which InputsModel object is created} + +\item{...}{further arguments passed to or from other methods.} +} +\value{ +InputsModel or GRiwrmInputsObject object +} +\description{ +See the methods \link{CreateInputsModel.GRiwrm} for \strong{airGRiwrm} and \link{CreateInputsModel.default} for \strong{airGR}. +} diff --git a/man/CreateInputsModel.default.Rd b/man/CreateInputsModel.default.Rd new file mode 100644 index 0000000..3453379 --- /dev/null +++ b/man/CreateInputsModel.default.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.default.R +\name{CreateInputsModel.default} +\alias{CreateInputsModel.default} +\title{Wrapper for \code{\link[airGR]{CreateInputsModel}} for one sub-basin.} +\usage{ +\method{CreateInputsModel}{default}(x, ...) +} +\arguments{ +\item{x}{\link{function} hydrological model function (e.g. \code{\link[airGR]{RunModel_GR4J}}...)} + +\item{...}{arguments passed to \code{\link[airGR]{CreateInputsModel}}} +} +\description{ +Wrapper for \code{\link[airGR]{CreateInputsModel}} for one sub-basin. +} diff --git a/man/CreateOneGRiwrmInputsModel.Rd b/man/CreateOneGRiwrmInputsModel.Rd new file mode 100644 index 0000000..270a2ae --- /dev/null +++ b/man/CreateOneGRiwrmInputsModel.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.GRiwrm.R +\name{CreateOneGRiwrmInputsModel} +\alias{CreateOneGRiwrmInputsModel} +\title{Create one InputsModel for a \strong{airGRiwrm} node} +\usage{ +CreateOneGRiwrmInputsModel(id, griwrm, DatesR, Precip, PotEvap, Qobs) +} +\arguments{ +\item{id}{string of the node identifier} + +\item{griwrm}{See \code{[GRiwrm]}.} + +\item{DatesR}{vector of dates required to create the GR model and CemaNeige module inputs.} + +\item{Precip}{time series of potential evapotranspiration (catchment average) (mm/time step).} + +\item{PotEvap}{time series of potential evapotranspiration (catchment average) (mm/time step).} + +\item{Qobs}{Matrix or data frame of numeric containing observed flow (mm/time step). Column names correspond to node IDs.} +} +\value{ +\emph{InputsModel} object for one. +} +\description{ +Create one InputsModel for a \strong{airGRiwrm} node +} diff --git a/man/CreateRunOptions.GRiwrmInputsModel.Rd b/man/CreateRunOptions.GRiwrmInputsModel.Rd new file mode 100644 index 0000000..b0cf177 --- /dev/null +++ b/man/CreateRunOptions.GRiwrmInputsModel.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateRunOptions.GRiwrmInputsModel.R +\name{CreateRunOptions.GRiwrmInputsModel} +\alias{CreateRunOptions.GRiwrmInputsModel} +\title{Create \emph{GRiwrmRunOptions} object for running and calibrating model in \strong{airGRiwrm}.} +\usage{ +\method{CreateRunOptions}{GRiwrmInputsModel}(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{GRiwrmInputsModel}, see \code{\link{CreateInputsModel.GRiwrm}} for details.} + +\item{...}{further arguments passed to \code{\link[airGR]{CreateRunOptions}}.} +} +\value{ +\emph{GRiwrmRunOptions} object for running and calibrating model in \strong{airGRiwrm}. +} +\description{ +Create \emph{GRiwrmRunOptions} object for running and calibrating model in \strong{airGRiwrm}. +} diff --git a/man/CreateRunOptions.InputsModel.Rd b/man/CreateRunOptions.InputsModel.Rd new file mode 100644 index 0000000..9533022 --- /dev/null +++ b/man/CreateRunOptions.InputsModel.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateRunOptions.InputsModel.R +\name{CreateRunOptions.InputsModel} +\alias{CreateRunOptions.InputsModel} +\title{Wrapper for \code{\link[airGR]{CreateRunOptions}} for one sub-basin.} +\usage{ +\method{CreateRunOptions}{InputsModel}(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{InputsModel}, see \code{\link[airGR]{CreateInputsModel}} for details.} + +\item{...}{Arguments passed to \code{\link[airGR]{CreateRunOptions}}} +} +\description{ +Wrapper for \code{\link[airGR]{CreateRunOptions}} for one sub-basin. +} diff --git a/man/CreateRunOptions.Rd b/man/CreateRunOptions.Rd new file mode 100644 index 0000000..486ef6b --- /dev/null +++ b/man/CreateRunOptions.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateRunOptions.R +\name{CreateRunOptions} +\alias{CreateRunOptions} +\title{Create \emph{RunOptions} object for \strong{airGR} and \strong{airGRiwrm}. See \code{\link[airGR]{CreateRunOptions}} and \code{[CreateOptions.GRiwrmInputsModel]}.} +\usage{ +CreateRunOptions(InputsModel, ...) +} +\arguments{ +\item{InputsModel}{object of class \emph{InputsModel} (see \code{\link[airGR]{CreateInputsModel}}) or \emph{GRiwrmInputsModel} (See \code{[CreateInputsModel.GRiwrm]}).} + +\item{...}{further arguments passed to or from other methods.} +} +\value{ +Object of \emph{RunOptions} class family +} +\description{ +Create \emph{RunOptions} object for \strong{airGR} and \strong{airGRiwrm}. See \code{\link[airGR]{CreateRunOptions}} and \code{[CreateOptions.GRiwrmInputsModel]}. +} diff --git a/man/CreateSupervisor.Rd b/man/CreateSupervisor.Rd new file mode 100644 index 0000000..0d23061 --- /dev/null +++ b/man/CreateSupervisor.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateSupervisor.R +\name{CreateSupervisor} +\alias{CreateSupervisor} +\title{Create a Supervisor for handling regulation in a model} +\usage{ +CreateSupervisor(InputsModel, TimeStep = 1L) +} +\arguments{ +\item{InputsModel}{\code{GRiwrmInputsModel} The inputs of the basin model} + +\item{TimeStep}{\link{integer} The number of time steps between each supervision} +} +\value{ +\code{Supervisor} object +} +\description{ +Create a Supervisor for handling regulation in a model +} +\examples{ +data(Severn) +nodes <- Severn$BasinsInfo[, c("gauge_id", "downstream_id", "distance_downstream", "area")] +nodes$distance_downstream <- nodes$distance_downstream * 1000 # Conversion km -> m +nodes$model <- "RunModel_GR4J" +griwrm <- GRiwrm(nodes, + list(id = "gauge_id", + down = "downstream_id", + length = "distance_downstream")) +BasinsObs <- Severn$BasinsObs +DatesR <- BasinsObs[[1]]$DatesR +PrecipTot <- cbind(sapply(BasinsObs, function(x) {x$precipitation})) +PotEvapTot <- cbind(sapply(BasinsObs, function(x) {x$peti})) +Qobs <- cbind(sapply(BasinsObs, function(x) {x$discharge_spec})) +Precip <- ConvertMeteoSD(griwrm, PrecipTot) +PotEvap <- ConvertMeteoSD(griwrm, PotEvapTot) +InputsModel <- CreateInputsModel(griwrm, DatesR, Precip, PotEvap, Qobs) +sv <- CreateSupervisor(InputsModel) +} diff --git a/man/DiagramGRiwrm.Rd b/man/DiagramGRiwrm.Rd new file mode 100644 index 0000000..e3578de --- /dev/null +++ b/man/DiagramGRiwrm.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/DiagramGRiwrm.R +\name{DiagramGRiwrm} +\alias{DiagramGRiwrm} +\title{Display a diagram representing the network structure of a GRiwrm object} +\usage{ +DiagramGRiwrm(griwrm, display = TRUE, orientation = "LR") +} +\arguments{ +\item{griwrm}{the GRiwrm object to display.} + +\item{display}{if \code{TRUE} displays the diagram with \code{DiagrammeR::mermaid}, return the mermaid code otherwise.} + +\item{orientation}{Orientation of the graph. "LR" by default.} +} +\value{ +Mermaid code of the diagram id display is \code{FALSE}. +} +\description{ +Display a diagram representing the network structure of a GRiwrm object +} +\details{ +This function only works inside RStudio because the HTMLwidget produced by DiagrammeR +is not handled on some platforms +} +\examples{ +\dontrun{ +# Display diagram +DiagramGRiwrm(griwrm) +# Is the same as +DiagrammeR::mermaid(DiagramGRiwrm(griwrm, display = FALSE), width = "100\%", height = "100\%") +} + +} diff --git a/man/GRiwrm.Rd b/man/GRiwrm.Rd new file mode 100644 index 0000000..f404613 --- /dev/null +++ b/man/GRiwrm.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/GRiwrm.R +\name{GRiwrm} +\alias{GRiwrm} +\title{Generate a network description containing all hydraulic nodes and the description +of their connections} +\usage{ +GRiwrm( + db, + cols = list(id = "id", down = "down", length = "length", model = "model", area = + "area"), + keep_all = FALSE +) +} +\arguments{ +\item{db}{a \link{data.frame} containing the description of the network (See details)} + +\item{cols}{named list or vector for matching columns of \code{db} parameter. By default, mandatory columns names are: \code{id}, \code{down}, \code{length}. But other names can be handled with a named list or vector containing items defined as \code{"required name" = "column name in db"}} + +\item{keep_all}{keep all column of \code{db} or keep only columns defined in \code{cols}} +} +\value{ +\code{GRiwrm} class object containing the description of diagram of the semi-distributed catchment model +} +\description{ +Generate a network description containing all hydraulic nodes and the description +of their connections +} +\details{ +\code{db} is a \link{data.frame} which at least contains in its columns: +\itemize{ +\item a node identifier (column \code{id}), +\item the identifier and the hydraulic distance to the downstream node (\link{character} columns \code{down} and \link{numeric} columns \code{length} in meters). The last downstream node should have fields \code{down} and \code{length} set to \code{NA}, +\item the area of the basin (\link{numeric} column \code{area} in km^2^) +\item the hydrological model to use if so (\link{character} column \code{model}). +} +} diff --git a/man/OutputsModelQsim.Rd b/man/OutputsModelQsim.Rd new file mode 100644 index 0000000..f17fb40 --- /dev/null +++ b/man/OutputsModelQsim.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{OutputsModelQsim} +\alias{OutputsModelQsim} +\title{Create a data.frame with simulated flows at each nodes of the \link{GRiwrm} object} +\usage{ +OutputsModelQsim(InputsModel, OutputsModel, IndPeriod_Run) +} +\arguments{ +\item{InputsModel}{a \code{GRiwrmInputsModel} object created by \link{CreateInputsModel.GRiwrm}} + +\item{OutputsModel}{a \code{GRiwrmOutputsModel} object created by \link{RunModel.GRiwrmInputsModel} or \link{RunModel.Supervisor}} + +\item{IndPeriod_Run}{an \link{integer} vector (See \link[airGR:CreateRunOptions]{airGR::CreateRunOptions})} +} +\value{ +a \link{data.frame} containing the simulated flows (in m3/time step) structured with the following columns: +\itemize{ +\item 'DatesR' containing the timestamps of the time series +\item one column by node with the simulated flows +} +} +\description{ +Create a data.frame with simulated flows at each nodes of the \link{GRiwrm} object +} +\details{ +This function can only be called inside \link{RunModel.GRiwrmInputsModel} or \link{RunModel.Supervisor} +because it needs a \code{GRiwrmInputsModel} object internally modified by these functions +(\code{Qupstream} updated with simulated flows). +} diff --git a/man/RunModel.GR.Rd b/man/RunModel.GR.Rd new file mode 100644 index 0000000..3c50321 --- /dev/null +++ b/man/RunModel.GR.Rd @@ -0,0 +1,67 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.GR.R +\name{RunModel.GR} +\alias{RunModel.GR} +\title{Run rainfall-runoff part of a sub-basin model} +\usage{ +\method{RunModel}{GR}(x, RunOptions, Param, ...) +} +\arguments{ +\item{x}{\code{InputsModel} used as \code{InputsModel} parameter for \link[airGR:RunModel]{airGR::RunModel}} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link[airGR]{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of model parameters (See details for SD lag model)} + +\item{...}{further arguments passed to or from other methods} +} +\value{ +[list] see \code{\link[airGR]{RunModel_GR4J}} or \code{\link[airGR]{RunModel_CemaNeigeGR4J}} for details. + +If \code{InputsModel} parameter has been created for using a semi-distributed (SD) lag model (See \code{\link[airGR]{CreateInputsModel}}), the list value contains an extra item named \code{QsimDown} which is a numeric series of simulated discharge [mm/time step] related to the run-off contribution of the downstream sub-catchment. +} +\description{ +Function which performs a single model run with the provided function over the selected period. +} +\details{ +If \code{InputsModel} parameter has been created for using a semi-distributed (SD) lag model (See \code{\link[airGR]{CreateInputsModel}}), the first item of \code{Param} parameter should contain a constant lag parameter expressed as a velocity in m/s, parameters for the hydrological model are then shift one position to the right. +} +\examples{ +library(airGR) + +## loading catchment data +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- 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")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, + InputsModel = InputsModel, IndPeriod_Run = Ind_Run) + +## simulation +Param <- c(X1 = 734.568, X2 = -0.840, X3 = 109.809, X4 = 1.971) +OutputsModel <- RunModel(InputsModel = InputsModel, + RunOptions = RunOptions, Param = Param, + FUN_MOD = RunModel_GR4J) + +## results preview +plot(OutputsModel, Qobs = BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, + RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) +} +\seealso{ +\code{\link[airGR]{RunModel_GR4J}}, \code{\link[airGR]{RunModel_CemaNeigeGR4J}}, \code{\link[airGR]{CreateInputsModel}}, +\code{\link[airGR]{CreateRunOptions}}, \code{\link[airGR]{CreateIniStates}}. +} +\author{ +Laurent Coron, Olivier Delaigue +} diff --git a/man/RunModel.GRiwrmInputsModel.Rd b/man/RunModel.GRiwrmInputsModel.Rd new file mode 100644 index 0000000..933efa8 --- /dev/null +++ b/man/RunModel.GRiwrmInputsModel.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.GRiwrmInputsModel.R +\name{RunModel.GRiwrmInputsModel} +\alias{RunModel.GRiwrmInputsModel} +\title{RunModel function for GRiwrmInputsModel object} +\usage{ +\method{RunModel}{GRiwrmInputsModel}(x, RunOptions, Param, ...) +} +\arguments{ +\item{x}{object of class \emph{GRiwrmInputsModel}, see \code{[CreateInputsModel.GRiwrm]} for details.} + +\item{RunOptions}{object of class \emph{GRiwrmRunOptions}, see \code{[CreateRunOptions.GRiwrm]} for details.} + +\item{Param}{list of parameter. The list item names are the IDs of the sub-basins. Each item is a vector of numerical parameters.} + +\item{...}{Mandatory for S3 method signature function compatibility with generic.} +} +\value{ +\emph{GRiwrmOutputsModel} object which is a list of \emph{OutputsModel} objects (See \code{\link[airGR]{RunModel}}) for each node of the semi-distributed model. +} +\description{ +RunModel function for GRiwrmInputsModel object +} diff --git a/man/RunModel.InputsModel.Rd b/man/RunModel.InputsModel.Rd new file mode 100644 index 0000000..6e97966 --- /dev/null +++ b/man/RunModel.InputsModel.Rd @@ -0,0 +1,69 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.InputsModel.R +\name{RunModel.InputsModel} +\alias{RunModel.InputsModel} +\title{Wrapper for \code{\link[airGR]{RunModel}} for one sub-basin.} +\usage{ +\method{RunModel}{InputsModel}(x, RunOptions, Param, FUN_MOD = NULL, ...) +} +\arguments{ +\item{x}{\code{InputsModel} used as \code{InputsModel} parameter for \link[airGR:RunModel]{airGR::RunModel}} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link[airGR]{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of model parameters (See details for SD lag model)} + +\item{FUN_MOD}{[function] hydrological model function (e.g. \code{\link[airGR]{RunModel_GR4J}}, \code{\link[airGR]{RunModel_CemaNeigeGR4J}})} + +\item{...}{Further arguments for compatibility with S3 method} +} +\value{ +[list] see \code{\link[airGR]{RunModel_GR4J}} or \code{\link[airGR]{RunModel_CemaNeigeGR4J}} for details. + +If \code{InputsModel} parameter has been created for using a semi-distributed (SD) lag model (See \code{\link[airGR]{CreateInputsModel}}), the list value contains an extra item named \code{QsimDown} which is a numeric series of simulated discharge [mm/time step] related to the run-off contribution of the downstream sub-catchment. +} +\description{ +Function which performs a single model run with the provided function over the selected period. +} +\details{ +If \code{InputsModel} parameter has been created for using a semi-distributed (SD) lag model (See \code{\link[airGR]{CreateInputsModel}}), the first item of \code{Param} parameter should contain a constant lag parameter expressed as a velocity in m/s, parameters for the hydrological model are then shift one position to the right. +} +\examples{ +library(airGR) + +## loading catchment data +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- 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")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, + InputsModel = InputsModel, IndPeriod_Run = Ind_Run) + +## simulation +Param <- c(X1 = 734.568, X2 = -0.840, X3 = 109.809, X4 = 1.971) +OutputsModel <- RunModel(InputsModel = InputsModel, + RunOptions = RunOptions, Param = Param, + FUN_MOD = RunModel_GR4J) + +## results preview +plot(OutputsModel, Qobs = BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, + RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) +} +\seealso{ +\code{\link[airGR]{RunModel_GR4J}}, \code{\link[airGR]{RunModel_CemaNeigeGR4J}}, \code{\link[airGR]{CreateInputsModel}}, +\code{\link[airGR]{CreateRunOptions}}, \code{\link[airGR]{CreateIniStates}}. +} +\author{ +Laurent Coron, Olivier Delaigue +} diff --git a/man/RunModel.Rd b/man/RunModel.Rd new file mode 100644 index 0000000..495e3b8 --- /dev/null +++ b/man/RunModel.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.R +\name{RunModel} +\alias{RunModel} +\title{RunModel function for both \strong{airGR} InputsModel and GRiwrmInputsModel object} +\usage{ +RunModel(x, ...) +} +\arguments{ +\item{x}{object of class \emph{InputsModel} or \emph{GRiwrmInputsModel}. See \code{\link{CreateInputsModel}} for details} + +\item{...}{further arguments passed to or from other methods} +} +\value{ +Either a \link{list} of OutputsModel object (for GRiwrmInputsModel) or an OutputsModel object (for InputsModel) +} +\description{ +RunModel function for both \strong{airGR} InputsModel and GRiwrmInputsModel object +} diff --git a/man/RunModel.SD.Rd b/man/RunModel.SD.Rd new file mode 100644 index 0000000..069212b --- /dev/null +++ b/man/RunModel.SD.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.SD.R +\name{RunModel.SD} +\alias{RunModel.SD} +\title{Run SD Model from run-off model outputs} +\usage{ +\method{RunModel}{SD}(x, RunOptions, Param, QsimDown, ...) +} +\arguments{ +\item{x}{\code{InputsModel} used as \code{InputsModel} parameter for \link[airGR:RunModel_Lag]{airGR::RunModel_Lag}} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link[airGR]{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 1 parameter + \tabular{ll}{ + Velocity \tab Mean flow velocity [m/s] + } + } + +\item{QsimDown}{a \link{numeric} corresponding to the runoff of the sub-basin (Typically the \code{Qsim} outputs of the GR model)} + +\item{...}{further arguments passed to or from other methods} +} +\value{ +\code{OutputsModel} object. See \link[airGR:RunModel_Lag]{airGR::RunModel_Lag} +} +\description{ +Run SD Model from run-off model outputs +} diff --git a/man/RunModel.Supervisor.Rd b/man/RunModel.Supervisor.Rd new file mode 100644 index 0000000..0d2f642 --- /dev/null +++ b/man/RunModel.Supervisor.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RunModel.Supervisor.R +\name{RunModel.Supervisor} +\alias{RunModel.Supervisor} +\title{RunModel function for GRiwrmInputsModel object} +\usage{ +\method{RunModel}{Supervisor}(x, RunOptions, Param, ...) +} +\arguments{ +\item{x}{object of class \code{Supervisor}, see \link{CreateSupervisor} for details.} + +\item{RunOptions}{object of class \emph{GRiwrmRunOptions}, see \code{[CreateRunOptions.GRiwrm]} for details.} + +\item{Param}{list of parameter. The list item names are the IDs of the sub-basins. Each item is a vector of numerical parameters.} + +\item{...}{Mandatory for S3 method signature function compatibility with generic.} +} +\value{ +\emph{GRiwrmOutputsModel} object which is a list of \emph{OutputsModel} objects (See \code{\link[airGR]{RunModel}}) for each node of the semi-distributed model. +} +\description{ +RunModel function for GRiwrmInputsModel object +} diff --git a/man/Severn.Rd b/man/Severn.Rd new file mode 100644 index 0000000..b1a0c37 --- /dev/null +++ b/man/Severn.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Severn.R +\docType{data} +\name{Severn} +\alias{Severn} +\title{Catchment Attributes and Hydro-Meteorological Timeseries for some gauging stations on the Severn River} +\format{ +a \link{list} with 2 items: +\itemize{ +\item "BasinsInfo" which contains a \link{data.frame} with Gauging station identifier, name, coordinates (GPS), area (km^2^), mean elevation (m), station type, flow period start and end, the bank full flow (m^3^/s), the identifier of the following downstream station and the distance to the following downstream station +\item "BasinObs" which contains a \link{list} with an item by gauging station which contains a \link{data.frame} with \link{POSIXct} dates, precipitations (mm), potential evapotranspiration (mm) and measured flow (mm) +} +} +\source{ +\url{https://doi.org/10.5285/8344E4F3-D2EA-44F5-8AFA-86D2987543A9} +} +\usage{ +Severn +} +\description{ +Catchment Attributes and Hydro-Meteorological Timeseries for some gauging stations on the Severn River +} +\keyword{datasets} diff --git a/man/UpdateQsimUpstream.Rd b/man/UpdateQsimUpstream.Rd new file mode 100644 index 0000000..f615381 --- /dev/null +++ b/man/UpdateQsimUpstream.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/UpdateQsimUpstream.R +\name{UpdateQsimUpstream} +\alias{UpdateQsimUpstream} +\title{Update InputsModel$Qupstream with simulated upstream flows provided by GRiwrmOutputsModels object.} +\usage{ +UpdateQsimUpstream(InputsModel, IndPeriod_Run, OutputsModel) +} +\arguments{ +\item{InputsModel}{\emph{InputsModel} object. See \code{\link[airGR]{CreateInputsModel}}} + +\item{IndPeriod_Run}{numeric index of period to be used for the model run (-)} + +\item{OutputsModel}{\emph{GRiwrmOutputsModel} object provided by \link{RunModel.GRiwrmInputsModel}.} +} +\value{ +\code{InputsModel} object with updated \code{Qupstream} +} +\description{ +This function is used by \link{RunModel.GRiwrmInputsModel} and \link{Calibration.GRiwrmInputsModel} in order to provide upstream simulated flows to a node. +} diff --git a/man/checkRunModelParameters.Rd b/man/checkRunModelParameters.Rd new file mode 100644 index 0000000..01398f0 --- /dev/null +++ b/man/checkRunModelParameters.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{checkRunModelParameters} +\alias{checkRunModelParameters} +\title{Check the parameters of RunModel methods} +\usage{ +checkRunModelParameters(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{a \code{GRiwrmInputsModel} object (See \link{CreateInputsModel.GRiwrm})} + +\item{RunOptions}{a \code{GRiwrmRunOptions} object (See \link{CreateRunOptions.GRiwrmInputsModel})} + +\item{Param}{a \link{list} of \link{numeric} containing model parameters of each node of the network} +} +\description{ +Stop the execution if an error is detected. +} diff --git a/man/createControl.Rd b/man/createControl.Rd new file mode 100644 index 0000000..51d4fc2 --- /dev/null +++ b/man/createControl.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/createController.R +\name{createControl} +\alias{createControl} +\title{Create a list of controls for command (U) and controlled variables (Y)} +\usage{ +createControl(locations) +} +\arguments{ +\item{locations}{vector of \link{character} containing the location of the variable in the model (see details)} +} +\value{ +a \link{matrix} with each column is the location of the variables and the rows +the values of the variable for the current time steps (empty by default) +} +\description{ +Create a list of controls for command (U) and controlled variables (Y) +} +\examples{ +# For pointing the discharge at the oulet of basins "54095" and "54002" +createControl(c("54095", "54002")) +} diff --git a/man/doSupervision.Rd b/man/doSupervision.Rd new file mode 100644 index 0000000..75c86a9 --- /dev/null +++ b/man/doSupervision.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{doSupervision} +\alias{doSupervision} +\title{Do the supervision for the current time step} +\usage{ +doSupervision(supervisor) +} +\arguments{ +\item{supervisor}{\code{Supervisor} (See \link{CreateSupervisor})} +} +\description{ +Do the supervision for the current time step +} diff --git a/man/getDataFromLocation.Rd b/man/getDataFromLocation.Rd new file mode 100644 index 0000000..92e3c6f --- /dev/null +++ b/man/getDataFromLocation.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{getDataFromLocation} +\alias{getDataFromLocation} +\title{Retrieve data in the model for the current time steps} +\usage{ +getDataFromLocation(loc, sv) +} +\arguments{ +\item{loc}{location of the data} + +\item{sv}{a \code{Supervisor} (See \link{CreateSupervisor})} +} +\value{ +\link{numeric} retrieved data at the location +} +\description{ +This function should be call inside a Supervisor +} diff --git a/man/getModelTimeStep.Rd b/man/getModelTimeStep.Rd new file mode 100644 index 0000000..28acddb --- /dev/null +++ b/man/getModelTimeStep.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateInputsModel.GRiwrm.R +\name{getModelTimeStep} +\alias{getModelTimeStep} +\title{Check time steps of the model of all the nodes and return the time step in seconds} +\usage{ +getModelTimeStep(InputsModel) +} +\arguments{ +\item{InputsModel}{a \code{GRiwrmInputsModel}} +} +\value{ +A \link{numeric} representing the time step in seconds +} +\description{ +This function is called inside \link{CreateInputsModel.GRiwrm} for defining the time step of the big model. +} diff --git a/man/getNoSD_Ids.Rd b/man/getNoSD_Ids.Rd new file mode 100644 index 0000000..70d03f7 --- /dev/null +++ b/man/getNoSD_Ids.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{getNoSD_Ids} +\alias{getNoSD_Ids} +\title{Id of sub-basins not using SD model} +\usage{ +getNoSD_Ids(InputsModel) +} +\arguments{ +\item{InputsModel}{\code{GRiwrmInputsModel} object} +} +\value{ +\link{character} IDs of the sub-basins not using SD model +} +\description{ +Id of sub-basins not using SD model +} diff --git a/man/getNodeRanking.Rd b/man/getNodeRanking.Rd new file mode 100644 index 0000000..9894acb --- /dev/null +++ b/man/getNodeRanking.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/GRiwrm.R +\name{getNodeRanking} +\alias{getNodeRanking} +\title{Sort the nodes from upstream to downstream.} +\usage{ +getNodeRanking(griwrm) +} +\arguments{ +\item{griwrm}{See \code{[GRiwrm]}.} +} +\value{ +vector with the ordered node names. +} +\description{ +Sort the nodes from upstream to downstream. +} diff --git a/man/getSD_Ids.Rd b/man/getSD_Ids.Rd new file mode 100644 index 0000000..77c9779 --- /dev/null +++ b/man/getSD_Ids.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{getSD_Ids} +\alias{getSD_Ids} +\title{Id of sub-basins using SD model} +\usage{ +getSD_Ids(InputsModel) +} +\arguments{ +\item{InputsModel}{\code{GRiwrmInputsModel} object} +} +\value{ +\link{character} IDs of the sub-basins using SD model +} +\description{ +Id of sub-basins using SD model +} diff --git a/man/plot.Qm3s.Rd b/man/plot.Qm3s.Rd new file mode 100644 index 0000000..d5b3b93 --- /dev/null +++ b/man/plot.Qm3s.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/plot.Qm3s.R +\name{plot.Qm3s} +\alias{plot.Qm3s} +\title{Plot a \code{Qm3s} object (time series of simulated flows)} +\usage{ +\method{plot}{Qm3s}( + x, + type = "l", + xlab = "Date", + ylab = "Flow (m3/s)", + main = "Simulated flows", + col = rainbow(ncol(x) - 1), + legend = colnames(x)[-1], + legend.cex = 0.7, + lty = 1, + ... +) +} +\arguments{ +\item{x}{a \link{data.frame} with a first column with \link{POSIXt} dates and followings columns with flows at each node of the network} + +\item{type}{1-character string (See \link{plot.default}), default "l"} + +\item{xlab}{a label for the x axis, defaults to "Date"} + +\item{ylab}{a label for the y axis, defaults to "Flow (m3/s)"} + +\item{main}{a main title for the plot, defaults to "Simulated flows"} + +\item{col}{plotting color (See \link{par}), defaults to rainbow colors} + +\item{legend}{See parameter \code{legend} of \link{legend}. Set to \link{NULL} to not display the legend} + +\item{legend.cex}{\code{cex} parameter for the text of the legend (See \link{par})} + +\item{lty}{The line type (See \link{par})} + +\item{...}{Further arguments to pass to the \link{matplot} functions} +} +\description{ +Plot a \code{Qm3s} object (time series of simulated flows) +} diff --git a/man/setDataToLocation.Rd b/man/setDataToLocation.Rd new file mode 100644 index 0000000..5a3fc9c --- /dev/null +++ b/man/setDataToLocation.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{setDataToLocation} +\alias{setDataToLocation} +\title{Write data to model input for the current time step} +\usage{ +setDataToLocation(ctrlr, sv) +} +\arguments{ +\item{ctrlr}{a \code{Controller} object (See \link{CreateController})} + +\item{sv}{\code{Supervisor} (See \link{CreateSupervisor})} +} +\value{ +\link{NULL} +} +\description{ +Write data to model input for the current time step +} -- GitLab