From ec2371cae67fd5f35c8c11c006aba0c3d41917e3 Mon Sep 17 00:00:00 2001 From: Olivier Delaigue <olivier.delaigue@irstea.fr> Date: Thu, 9 Apr 2015 18:00:49 +0200 Subject: [PATCH] =?UTF-8?q?[0.7.4]=20D=C3=A9pot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Olivier Delaigue <olivier.delaigue@irstea.fr> --- .Rbuildignore | 2 + .gitignore | 6 + DESCRIPTION | 17 + NAMESPACE | 31 ++ R/BasinData.R | 42 ++ R/Calibration.R | 29 ++ R/Calibration_HBAN.R | 401 ++++++++++++++++++ R/Calibration_optim.R | 149 +++++++ R/CreateCalibOptions.R | 226 +++++++++++ R/CreateInputsCrit.R | 81 ++++ R/CreateInputsModel.R | 156 +++++++ R/CreateRunOptions.R | 260 ++++++++++++ R/DataAltiExtrapolation_HBAN.R | 540 +++++++++++++++++++++++++ R/ErrorCrit.R | 22 + R/ErrorCrit_KGE.R | 122 ++++++ R/ErrorCrit_KGE2.R | 124 ++++++ R/ErrorCrit_NSE.R | 87 ++++ R/ErrorCrit_RMSE.R | 81 ++++ R/PEdaily_Oudin.R | 58 +++ R/RunModel.R | 22 + R/RunModel_CemaNeige.R | 131 ++++++ R/RunModel_CemaNeigeGR4J.R | 208 ++++++++++ R/RunModel_CemaNeigeGR5J.R | 210 ++++++++++ R/RunModel_CemaNeigeGR6J.R | 211 ++++++++++ R/RunModel_GR4J.R | 128 ++++++ R/RunModel_GR5J.R | 131 ++++++ R/RunModel_GR6J.R | 132 ++++++ R/TransfoParam.R | 19 + R/TransfoParam_CemaNeige.R | 37 ++ R/TransfoParam_GR4J.R | 41 ++ R/TransfoParam_GR5J.R | 45 +++ R/TransfoParam_GR6J.R | 47 +++ R/plot_OutputsModel.R | 331 +++++++++++++++ airGR.Rproj | 17 + data/L0123001.rda | Bin 0 -> 83676 bytes data/L0123002.rda | Bin 0 -> 101200 bytes data/L0123003.rda | Bin 0 -> 291924 bytes man/BasinInfo.Rd | 21 + man/BasinObs.Rd | 22 + man/Calibration.Rd | 94 +++++ man/Calibration_HBAN.Rd | 127 ++++++ man/Calibration_optim.Rd | 103 +++++ man/CreateCalibOptions.Rd | 128 ++++++ man/CreateInputsCrit.Rd | 112 +++++ man/CreateInputsModel.Rd | 89 ++++ man/CreateRunOptions.Rd | 121 ++++++ man/DataAltiExtrapolation_HBAN.Rd | 64 +++ man/ErrorCrit.Rd | 92 +++++ man/ErrorCrit_KGE.Rd | 50 +++ man/ErrorCrit_KGE2.Rd | 53 +++ man/ErrorCrit_NSE.Rd | 48 +++ man/ErrorCrit_RMSE.Rd | 43 ++ man/PEdaily_Oudin.Rd | 36 ++ man/RunModel.Rd | 61 +++ man/RunModel_CemaNeige.Rd | 84 ++++ man/RunModel_CemaNeigeGR4J.Rd | 112 +++++ man/RunModel_CemaNeigeGR5J.Rd | 115 ++++++ man/RunModel_CemaNeigeGR6J.Rd | 83 ++++ man/RunModel_GR4J.Rd | 92 +++++ man/RunModel_GR5J.Rd | 95 +++++ man/RunModel_GR6J.Rd | 96 +++++ man/TransfoParam.Rd | 45 +++ man/TransfoParam_CemaNeige.Rd | 43 ++ man/TransfoParam_GR4J.Rd | 43 ++ man/TransfoParam_GR5J.Rd | 43 ++ man/TransfoParam_GR6J.Rd | 43 ++ man/airGR.Rd | 53 +++ man/plot_OutputsModel.Rd | 37 ++ src-i386/airGR.dll | Bin 0 -> 24064 bytes src-i386/frun_CEMANEIGE.f | 128 ++++++ src-i386/frun_CEMANEIGE.o | Bin 0 -> 1095 bytes src-i386/frun_GR4J.f | 225 +++++++++++ src-i386/frun_GR4J.o | Bin 0 -> 2505 bytes src-i386/frun_GR5J.f | 226 +++++++++++ src-i386/frun_GR5J.o | Bin 0 -> 2433 bytes src-i386/frun_GR6J.f | 249 ++++++++++++ src-i386/frun_GR6J.o | Bin 0 -> 2977 bytes src-i386/utils.f | 272 +++++++++++++ src-i386/utils.o | Bin 0 -> 2548 bytes src-x64/airGR.dll | Bin 0 -> 28672 bytes src-x64/frun_CEMANEIGE.f | 128 ++++++ src-x64/frun_CEMANEIGE.o | Bin 0 -> 1498 bytes src-x64/frun_GR4J.f | 225 +++++++++++ src-x64/frun_GR4J.o | Bin 0 -> 2975 bytes src-x64/frun_GR5J.f | 226 +++++++++++ src-x64/frun_GR5J.o | Bin 0 -> 2875 bytes src-x64/frun_GR6J.f | 249 ++++++++++++ src-x64/frun_GR6J.o | Bin 0 -> 3415 bytes src-x64/utils.f | 272 +++++++++++++ src-x64/utils.o | Bin 0 -> 2944 bytes src/frun_CEMANEIGE.f | 128 ++++++ src/frun_GR4J.f | 225 +++++++++++ src/frun_GR5J.f | 226 +++++++++++ src/frun_GR6J.f | 249 ++++++++++++ src/utils.f | 272 +++++++++++++ tests/example_Calibration.R | 47 +++ tests/example_Calibration_HBAN.R | 46 +++ tests/example_Calibration_optim.R | 45 +++ tests/example_ErrorCrit.R | 60 +++ tests/example_RunModel.R | 29 ++ tests/example_RunModel_CemaNeige.R | 25 ++ tests/example_RunModel_CemaNeigeGR4J.R | 31 ++ tests/example_RunModel_CemaNeigeGR5J.R | 31 ++ tests/example_RunModel_CemaNeigeGR6J.R | 31 ++ tests/example_RunModel_GR4J.R | 28 ++ tests/example_RunModel_GR5J.R | 28 ++ tests/example_RunModel_GR6J.R | 28 ++ tests/example_TransfoParam.R | 15 + tests/example_TransfoParam_CemaNeige.R | 15 + tests/example_TransfoParam_GR4J.R | 15 + tests/example_TransfoParam_GR5J.R | 15 + tests/example_TransfoParam_GR6J.R | 15 + tests/example_plot_OutputsModel.R | 54 +++ 113 files changed, 10250 insertions(+) create mode 100644 .Rbuildignore create mode 100644 .gitignore create mode 100644 DESCRIPTION create mode 100644 NAMESPACE create mode 100644 R/BasinData.R create mode 100644 R/Calibration.R create mode 100644 R/Calibration_HBAN.R create mode 100644 R/Calibration_optim.R create mode 100644 R/CreateCalibOptions.R create mode 100644 R/CreateInputsCrit.R create mode 100644 R/CreateInputsModel.R create mode 100644 R/CreateRunOptions.R create mode 100644 R/DataAltiExtrapolation_HBAN.R create mode 100644 R/ErrorCrit.R create mode 100644 R/ErrorCrit_KGE.R create mode 100644 R/ErrorCrit_KGE2.R create mode 100644 R/ErrorCrit_NSE.R create mode 100644 R/ErrorCrit_RMSE.R create mode 100644 R/PEdaily_Oudin.R create mode 100644 R/RunModel.R create mode 100644 R/RunModel_CemaNeige.R create mode 100644 R/RunModel_CemaNeigeGR4J.R create mode 100644 R/RunModel_CemaNeigeGR5J.R create mode 100644 R/RunModel_CemaNeigeGR6J.R create mode 100644 R/RunModel_GR4J.R create mode 100644 R/RunModel_GR5J.R create mode 100644 R/RunModel_GR6J.R create mode 100644 R/TransfoParam.R create mode 100644 R/TransfoParam_CemaNeige.R create mode 100644 R/TransfoParam_GR4J.R create mode 100644 R/TransfoParam_GR5J.R create mode 100644 R/TransfoParam_GR6J.R create mode 100644 R/plot_OutputsModel.R create mode 100644 airGR.Rproj create mode 100644 data/L0123001.rda create mode 100644 data/L0123002.rda create mode 100644 data/L0123003.rda create mode 100644 man/BasinInfo.Rd create mode 100644 man/BasinObs.Rd create mode 100644 man/Calibration.Rd create mode 100644 man/Calibration_HBAN.Rd create mode 100644 man/Calibration_optim.Rd create mode 100644 man/CreateCalibOptions.Rd create mode 100644 man/CreateInputsCrit.Rd create mode 100644 man/CreateInputsModel.Rd create mode 100644 man/CreateRunOptions.Rd create mode 100644 man/DataAltiExtrapolation_HBAN.Rd create mode 100644 man/ErrorCrit.Rd create mode 100644 man/ErrorCrit_KGE.Rd create mode 100644 man/ErrorCrit_KGE2.Rd create mode 100644 man/ErrorCrit_NSE.Rd create mode 100644 man/ErrorCrit_RMSE.Rd create mode 100644 man/PEdaily_Oudin.Rd create mode 100644 man/RunModel.Rd create mode 100644 man/RunModel_CemaNeige.Rd create mode 100644 man/RunModel_CemaNeigeGR4J.Rd create mode 100644 man/RunModel_CemaNeigeGR5J.Rd create mode 100644 man/RunModel_CemaNeigeGR6J.Rd create mode 100644 man/RunModel_GR4J.Rd create mode 100644 man/RunModel_GR5J.Rd create mode 100644 man/RunModel_GR6J.Rd create mode 100644 man/TransfoParam.Rd create mode 100644 man/TransfoParam_CemaNeige.Rd create mode 100644 man/TransfoParam_GR4J.Rd create mode 100644 man/TransfoParam_GR5J.Rd create mode 100644 man/TransfoParam_GR6J.Rd create mode 100644 man/airGR.Rd create mode 100644 man/plot_OutputsModel.Rd create mode 100644 src-i386/airGR.dll create mode 100644 src-i386/frun_CEMANEIGE.f create mode 100644 src-i386/frun_CEMANEIGE.o create mode 100644 src-i386/frun_GR4J.f create mode 100644 src-i386/frun_GR4J.o create mode 100644 src-i386/frun_GR5J.f create mode 100644 src-i386/frun_GR5J.o create mode 100644 src-i386/frun_GR6J.f create mode 100644 src-i386/frun_GR6J.o create mode 100644 src-i386/utils.f create mode 100644 src-i386/utils.o create mode 100644 src-x64/airGR.dll create mode 100644 src-x64/frun_CEMANEIGE.f create mode 100644 src-x64/frun_CEMANEIGE.o create mode 100644 src-x64/frun_GR4J.f create mode 100644 src-x64/frun_GR4J.o create mode 100644 src-x64/frun_GR5J.f create mode 100644 src-x64/frun_GR5J.o create mode 100644 src-x64/frun_GR6J.f create mode 100644 src-x64/frun_GR6J.o create mode 100644 src-x64/utils.f create mode 100644 src-x64/utils.o create mode 100644 src/frun_CEMANEIGE.f create mode 100644 src/frun_GR4J.f create mode 100644 src/frun_GR5J.f create mode 100644 src/frun_GR6J.f create mode 100644 src/utils.f create mode 100644 tests/example_Calibration.R create mode 100644 tests/example_Calibration_HBAN.R create mode 100644 tests/example_Calibration_optim.R create mode 100644 tests/example_ErrorCrit.R create mode 100644 tests/example_RunModel.R create mode 100644 tests/example_RunModel_CemaNeige.R create mode 100644 tests/example_RunModel_CemaNeigeGR4J.R create mode 100644 tests/example_RunModel_CemaNeigeGR5J.R create mode 100644 tests/example_RunModel_CemaNeigeGR6J.R create mode 100644 tests/example_RunModel_GR4J.R create mode 100644 tests/example_RunModel_GR5J.R create mode 100644 tests/example_RunModel_GR6J.R create mode 100644 tests/example_TransfoParam.R create mode 100644 tests/example_TransfoParam_CemaNeige.R create mode 100644 tests/example_TransfoParam_GR4J.R create mode 100644 tests/example_TransfoParam_GR5J.R create mode 100644 tests/example_TransfoParam_GR6J.R create mode 100644 tests/example_plot_OutputsModel.R diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 00000000..91114bf2 --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0a747394 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.Rproj.user +.Rhistory +.RData +src/*.o +src/*.so +src/*.dll diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 00000000..b37714df --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,17 @@ +Package: airGR +Type: Package +Title: Modelling tools used at Irstea-HBAN (France), including GR4J, + GR5J, GR6J and CemaNeige +Version: 0.7.4 +Date: 2014-11-01 +Author: Laurent CORON +Maintainer: Laurent CORON <laurent.coron@irstea.fr>, Olivier DELAIGUE + <olivier.delaigue@irstea.fr> +Depends: R (>= 3.0.1) +Description: This package brings into R the hydrological modelling tools used + at Irstea-HBAN (France). The package includes several conceptual + rainfall-runoff models and the associated functions for their calibration + and evaluation,including GR4J, GR5J, GR6J and CemaNeige. Use help(airGR) + for package description. +License: GPL-2 +Packaged: 2014-11-25 21:51:31 UTC; H61970 diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 00000000..67c5192a --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,31 @@ +# Generated by roxygen2 (4.0.1): do not edit by hand + +export(Calibration) +export(Calibration_HBAN) +export(Calibration_optim) +export(CreateCalibOptions) +export(CreateInputsCrit) +export(CreateInputsModel) +export(CreateRunOptions) +export(DataAltiExtrapolation_HBAN) +export(ErrorCrit) +export(ErrorCrit_KGE) +export(ErrorCrit_KGE2) +export(ErrorCrit_NSE) +export(ErrorCrit_RMSE) +export(PEdaily_Oudin) +export(RunModel) +export(RunModel_CemaNeige) +export(RunModel_CemaNeigeGR4J) +export(RunModel_CemaNeigeGR5J) +export(RunModel_CemaNeigeGR6J) +export(RunModel_GR4J) +export(RunModel_GR5J) +export(RunModel_GR6J) +export(TransfoParam) +export(TransfoParam_CemaNeige) +export(TransfoParam_GR4J) +export(TransfoParam_GR5J) +export(TransfoParam_GR6J) +export(plot_OutputsModel) +useDynLib(airgr) diff --git a/R/BasinData.R b/R/BasinData.R new file mode 100644 index 00000000..b1e6d222 --- /dev/null +++ b/R/BasinData.R @@ -0,0 +1,42 @@ +#' @name BasinInfo +#' @docType data +#' @title Data sample: characteristics of a fictional catchment (L0123001, L0123002 or L0123003) +#' @description +#' R-object containing the code, station's name, area and hypsometric curve of the catchment. +#' @encoding UTF-8 +#' @format +#' List named 'BasinInfo' containing +#' \itemize{ +#' \item two strings: catchment's code and station's name +#' \item one float: catchment's area in km2 +#' \item one numeric vector: catchment's hypsometric curve (min, quantiles 01 to 99 and max) in metres +#' } +#' @examples +#' require(airGR) +#' data(L0123001) +#' str(BasinInfo) + +NULL + + +#' @name BasinObs +#' @docType data +#' @title Data sample: time series of observations of a fictional catchment (L0123001, L0123002 or L0123003) +#' @description +#' R-object containing the times series of precipitation, temperature, potential evapotranspiration and discharges. \cr +#' Times series for L0123001 or L0123002 are at the daily time-step for use with daily models such as GR4J, GR5J, GR6J, CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J. +#' Times series for L0123003 are at the hourly time-step for use with hourly models such as GR4H. +#' @encoding UTF-8 +#' @format +#' Data frame named 'BasinObs' containing +#' \itemize{ +#' \item one POSIXlt vector: time series dates in the POSIXlt format +#' \item five numeric vectors: time series of catchment average precipitation [mm], catchment average air temperature [degC], catchment average potential evapotranspiration [mm], outlet discharge [l/s], outlet discharge [mm] +#' } +#' @examples +#' require(airGR) +#' data(L0123001) +#' str(BasinObs) + +NULL + diff --git a/R/Calibration.R b/R/Calibration.R new file mode 100644 index 00000000..874740b5 --- /dev/null +++ b/R/Calibration.R @@ -0,0 +1,29 @@ +#************************************************************************************************* +#' Calibration algorithm which minimises the error criterion using the provided functions. \cr +#************************************************************************************************* +#' @title Calibration algorithm which minimises an error criterion on the model outputs using the provided functions +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{Calibration_HBAN}}, \code{\link{Calibration_optim}}, +#' \code{\link{RunModel}}, \code{\link{ErrorCrit}}, \code{\link{TransfoParam}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, +#' \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +#' @example tests/example_Calibration.R +#' @export +#' @encoding UTF-8 +#_FunctionInputs__________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param CalibOptions [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE) +#' @param FUN_CALIB (optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN +#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] see \code{\link{Calibration_HBAN}} or \code{\link{Calibration_optim}} +#************************************************************************************************** +Calibration <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_CALIB=Calibration_HBAN,FUN_TRANSFO=NULL,quiet=FALSE){ + return( FUN_CALIB(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO,quiet=quiet) ) +} + diff --git a/R/Calibration_HBAN.R b/R/Calibration_HBAN.R new file mode 100644 index 00000000..97e631f5 --- /dev/null +++ b/R/Calibration_HBAN.R @@ -0,0 +1,401 @@ +#************************************************************************************************* +#' Calibration algorithm which minimises the error criterion. \cr +#' \cr +#' The algorithm is based on a local search procedure. +#' First, a screening is performed using either a rough predefined grid or a list of parameter sets +#' and then a simple steepest descent local search algorithm is performed. +#' +#' A screening is first performed either from a rough predefined grid (considering various initial +#' values for each paramete) or from a list of initial parameter sets. \cr +#' The best set identified in this screening is then used as a starting point for the steepest +#' descent local search algorithm. \cr +#' For this search, the parameters are used in a transformed version, to obtain uniform +#' variation ranges (and thus a similar pace), while the true ranges might be quite different. \cr +#' At each iteration, we start from a parameter set of NParam values (NParam being the number of +#' free parameters of the chosen hydrological model) and we determine the 2*NParam-1 new candidates +#' by changing one by one the different parameters (+/- pace). \cr +#' All these candidates are tested and the best one kept to be the starting point for the next +#' iteration. At the end of each iteration, the pace is either increased or decreased to adapt +#' the progression speed. A diagonal progress can occasionally be done. \cr +#' The calibration algorithm stops when the pace becomes too small. \cr +#' +#' To optimise the exploration of the parameter space, transformation functions are used to convert +#' the model parameters. This is done using the TransfoParam functions. +#************************************************************************************************* +#' @title Calibration algorithm which minimises the error criterion using the Irstea-HBAN procedure +#' @author Laurent Coron (August 2013) +#' @references +#' Michel, C. (1991), +#' Hydrologie appliquée aux petits bassins ruraux, Hydrology handout (in French), Cemagref, Antony, France. +#' @example tests/example_Calibration_HBAN.R +#' @seealso \code{\link{Calibration}}, \code{\link{Calibration_optim}}, +#' \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, +#' \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param CalibOptions [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE) +#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$ParamFinalR } \tab [numeric] parameter set obtained at the end of the calibration \cr +#' \emph{$CritFinal } \tab [numeric] error criterion obtained at the end of the calibration \cr +#' \emph{$NIter } \tab [numeric] number of iterations during the calibration \cr +#' \emph{$NRuns } \tab [numeric] number of model runs done during the calibration \cr +#' \emph{$HistParamR } \tab [numeric] table showing the progression steps in the search for optimal set: parameter values \cr +#' \emph{$HistCrit } \tab [numeric] table showing the progression steps in the search for optimal set: criterion values \cr +#' \emph{$MatBoolCrit } \tab [boolean] table giving the requested and actual time steps when the model is calibrated \cr +#' \emph{$CritName } \tab [character] name of the calibration criterion \cr +#' \emph{$CritBestValue} \tab [numeric] theoretical best criterion value \cr +#' } +#************************************************************************************************** +Calibration_HBAN <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO=NULL,quiet=FALSE){ + + +##_____Arguments_check_____________________________________________________________________ + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(CalibOptions,"CalibOptions")==FALSE){ stop("CalibOptions must be of class 'CalibOptions' \n"); return(NULL); } + if(inherits(CalibOptions,"HBAN")==FALSE){ stop("CalibOptions must be of class 'HBAN' if Calibration_HBAN is used \n"); return(NULL); } + + + ##_check_FUN_TRANSFO + if(is.null(FUN_TRANSFO)){ + if(identical(FUN_MOD,RunModel_GR4J )){ FUN_TRANSFO <- TransfoParam_GR4J ; } + if(identical(FUN_MOD,RunModel_GR5J )){ FUN_TRANSFO <- TransfoParam_GR5J ; } + if(identical(FUN_MOD,RunModel_GR6J )){ FUN_TRANSFO <- TransfoParam_GR6J ; } + if(identical(FUN_MOD,RunModel_CemaNeige )){ FUN_TRANSFO <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ FUN1 <- TransfoParam_GR4J; FUN2 <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ FUN1 <- TransfoParam_GR5J; FUN2 <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ FUN1 <- TransfoParam_GR6J; FUN2 <- TransfoParam_CemaNeige; } + FUN_TRANSFO <- function(ParamIn,Direction){ + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + ParamOut <- NA*ParamIn; + NParam <- ncol(ParamIn); + ParamOut[, 1:(NParam-2)] <- FUN1(ParamIn[, 1:(NParam-2)],Direction); + ParamOut[,(NParam-1):NParam ] <- FUN2(ParamIn[,(NParam-1):NParam ],Direction); + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + } + } + if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found (in Calibration function) \n"); return(NULL); } + } + + ##_variables_initialisation + ParamFinalR <- NULL; ParamFinalT <- NULL; CritFinal <- NULL; + NRuns <- 0; NIter <- 0; + if("StartParamDistrib" %in% names(CalibOptions)){ PrefilteringType <- 2; } else { PrefilteringType <- 1; } + if(PrefilteringType==1){ NParam <- ncol(CalibOptions$StartParamList); } + if(PrefilteringType==2){ NParam <- ncol(CalibOptions$StartParamDistrib); } + if(NParam>20){ stop("Calibration_HBAN can handle a maximum of 20 parameters \n"); return(NULL); } + HistParamR <- matrix(NA,nrow=500*NParam,ncol=NParam); + HistParamT <- matrix(NA,nrow=500*NParam,ncol=NParam); + HistCrit <- matrix(NA,nrow=500*NParam,ncol=1); + CritName <- NULL; + CritBestValue <- NULL; + Multiplier <- NULL; + CritOptim <- +1E100; + ##_temporary_change_of_Outputs_Sim + RunOptions$Outputs_Sim <- RunOptions$Outputs_Cal; ### this reduces the size of the matrix exchange with fortran and therefore speeds the calibration + + + +##_____Parameter_Grid_Screening____________________________________________________________ + + + ##Definition_of_the_function_creating_all_possible_parameter_sets_from_different_values_for_each_parameter + ProposeCandidatesGrid <- function(DistribParam){ + ##Managing_matrix_sizes + Nvalmax <- nrow(DistribParam); + NParam <- ncol(DistribParam); + ##we_add_columns_to_MatDistrib_until_it_has_20_columns + DistribParam2 <- matrix(NA,nrow=Nvalmax,ncol=20); + DistribParam2[1:Nvalmax,1:NParam] <- DistribParam; + ##we_check_the_number_of_values_to_test_for_each_param + NbDistrib <- rep(1,20); + for(iC in 1:20){ NbDistrib[iC] <- max( 1 , Nvalmax-sum(is.na(DistribParam2[,iC])) ); } + ##Loop_on_the_various_values_to_test ###(if 4 param and 3 values for each => 3^4 sets) + ##NB_we_always_do_20_loops ###which_is_here_the_max_number_of_param_that_can_be_optimised + VECT <- NULL; + for(iL01 in 1:NbDistrib[01]){ for(iL02 in 1:NbDistrib[02]){ for(iL03 in 1:NbDistrib[03]){ for(iL04 in 1:NbDistrib[04]){ for(iL05 in 1:NbDistrib[05]){ + for(iL06 in 1:NbDistrib[06]){ for(iL07 in 1:NbDistrib[07]){ for(iL08 in 1:NbDistrib[08]){ for(iL09 in 1:NbDistrib[09]){ for(iL10 in 1:NbDistrib[10]){ + for(iL11 in 1:NbDistrib[11]){ for(iL12 in 1:NbDistrib[12]){ for(iL13 in 1:NbDistrib[13]){ for(iL14 in 1:NbDistrib[14]){ for(iL15 in 1:NbDistrib[15]){ + for(iL16 in 1:NbDistrib[16]){ for(iL17 in 1:NbDistrib[17]){ for(iL18 in 1:NbDistrib[18]){ for(iL19 in 1:NbDistrib[19]){ for(iL20 in 1:NbDistrib[20]){ + VECT <- c(VECT, + DistribParam2[iL01,01],DistribParam2[iL02,02],DistribParam2[iL03,03],DistribParam2[iL04,04],DistribParam2[iL05,05], + DistribParam2[iL06,06],DistribParam2[iL07,07],DistribParam2[iL08,08],DistribParam2[iL09,09],DistribParam2[iL10,10], + DistribParam2[iL11,11],DistribParam2[iL12,12],DistribParam2[iL13,13],DistribParam2[iL14,14],DistribParam2[iL15,15], + DistribParam2[iL16,16],DistribParam2[iL17,17],DistribParam2[iL18,18],DistribParam2[iL19,19],DistribParam2[iL20,20]); + } } } } } + } } } } } + } } } } } + } } } } } + MAT <- matrix(VECT,ncol=20,byrow=TRUE)[,1:NParam]; + if(is.matrix(MAT)==FALSE){ MAT <- cbind(MAT); } + Output <- NULL; + Output$NewCandidates <- MAT; + return(Output); + } + + + ##Creation_of_new_candidates_______________________________________________ + if(PrefilteringType==1){ CandidatesParamR <- CalibOptions$StartParamList; } + if(PrefilteringType==2){ DistribParamR <- CalibOptions$StartParamDistrib; DistribParamR[,!CalibOptions$OptimParam] <- NA; CandidatesParamR <- ProposeCandidatesGrid(DistribParamR)$NewCandidates; } + ##Remplacement_of_non_optimised_values_____________________________________ + CandidatesParamR <- apply(CandidatesParamR,1,function(x){ x[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; return(x); }); + if(NParam>1){ CandidatesParamR <- t(CandidatesParamR); } else { CandidatesParamR <- cbind(CandidatesParamR); } + + ##Loop_to_test_the_various_candidates______________________________________ + iNewOptim <- 0; + Ncandidates <- nrow(CandidatesParamR); + if(!quiet & Ncandidates>1){ + if(PrefilteringType==1){ cat(paste("\t List-Screening in progress (",sep="")); } + if(PrefilteringType==2){ cat(paste("\t Grid-Screening in progress (",sep="")); } + cat("0%"); + } + for(iNew in 1:nrow(CandidatesParamR)){ + if(!quiet & Ncandidates>1){ + for(k in c(2,4,6,8)){ if(iNew==round(k/10*Ncandidates)){ cat(paste(" ",10*k,"%",sep="")); } } + } + ##Model_run + Param <- CandidatesParamR[iNew,]; + OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param); + ##Calibration_criterion_computation + OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel); + if(!is.na(OutputsCrit$CritValue)){ if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){ + CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier; + iNewOptim <- iNew; + } } + ##Storage_of_crit_info + if(is.null(CritName) | is.null(CritBestValue) | is.null(Multiplier)){ + CritName <- OutputsCrit$CritName; + CritBestValue <- OutputsCrit$CritBestValue; + Multiplier <- OutputsCrit$Multiplier; + } + } + if(!quiet & Ncandidates>1){ cat(" 100%) \n"); } + + + ##End_of_first_step_Parameter_Screening____________________________________ + ParamStartR <- CandidatesParamR[iNewOptim,]; if(!is.matrix(ParamStartR)){ ParamStartR <- matrix(ParamStartR,nrow=1); } + ParamStartT <- FUN_TRANSFO(ParamStartR,"RT"); + CritStart <- CritOptim; + NRuns <- NRuns+nrow(CandidatesParamR); + if(!quiet){ + if(Ncandidates> 1){ cat(paste("\t Screening completed (",NRuns," runs): \n",sep="")); } + if(Ncandidates==1){ cat(paste("\t Starting point for steepest-descent local search: \n",sep="")); } + cat(paste("\t Param = ",paste(formatC(ParamStartR,format="f",width=8,digits=3),collapse=" , "),"\n",sep="")); + cat(paste("\t Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritStart*Multiplier,format="f",digits=4),"\n",sep="")); + } + ##Results_archiving________________________________________________________ + HistParamR[1,] <- ParamStartR; + HistParamT[1,] <- ParamStartT; + HistCrit[1,] <- CritStart; + + + + +##_____Steepest_Descent_Local_Search_______________________________________________________ + + + ##Definition_of_the_function_creating_new_parameter_sets_through_a_step_by_step_progression_procedure + ProposeCandidatesLoc <- function(NewParamOptimT,OldParamOptimT,RangesT,OptimParam,Pace){ + ##Format_checking + if(nrow(NewParamOptimT)!=1 | nrow(OldParamOptimT)!=1){ stop("each input set must be a matrix of one single line \n"); return(NULL); } + if(ncol(NewParamOptimT)!=ncol(OldParamOptimT) | ncol(NewParamOptimT)!=length(OptimParam)){ stop("each input set must have the same number of values \n"); return(NULL); } + ##Proposal_of_new_parameter_sets ###(local search providing 2*NParam-1 new sets) + NParam <- ncol(NewParamOptimT); + VECT <- NULL; + for(I in 1:NParam){ + ##We_check_that_the_current_parameter_should_indeed_be_optimised + if(OptimParam[I]==TRUE){ + for(J in 1:2){ + Sign <- 2*J-3; #Sign can be equal to -1 or +1 + ##We_define_the_new_potential_candidate + Add <- TRUE; + PotentialCandidateT <- NewParamOptimT; + PotentialCandidateT[1,I] <- NewParamOptimT[I]+Sign*Pace; + ##If_we_exit_the_range_of_possible_values_we_go_back_on_the_boundary + if(PotentialCandidateT[1,I]<RangesT[1,I]){ PotentialCandidateT[1,I] <- RangesT[1,I]; } + if(PotentialCandidateT[1,I]>RangesT[2,I]){ PotentialCandidateT[1,I] <- RangesT[2,I]; } + ##We_check_the_set_is_not_outside_the_range_of_possible_values + if( NewParamOptimT[I]==RangesT[1,I] & Sign<0 ){ Add <- FALSE; } + if( NewParamOptimT[I]==RangesT[2,I] & Sign>0 ){ Add <- FALSE; } + ##We_check_that_this_set_has_not_been_tested_during_the_last_iteration + if(identical(PotentialCandidateT,OldParamOptimT)){ Add <- FALSE; } + ##We_add_the_candidate_to_our_list + if(Add==TRUE){ VECT <- c(VECT,PotentialCandidateT); } + } + } + } + Output <- NULL; + Output$NewCandidatesT <- matrix(VECT,ncol=NParam,byrow=TRUE); + return(Output); + } + + + ##Initialisation_of_variables + if(!quiet){ + cat("\t Steepest-descent local search in progress \n"); + } + Pace <- 0.64; + PaceDiag <- rep(0,NParam); + CLG <- 0.7^(1/NParam); + Compt <- 0; + CritOptim <- CritStart; + ##Conversion_of_real_parameter_values + RangesR <- CalibOptions$SearchRanges; + RangesT <- FUN_TRANSFO(RangesR,"RT"); + NewParamOptimT <- ParamStartT; + OldParamOptimT <- ParamStartT; + + + ##START_LOOP_ITER_________________________________________________________ + for(ITER in 1:(100*NParam)){ + + + ##Exit_loop_when_Pace_becomes_too_small___________________________________ + if(Pace<0.01){ break; } + + + ##Creation_of_new_candidates______________________________________________ + CandidatesParamT <- ProposeCandidatesLoc(NewParamOptimT,OldParamOptimT,RangesT,CalibOptions$OptimParam,Pace)$NewCandidatesT; + CandidatesParamR <- FUN_TRANSFO(CandidatesParamT,"TR"); + ##Remplacement_of_non_optimised_values_____________________________________ + CandidatesParamR <- apply(CandidatesParamR,1,function(x){ x[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; return(x); }); + if(NParam>1){ CandidatesParamR <- t(CandidatesParamR); } else { CandidatesParamR <- cbind(CandidatesParamR); } + + + ##Loop_to_test_the_various_candidates_____________________________________ + iNewOptim <- 0; + for(iNew in 1:nrow(CandidatesParamR)){ + ##Model_run + Param <- CandidatesParamR[iNew,]; + OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param); + ##Calibration_criterion_computation + OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel); + if(!is.na(OutputsCrit$CritValue)){ if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){ + CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier; + iNewOptim <- iNew; + } } + } + NRuns <- NRuns+nrow(CandidatesParamR); + + + ##When_a_progress_has_been_achieved_______________________________________ + if(iNewOptim!=0){ + ##We_store_the_optimal_set + OldParamOptimT <- NewParamOptimT; + NewParamOptimT <- matrix(CandidatesParamT[iNewOptim,1:NParam],nrow=1); + Compt <- Compt+1; + ##When_necessary_we_increase_the_pace ### if_successive_progress_occur_in_a_row + if(Compt>2*NParam){ + Pace <- Pace*2; + Compt <- 0; + } + ##We_update_PaceDiag + VectPace <- NewParamOptimT-OldParamOptimT; + for(iC in 1:NParam){ if(CalibOptions$OptimParam[iC]==TRUE){ + if(VectPace[iC]!=0){ PaceDiag[iC] <- CLG*PaceDiag[iC]+(1-CLG)*VectPace[iC]; } + if(VectPace[iC]==0){ PaceDiag[iC] <- CLG*PaceDiag[iC]; } + } } + } else { + ##When_no_progress_has_been_achieved_we_decrease_the_pace_________________ + Pace <- Pace/2; + Compt <- 0; + } + + + ##Test_of_an_additional_candidate_using_diagonal_progress_________________ + if(ITER>4*NParam){ + + NRuns <- NRuns+1; + iNewOptim <- 0; iNew <- 1; + CandidatesParamT <- NewParamOptimT+PaceDiag; if(!is.matrix(CandidatesParamT)){ CandidatesParamT <- matrix(CandidatesParamT,nrow=1); } + ##If_we_exit_the_range_of_possible_values_we_go_back_on_the_boundary + for(iC in 1:NParam){ if(CalibOptions$OptimParam[iC]==TRUE){ + if(CandidatesParamT[iNew,iC]<RangesT[1,iC]){ CandidatesParamT[iNew,iC] <- RangesT[1,iC]; } + if(CandidatesParamT[iNew,iC]>RangesT[2,iC]){ CandidatesParamT[iNew,iC] <- RangesT[2,iC]; } + } } + CandidatesParamR <- FUN_TRANSFO(CandidatesParamT,"TR"); + ##Model_run + Param <- CandidatesParamR[iNew,]; + OutputsModel <- FUN_MOD(InputsModel,RunOptions,Param); + ##Calibration_criterion_computation + OutputsCrit <- FUN_CRIT(InputsCrit,OutputsModel); + if(OutputsCrit$CritValue*OutputsCrit$Multiplier < CritOptim){ + CritOptim <- OutputsCrit$CritValue*OutputsCrit$Multiplier; + iNewOptim <- iNew; + } + ##When_a_progress_has_been_achieved + if(iNewOptim!=0){ + OldParamOptimT <- NewParamOptimT; + NewParamOptimT <- matrix(CandidatesParamT[iNewOptim,1:NParam],nrow=1); + } + + } + + + ##Results_archiving_______________________________________________________ + NewParamOptimR <- FUN_TRANSFO(NewParamOptimT,"TR"); + HistParamR[ITER+1,] <- NewParamOptimR; + HistParamT[ITER+1,] <- NewParamOptimT; + HistCrit[ITER+1,] <- CritOptim; + ### if(!quiet){ cat(paste("\t Iter ",formatC(ITER,format="d",width=3)," Crit ",formatC(CritOptim,format="f",digits=4)," Pace ",formatC(Pace,format="f",digits=4),"\n",sep="")); } + + + + } ##END_LOOP_ITER_________________________________________________________ + ITER <- ITER-1; + + + ##Case_when_the_starting_parameter_set_remains_the_best_solution__________ + if(CritOptim==CritStart & !quiet){ + cat("\t No progress achieved \n"); + } + + ##End_of_Steepest_Descent_Local_Search____________________________________ + ParamFinalR <- NewParamOptimR; + ParamFinalT <- NewParamOptimT; + CritFinal <- CritOptim; + NIter <- 1+ITER; + if(!quiet){ + cat(paste("\t Calibration completed (",NIter," iterations, ",NRuns," runs): \n",sep="")); + cat(paste("\t Param = ",paste(formatC(ParamFinalR,format="f",width=8,digits=3),collapse=" , "),"\n",sep="")); + cat(paste("\t Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritFinal*Multiplier,format="f",digits=4),"\n",sep="")); + } + ##Results_archiving_______________________________________________________ + HistParamR <- cbind(HistParamR[1:NIter,]); colnames(HistParamR) <- paste("Param",1:NParam,sep=""); + HistParamT <- cbind(HistParamT[1:NIter,]); colnames(HistParamT) <- paste("Param",1:NParam,sep=""); + HistCrit <- cbind(HistCrit[1:NIter,]); ###colnames(HistCrit) <- paste("HistCrit"); + + BoolCrit_Actual <- InputsCrit$BoolCrit; BoolCrit_Actual[OutputsCrit$Ind_notcomputed] <- FALSE; + MatBoolCrit <- cbind( InputsCrit$BoolCrit , BoolCrit_Actual ); + colnames(MatBoolCrit) <- c("BoolCrit_Requested","BoolCrit_Actual"); + + +##_____Output______________________________________________________________________________ + OutputsCalib <- list(as.double(ParamFinalR),CritFinal*Multiplier,NIter,NRuns,HistParamR,HistCrit*Multiplier,MatBoolCrit,CritName,CritBestValue); + names(OutputsCalib) <- c("ParamFinalR","CritFinal","NIter","NRuns","HistParamR","HistCrit","MatBoolCrit","CritName","CritBestValue"); + class(OutputsCalib) <- c("OutputsCalib","HBAN"); + return(OutputsCalib); + + + +} + + + + + diff --git a/R/Calibration_optim.R b/R/Calibration_optim.R new file mode 100644 index 00000000..81f1424f --- /dev/null +++ b/R/Calibration_optim.R @@ -0,0 +1,149 @@ +#************************************************************************************************* +#' Calibration algorithm which minimises the error criterion. \cr +#' \cr +#' The algorithm is based on the "optim" function from the "stats" R-package +#' (using method="L-BFGS-B", i.e. a local optimization quasi-Newton method). +#' +#' To optimise the exploration of the parameter space, transformation functions are used to convert +#' the model parameters. This is done using the TransfoParam functions. +#************************************************************************************************* +#' @title Calibration algorithm which minimises the error criterion using the stats::optim function +#' @author Laurent Coron (August 2013) +#' @example tests/example_Calibration_optim.R +#' @seealso \code{\link{Calibration}}, \code{\link{Calibration_HBAN}}, +#' \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, +#' \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param CalibOptions [object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE) +#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$ParamFinalR } \tab [numeric] parameter set obtained at the end of the calibration \cr +#' \emph{$CritFinal } \tab [numeric] error criterion obtained at the end of the calibration \cr +#' \emph{$Nruns } \tab [numeric] number of model runs done during the calibration \cr +#' \emph{$CritName } \tab [character] name of the calibration criterion \cr +#' \emph{$CritBestValue} \tab [numeric] theoretical best criterion value \cr +#' } +#************************************************************************************************** +Calibration_optim <- function(InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO=NULL,quiet=FALSE){ + + + ##_check_class + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(CalibOptions,"CalibOptions")==FALSE){ stop("CalibOptions must be of class 'CalibOptions' \n"); return(NULL); } + if(inherits(CalibOptions,"optim")==FALSE){ stop("CalibOptions must be of class 'optim' if Calibration_optim is used \n"); return(NULL); } + + + ##_check_FUN_TRANSFO + if(is.null(FUN_TRANSFO)){ + if(identical(FUN_MOD,RunModel_GR4J )){ FUN_TRANSFO <- TransfoParam_GR4J ; } + if(identical(FUN_MOD,RunModel_GR5J )){ FUN_TRANSFO <- TransfoParam_GR5J ; } + if(identical(FUN_MOD,RunModel_GR6J )){ FUN_TRANSFO <- TransfoParam_GR6J ; } + if(identical(FUN_MOD,RunModel_CemaNeige )){ FUN_TRANSFO <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ FUN1 <- TransfoParam_GR4J; FUN2 <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ FUN1 <- TransfoParam_GR5J; FUN2 <- TransfoParam_CemaNeige; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ FUN1 <- TransfoParam_GR6J; FUN2 <- TransfoParam_CemaNeige; } + FUN_TRANSFO <- function(ParamIn,Direction){ + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + ParamOut <- NA*ParamIn; + NParam <- ncol(ParamIn); + ParamOut[, 1:(NParam-2)] <- FUN1(ParamIn[, 1:(NParam-2)],Direction); + ParamOut[,(NParam-1):NParam ] <- FUN2(ParamIn[,(NParam-1):NParam ],Direction); + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + } + } + if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found (in Calibration function) \n"); return(NULL); } + } + + + ##_RunModelAndCrit + RunModelAndCrit <- function(par,InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO){ + ParamT <- NA*CalibOptions$FixedParam; + ParamT[CalibOptions$OptimParam] <- par; + Param <- FUN_TRANSFO(ParamIn=ParamT,Direction="TR"); + Param[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; + OutputsModel <- FUN_MOD(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param); + OutputsCrit <- FUN_CRIT(InputsCrit=InputsCrit,OutputsModel=OutputsModel); + return(OutputsCrit$CritValue*OutputsCrit$Multiplier); + } + + + ##_temporary_change_of_Outputs_Sim + RunOptions$Outputs_Sim <- RunOptions$Outputs_Cal; ### this reduces the size of the matrix exchange with fortran and therefore speeds the calibration + ##_screenPrint + if(!quiet){ + cat(paste("\t Calibration in progress (function optim from the stats package) \n",sep="")); + } + + + ##_lower_and_upper_limit_values (transformed) + RangesR <- CalibOptions$SearchRanges; + RangesT <- FUN_TRANSFO(RangesR,"RT"); + lower <- RangesT[1,CalibOptions$OptimParam]; + upper <- RangesT[2,CalibOptions$OptimParam]; + + ##_starting_values (transformed) + ParamStartT <- FUN_TRANSFO(CalibOptions$StartParam,"RT"); + par_start <- ParamStartT[CalibOptions$OptimParam]; + + + ##_calibration + RESULT <- optim(par=par_start,fn=RunModelAndCrit,gr=NULL, + InputsModel,RunOptions,InputsCrit,CalibOptions,FUN_MOD,FUN_CRIT,FUN_TRANSFO, ## arguments for the RunModelAndCrit function (other than par) + method="L-BFGS-B",lower=lower,upper=upper,control=list(),hessian=FALSE) + + + ##_outputs_preparation + ParamFinalT <- NA*ParamStartT; + ParamFinalT[CalibOptions$OptimParam] <- RESULT$par; + ParamFinalR <- FUN_TRANSFO(ParamFinalT,"TR"); + ParamFinalR[!CalibOptions$OptimParam] <- CalibOptions$FixedParam[!CalibOptions$OptimParam]; + CritFinal <- RESULT$value; + + ##_storage_of_crit_info + OutputsModel <- FUN_MOD(InputsModel=InputsModel,RunOptions=RunOptions,Param=ParamFinalR); + OutputsCrit <- FUN_CRIT(InputsCrit=InputsCrit,OutputsModel=OutputsModel); + CritName <- OutputsCrit$CritName; + CritBestValue <- OutputsCrit$CritBestValue; + Multiplier <- OutputsCrit$Multiplier; + + ##_screenPrint + if(!quiet){ + if(RESULT$convergence==0){ + cat(paste("\t Calibration completed: \n",sep="")); + cat(paste("\t Param = ",paste(formatC(ParamFinalR,format="f",width=8,digits=3),collapse=" , "),"\n",sep="")); + cat(paste("\t Crit ",format(CritName,width=12,justify="left")," = ",formatC(CritFinal*Multiplier,format="f",digits=4),"\n",sep="")); + } else { + cat(paste("\t Calibration failed: \n",sep="")); + cat(paste("\t ",RESULT$message,sep="")); + } + } + + + ##_function_output + OutputsCalib <- list(as.double(ParamFinalR),CritFinal*Multiplier,as.integer(RESULT$counts[1]),CritName,CritBestValue); + names(OutputsCalib) <- c("ParamFinalR","CritFinal","NRuns","CritName","CritBestValue"); + class(OutputsCalib) <- c("OutputsCalib","optim"); + return(OutputsCalib); + + +} + + + + diff --git a/R/CreateCalibOptions.R b/R/CreateCalibOptions.R new file mode 100644 index 00000000..c94d5efc --- /dev/null +++ b/R/CreateCalibOptions.R @@ -0,0 +1,226 @@ +#************************************************************************************************* +#' Creation of the CalibOptions object required to the Calibration functions. +#' +#' Users wanting to use FUN_MOD, FUN_CALIB or FUN_TRANSFO functions that are not included in +#' the package must create their own CalibOptions object accordingly. +#************************************************************************************************* +#' @title Creation of the CalibOptions object required to the Calibration functions +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}} +#' @example tests/example_Calibration.R +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param FUN_CALIB (optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN +#' @param FUN_TRANSFO (optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined +#' @param RunOptions (optional) [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param OptimParam (optional) [boolean] vector of booleans indicating which parameters must be optimised (NParam columns, 1 line) +#' @param FixedParam (optional) [numeric] vector giving the values to allocate to non-optimised parameter values (NParam columns, 1 line) +#' @param SearchRanges (optional) [numeric] matrix giving the ranges of real parameters (NParam columns, 2 lines) +#' \tabular{llllll}{ +#' \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr +#' [1,] \tab 0 \tab -1 \tab 0 \tab ... \tab 0.0 \cr +#' [2,] \tab 3000 \tab +1 \tab 100 \tab ... \tab 3.0 \cr +#' } +#' @param StartParam (optional) [numeric] vector of parameter values used to start global search calibration procedure (e.g. Calibration_optim) +#' \tabular{llllll}{ +#' \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr +#' \tab 1000 \tab -0.5 \tab 22 \tab ... \tab 1.1 \cr +#' } +#' @param StartParamList (optional) [numeric] matrix of parameter sets used for grid-screening calibration procedure (values in columns, sets in line) +#' \tabular{llllll}{ +#' \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr +#' [set1] \tab 800 \tab -0.7 \tab 25 \tab ... \tab 1.0 \cr +#' [set2] \tab 1000 \tab -0.5 \tab 22 \tab ... \tab 1.1 \cr +#' [...] \tab ... \tab ... \tab ... \tab ... \tab ... \cr +#' [set n] \tab 200 \tab -0.3 \tab 17 \tab ... \tab 1.0 \cr +#' } +#' @param StartParamDistrib (optional) [numeric] matrix of parameter values used for grid-screening calibration procedure (values in columns, percentiles in line) \cr +#' \tabular{llllll}{ +#' \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr +#' [value1] \tab 800 \tab -0.7 \tab 25 \tab ... \tab 1.0 \cr +#' [value2] \tab 1000 \tab NA \tab 50 \tab ... \tab 1.2 \cr +#' [value3] \tab 1200 \tab NA \tab NA \tab ... \tab 1.6 \cr +#' } +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] object of class \emph{CalibOptions} containing the data required to evaluate the model outputs; it can include the following: +#' \tabular{ll}{ +#' \emph{$OptimParam } \tab [boolean] vector of booleans indicating which parameters must be optimised \cr +#' \emph{$FixedParam } \tab [numeric] vector giving the values to allocate to non-optimised parameter values \cr +#' \emph{$SearchRanges } \tab [numeric] matrix giving the ranges of real parameters \cr +#' \emph{$StartParam } \tab [numeric] vector of parameter values used to start global search calibration procedure \cr +#' \emph{$StartParamList } \tab [numeric] matrix of parameter sets used for grid-screening calibration procedure \cr +#' \emph{$StartParamDistrib} \tab [numeric] matrix of parameter values used for grid-screening calibration procedure \cr +#' } +#**************************************************************************************************' +CreateCalibOptions <- function(FUN_MOD,FUN_CALIB=Calibration_HBAN,FUN_TRANSFO=NULL,RunOptions=NULL,OptimParam=NULL,FixedParam=NULL,SearchRanges=NULL, + StartParam=NULL,StartParamList=NULL,StartParamDistrib=NULL){ + + + ObjectClass <- NULL; + + ##check_FUN_MOD + BOOL <- FALSE; + if(identical(FUN_MOD,RunModel_GR4J )){ ObjectClass <- c(ObjectClass,"GR4J" ); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_GR5J )){ ObjectClass <- c(ObjectClass,"GR5J" ); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_GR6J )){ ObjectClass <- c(ObjectClass,"GR6J" ); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_CemaNeige )){ ObjectClass <- c(ObjectClass,"CemaNeige" ); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR4J"); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR5J"); BOOL <- TRUE; } + if(identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ ObjectClass <- c(ObjectClass,"CemaNeigeGR6J"); BOOL <- TRUE; } + if(!BOOL){ stop("incorrect FUN_MOD for use in CreateCalibOptions \n"); return(NULL); } + + ##check_FUN_CALIB + BOOL <- FALSE; + if(identical(FUN_CALIB,Calibration_HBAN )){ ObjectClass <- c(ObjectClass,"HBAN" ); BOOL <- TRUE; } + if(identical(FUN_CALIB,Calibration_optim)){ ObjectClass <- c(ObjectClass,"optim"); BOOL <- TRUE; } + if(!BOOL){ stop("incorrect FUN_CALIB for use in CreateCalibOptions \n"); return(NULL); } + + ##check_FUN_TRANSFO + if(is.null(FUN_TRANSFO)){ + ##_set_FUN1 + if(identical(FUN_MOD,RunModel_GR4J ) | identical(FUN_MOD,RunModel_CemaNeigeGR4J) ){ FUN1 <- TransfoParam_GR4J ; } + if(identical(FUN_MOD,RunModel_GR5J ) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) ){ FUN1 <- TransfoParam_GR5J ; } + if(identical(FUN_MOD,RunModel_GR6J ) | identical(FUN_MOD,RunModel_CemaNeigeGR6J) ){ FUN1 <- TransfoParam_GR6J ; } + if(identical(FUN_MOD,RunModel_CemaNeige) ){ FUN1 <- TransfoParam_CemaNeige; } + if(is.null(FUN1)){ stop("FUN1 was not found \n"); return(NULL); } + ##_set_FUN2 + FUN2 <- TransfoParam_CemaNeige; + ##_set_FUN_TRANSFO + if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J) | identical(FUN_MOD,RunModel_CemaNeige)){ + FUN_TRANSFO <- FUN1; + } else { + FUN_TRANSFO <- function(ParamIn,Direction){ + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + ParamOut <- NA*ParamIn; + NParam <- ncol(ParamIn); + if(NParam <= 3){ + ParamOut[, 1:(NParam-2)] <- FUN1(cbind(ParamIn[,1:(NParam-2)]),Direction); + } else { + ParamOut[, 1:(NParam-2)] <- FUN1(ParamIn[,1:(NParam-2) ],Direction); } + ParamOut[,(NParam-1):NParam ] <- FUN2(ParamIn[,(NParam-1):NParam],Direction); + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + } + } + } + if(is.null(FUN_TRANSFO)){ stop("FUN_TRANSFO was not found \n"); return(NULL); } + + ##check_RunOptions + if(!is.null(RunOptions)){ + if(inherits(RunOptions,"RunOptions")==FALSE){ stop("RunOptions must be of class 'RunOptions' if not null= \n"); return(NULL); } + } + + ##NParam + if("GR4J" %in% ObjectClass){ NParam <- 4; } + if("GR5J" %in% ObjectClass){ NParam <- 5; } + if("GR6J" %in% ObjectClass){ NParam <- 6; } + if("CemaNeige" %in% ObjectClass){ NParam <- 2; } + if("CemaNeigeGR4J" %in% ObjectClass){ NParam <- 6; } + if("CemaNeigeGR5J" %in% ObjectClass){ NParam <- 7; } + if("CemaNeigeGR6J" %in% ObjectClass){ NParam <- 8; } + + ##check_OptimParam + if(is.null(OptimParam)){ + OptimParam <- rep(TRUE,NParam); + } else { + if(!is.vector(OptimParam) ){ stop("OptimParam must be a vector of booleans \n"); return(NULL); } + if(length(OptimParam)!=NParam){ stop("Incompatibility between OptimParam length and FUN_MOD \n"); return(NULL); } + if(!is.logical(OptimParam) ){ stop("OptimParam must be a vector of booleans \n"); return(NULL); } + } + + ##check_FixedParam + if(is.null(FixedParam)){ + FixedParam <- rep(NA,NParam); + } else { + if(!is.vector(FixedParam) ){ stop("FixedParam must be a vector \n"); return(NULL); } + if(length(FixedParam)!=NParam ){ stop("Incompatibility between OptimParam length and FUN_MOD \n"); return(NULL); } + if(!is.numeric(FixedParam[!OptimParam])){ stop("if OptimParam[i]==FALSE, FixedParam[i] must be a numeric value \n"); return(NULL); } + } + + ##check_SearchRanges + if(is.null(SearchRanges)){ + ParamT <- matrix(c(rep(-9.99,NParam),rep(+9.99,NParam)),ncol=NParam,byrow=TRUE); + SearchRanges <- TransfoParam(ParamIn=ParamT,Direction="TR",FUN_TRANSFO=FUN_TRANSFO); + } else { + if(!is.matrix( SearchRanges) ){ stop("SearchRanges must be a matrix \n"); return(NULL); } + if(!is.numeric(SearchRanges) ){ stop("SearchRanges must be a matrix of numeric values \n"); return(NULL); } + if(sum(is.na(SearchRanges))!=0){ stop("SearchRanges must not include NA values \n"); return(NULL); } + if(nrow(SearchRanges)!=2 ){ stop("SearchRanges must have 2 rows \n"); return(NULL); } + if(ncol(SearchRanges)!=NParam ){ stop("Incompatibility between SearchRanges ncol and FUN_MOD \n"); return(NULL); } + } + + ##check_StartParamList_and_StartParamDistrib__default_values + if( ("HBAN" %in% ObjectClass & is.null(StartParamList) & is.null(StartParamDistrib)) | + ("optim" %in% ObjectClass & is.null(StartParam)) ){ + + if("GR4J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -2.00, +3.40, -9.10, + +3.90, -0.90, +4.10, -8.70, + +4.50, -0.10, +5.00, -8.10),ncol=NParam,byrow=TRUE); } + if("GR5J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70, + +3.90, -0.60, +4.10, -8.70, +0.30, + +4.50, -0.10, +5.00, -8.10, +0.50),ncol=NParam,byrow=TRUE); } + if("GR6J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00, + +3.90, -0.50, +4.10, -8.70, +0.10, +4.00, + +4.50, +0.50, +5.00, -8.10, +1.10, +5.00),ncol=NParam,byrow=TRUE); } + if("CemaNeige"%in% ObjectClass){ + ParamT <- matrix( c( -6.26, +0.55, + -2.13, +0.92, + +4.86, +1.40),ncol=NParam,byrow=TRUE); } + if("CemaNeigeGR4J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -2.00, +3.40, -9.10, -6.26, +0.55, + +3.90, -0.90, +4.10, -8.70, -2.13, +0.92, + +4.50, -0.10, +5.00, -8.10, +4.86, +1.40),ncol=NParam,byrow=TRUE); } + if("CemaNeigeGR5J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70, -6.26, +0.55, + +3.90, -0.60, +4.10, -8.70, +0.30, -2.13, +0.92, + +4.50, -0.10, +5.00, -8.10, +0.50, +4.86, +1.40),ncol=NParam,byrow=TRUE); } + if("CemaNeigeGR6J"%in% ObjectClass){ + ParamT <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00, -6.26, +0.55, + +3.90, -0.50, +4.10, -8.70, +0.10, +4.00, -2.13, +0.92, + +4.50, +0.50, +5.00, -8.10, +1.10, +5.00, +4.86, +1.40),ncol=NParam,byrow=TRUE); } + + StartParamList <- NULL; + StartParamDistrib <- TransfoParam(ParamIn=ParamT,Direction="TR",FUN_TRANSFO=FUN_TRANSFO); + StartParam <- StartParamDistrib[2,]; + } + + ##check_StartParamList_and_StartParamDistrib__format + if("HBAN" %in% ObjectClass & !is.null(StartParamList)){ + if(!is.matrix( StartParamList) ){ stop("StartParamList must be a matrix \n"); return(NULL); } + if(!is.numeric(StartParamList) ){ stop("StartParamList must be a matrix of numeric values \n"); return(NULL); } + if(sum(is.na(StartParamList))!=0){ stop("StartParamList must not include NA values \n"); return(NULL); } + if(ncol(StartParamList)!=NParam ){ stop("Incompatibility between StartParamList ncol and FUN_MOD \n"); return(NULL); } + } + if("HBAN" %in% ObjectClass & !is.null(StartParamDistrib)){ + if(!is.matrix( StartParamDistrib) ){ stop("StartParamDistrib must be a matrix \n"); return(NULL); } + if(!is.numeric(StartParamDistrib[1,]) ){ stop("StartParamDistrib must be a matrix of numeric values \n"); return(NULL); } + if(sum(is.na(StartParamDistrib[1,]))!=0){ stop("StartParamDistrib must not include NA values on the first line \n"); return(NULL); } + if(ncol(StartParamDistrib)!=NParam ){ stop("Incompatibility between StartParamDistrib ncol and FUN_MOD \n"); return(NULL); } + } + if("optim" %in% ObjectClass & !is.null(StartParam)){ + if(!is.vector( StartParam) ){ stop("StartParam must be a vector \n"); return(NULL); } + if(!is.numeric(StartParam) ){ stop("StartParam must be a vector of numeric values \n"); return(NULL); } + if(sum(is.na(StartParam))!=0 ){ stop("StartParam must not include NA values \n"); return(NULL); } + if(length(StartParam)!=NParam ){ stop("Incompatibility between StartParam length and FUN_MOD \n"); return(NULL); } + } + + + ##Create_CalibOptions + CalibOptions <- list(OptimParam=OptimParam,FixedParam=FixedParam,SearchRanges=SearchRanges); + if(!is.null(StartParam )){ CalibOptions <- c(CalibOptions,list(StartParam=StartParam)); } + if(!is.null(StartParamList )){ CalibOptions <- c(CalibOptions,list(StartParamList=StartParamList)); } + if(!is.null(StartParamDistrib)){ CalibOptions <- c(CalibOptions,list(StartParamDistrib=StartParamDistrib)); } + class(CalibOptions) <- c("CalibOptions",ObjectClass); + return(CalibOptions); + + +} + + + diff --git a/R/CreateInputsCrit.R b/R/CreateInputsCrit.R new file mode 100644 index 00000000..5dcd672c --- /dev/null +++ b/R/CreateInputsCrit.R @@ -0,0 +1,81 @@ +#************************************************************************************************* +#' Creation of the InputsCrit object required to the ErrorCrit functions. +#' +#' Users wanting to use FUN_CRIT functions that are not included in +#' the package must create their own InputsCrit object accordingly. +#************************************************************************************************* +#' @title Creation of the InputsCrit object required to the ErrorCrit functions +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateCalibOptions}} +#' @example tests/example_ErrorCrit.R +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE) +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Qobs [numeric] series of observed discharges [mm] +#' @param BoolCrit (optional) [boolean] boolean giving the time steps to consider in the computation (all time steps are consider by default) +#' @param transfo (optional) [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort") +#' @param Ind_zeroes (optional) [numeric] indices of the time-steps where zeroes are observed +#' @param epsilon (optional) [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] object of class \emph{InputsCrit} containing the data required to evaluate the model outputs; it can include the following: +#' \tabular{ll}{ +#' \emph{$BoolCrit } \tab [boolean] boolean giving the time steps to consider in the computation \cr +#' \emph{$Qobs } \tab [numeric] series of observed discharges [mm] \cr +#' \emph{$transfo } \tab [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort") \cr +#' \emph{$Ind_zeroes} \tab [numeric] indices of the time-steps where zeroes are observed \cr +#' \emph{$epsilon } \tab [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty \cr +#' } +#************************************************************************************************** +CreateInputsCrit <- function(FUN_CRIT,InputsModel,RunOptions,Qobs,BoolCrit=NULL,transfo="",Ind_zeroes=NULL,epsilon=NULL){ + + ObjectClass <- NULL; + + ##check_FUN_CRIT + BOOL <- FALSE; + if(identical(FUN_CRIT,ErrorCrit_RMSE) | identical(FUN_CRIT,ErrorCrit_NSE) | identical(FUN_CRIT,ErrorCrit_KGE) | identical(FUN_CRIT,ErrorCrit_KGE2)){ + BOOL <- TRUE; + } + if(!BOOL){ stop("incorrect FUN_CRIT for use in CreateInputsCrit \n"); return(NULL); } + + ##check_arguments + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n" ); return(NULL); } + if(inherits(RunOptions ,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n" ); return(NULL); } + LLL <- length(InputsModel$DatesR[RunOptions$IndPeriod_Run]) + + if(is.null(Qobs) ){ stop("Qobs is missing \n"); return(NULL); } + if(!is.vector( Qobs)){ stop(paste("Qobs must be a vector of numeric values \n",sep="")); return(NULL); } + if(!is.numeric(Qobs)){ stop(paste("Qobs must be a vector of numeric values \n",sep="")); return(NULL); } + if(length(Qobs)!=LLL){ stop("Qobs and InputsModel series must have the same length \n"); return(NULL); } + + if(is.null(BoolCrit)){ BoolCrit <- rep(TRUE,length(Qobs)); } + if(!is.logical(BoolCrit)){ stop("BoolCrit must be a vector of boolean \n" ); return(NULL); } + if(length(BoolCrit)!=LLL){ stop("BoolCrit and InputsModel series must have the same length \n"); return(NULL); } + + if(is.null(transfo) ){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } + if(!is.vector( transfo)){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } + if(length(transfo)!=1 ){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } + if(!is.character(transfo)){ stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } + if(transfo %in% c("","sqrt","log","inv") == FALSE){ + stop("transfo must be a chosen among the following: '', 'sqrt', 'log' or 'inv' \n"); return(NULL); } + + if(!is.null(Ind_zeroes)){ + if(!is.vector( Ind_zeroes)){ stop("Ind_zeroes must be a vector of integers \n" ); return(NULL); } + if(!is.integer(Ind_zeroes)){ stop("Ind_zeroes must be a vector of integers \n" ); return(NULL); } + } + if(!is.null(epsilon)){ + if(!is.vector( epsilon) | length(epsilon)!=1 | !is.numeric(epsilon)){ + stop("epsilon must be single numeric value \n" ); return(NULL); } + epsilon=as.double(epsilon); + } + + ##Create_InputsCrit + InputsCrit <- list(BoolCrit=BoolCrit,Qobs=Qobs,transfo=transfo,Ind_zeroes=Ind_zeroes,epsilon=epsilon); + class(InputsCrit) <- c("InputsCrit",ObjectClass); + return(InputsCrit); + + +} + diff --git a/R/CreateInputsModel.R b/R/CreateInputsModel.R new file mode 100644 index 00000000..e1b8be1a --- /dev/null +++ b/R/CreateInputsModel.R @@ -0,0 +1,156 @@ +#************************************************************************************************* +#' Creation of the InputsModel object required to the RunModel functions. +#' +#' Users wanting to use FUN_MOD functions that are not included in +#' the package must create their own InputsModel object accordingly. +#************************************************************************************************* +#' @title Creation of the InputsModel object required to the RunModel functions +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{RunModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}, \code{\link{DataAltiExtrapolation_HBAN}} +#' @example tests/example_RunModel.R +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param DatesR [POSIXlt] vector of dates required to create the GR model and CemaNeige module inputs +#' @param Precip [numeric] time series of daily total precipitation (catchment average) [mm], required to create the GR model and CemaNeige module inputs +#' @param PotEvap [numeric] time series of daily potential evapotranspiration (catchment average) [mm], required to create the GR model inputs +#' @param TempMean [numeric] time series of daily mean air temperature [degC], required to create the CemaNeige module inputs +#' @param TempMin (optional) [numeric] time series of daily min air temperature [degC], possibly used to create the CemaNeige module inputs +#' @param TempMax (optional) [numeric] time series of daily max air temperature [degC], possibly used to create the CemaNeige module inputs +#' @param ZInputs (optional) [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m] +#' @param HypsoData (optional) [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m], required to create the GR model inputs, if not defined a single elevation is used for CemaNeige +#' @param NLayers (optional) [numeric] integer giving the number of elevation layers requested [-], required to create the GR model inputs, default=5 +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] object of class \emph{InputsModel} containing the data required to evaluate the model outputs; it can include the following: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] vector of dates \cr +#' \emph{$Precip } \tab [numeric] time series of daily total precipitation (catchment average) [mm] \cr +#' \emph{$PotEvap } \tab [numeric] time series of daily potential evapotranspiration (catchment average) [mm], \cr\tab defined if FUN_MOD includes GR4J, GR5J or GR6J \cr \cr +#' \emph{$LayerPrecip } \tab [list] list of time series of daily precipitation (layer average) [mm], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr +#' \emph{$LayerTempMean } \tab [list] list of time series of daily mean air temperature (layer average) [degC], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr +#' \emph{$LayerFracSolidPrecip} \tab [list] list of time series of daily solid precip. fract. (layer average) [-], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr +#' } +#************************************************************************************************** +CreateInputsModel <- function(FUN_MOD,DatesR,Precip,PotEvap=NULL,TempMean=NULL,TempMin=NULL,TempMax=NULL,ZInputs=NULL,HypsoData=NULL,NLayers=5,quiet=FALSE){ + + ObjectClass <- NULL; + + ##check_FUN_MOD + BOOL <- FALSE; + if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J)){ + ObjectClass <- c(ObjectClass,"daily","GR"); + TimeStep <- as.integer(24*60*60); + BOOL <- TRUE; + } + if(identical(FUN_MOD,RunModel_CemaNeige)){ + ObjectClass <- c(ObjectClass,"daily","CemaNeige"); + TimeStep <- as.integer(24*60*60); + BOOL <- TRUE; + } + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ + ObjectClass <- c(ObjectClass,"daily","GR","CemaNeige"); + TimeStep <- as.integer(24*60*60); + BOOL <- TRUE; + } + if(!BOOL){ stop("incorrect FUN_MOD for use in CreateInputsModel \n"); return(NULL); } + + ##check_arguments + if("GR" %in% ObjectClass | "CemaNeige" %in% ObjectClass){ + if(is.null(DatesR)){ stop("DatesR is missing \n"); return(NULL); } + if("POSIXlt" %in% class(DatesR) == FALSE & "POSIXct" %in% class(DatesR) == FALSE){ stop("DatesR must be defined as POSIXlt or POSIXct \n"); return(NULL); } + if("POSIXlt" %in% class(DatesR) == FALSE){ DatesR <- as.POSIXlt(DatesR); } + if(difftime(tail(DatesR,1),tail(DatesR,2),units="secs")[[1]]!=TimeStep){ stop(paste("the time step of the model inputs must be ",TimeStep," seconds \n",sep="")); return(NULL); } + LLL <- length(DatesR); + } + if("GR" %in% ObjectClass){ + if(is.null(Precip )){ stop("Precip is missing \n" ); return(NULL); } + if(is.null(PotEvap )){ stop("PotEvap is missing \n" ); return(NULL); } + if(!is.vector( Precip) | !is.vector( PotEvap)){ stop("Precip and PotEvap must be vectors of numeric values \n"); return(NULL); } + if(!is.numeric(Precip) | !is.numeric(PotEvap)){ stop("Precip and PotEvap must be vectors of numeric values \n"); return(NULL); } + if(length(Precip)!=LLL | length(PotEvap)!=LLL){ stop("Precip, PotEvap and DatesR must have the same length \n"); return(NULL); } + } + if("CemaNeige" %in% ObjectClass){ + if(is.null(Precip )){ stop("Precip is missing \n" ); return(NULL); } + if(is.null(TempMean)){ stop("TempMean is missing \n"); return(NULL); } + if(!is.vector( Precip) | !is.vector( TempMean)){ stop("Precip and TempMean must be vectors of numeric values \n"); return(NULL); } + if(!is.numeric(Precip) | !is.numeric(TempMean)){ stop("Precip and TempMean must be vectors of numeric values \n"); return(NULL); } + if(length(Precip)!=LLL | length(TempMean)!=LLL){ stop("Precip, TempMean and DatesR must have the same length \n"); return(NULL); } + if(is.null(TempMin)!=is.null(TempMax)){ stop("TempMin and TempMax must be both defined if not null \n"); return(NULL); } + if(!is.null(TempMin) & !is.null(TempMax)){ + if(!is.vector( TempMin) | !is.vector( TempMax)){ stop("TempMin and TempMax must be vectors of numeric values \n"); return(NULL); } + if(!is.numeric(TempMin) | !is.numeric(TempMax)){ stop("TempMin and TempMax must be vectors of numeric values \n"); return(NULL); } + if(length(TempMin)!=LLL | length(TempMax)!=LLL){ stop("TempMin, TempMax and DatesR must have the same length \n"); return(NULL); } + } + if(!is.null(HypsoData)){ + if(!is.vector( HypsoData)){ stop("HypsoData must be a vector of numeric values if not null \n"); return(NULL); } + if(!is.numeric(HypsoData)){ stop("HypsoData must be a vector of numeric values if not null \n"); return(NULL); } + if(length(HypsoData)!=101){ stop("HypsoData must be of length 101 if not null \n"); return(NULL); } + if(sum(is.na(HypsoData))!=0 & sum(is.na(HypsoData))!=101){ stop("HypsoData must not contain any NA if not null \n"); return(NULL); } + } + if(!is.null(ZInputs)){ + if(length(ZInputs)!=1 ){ stop("\t ZInputs must be a single numeric value if not null \n"); return(NULL); } + if(is.na(ZInputs) | !is.numeric(ZInputs)){ stop("\t ZInputs must be a single numeric value if not null \n"); return(NULL); } + } + if(is.null(HypsoData)){ + if(!quiet){ warning("\t HypsoData is missing => a single layer is used and no extrapolation is made \n"); } + HypsoData <- as.numeric(rep(NA,101)); ZInputs <- as.numeric(NA); NLayers <- as.integer(1); + } + if(is.null(ZInputs)){ + if(!quiet & !identical(HypsoData,as.numeric(rep(NA,101)))){ warning("\t ZInputs is missing => HypsoData[51] is used \n"); } + ZInputs <- HypsoData[51]; + } + } + + + ##check_NA_values + BOOL_NA <- rep(FALSE,length(DatesR)); + if("GR" %in% ObjectClass){ + BOOL_NA_TMP <- (Precip < 0) | is.na(Precip ); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in Precip series \n"); } } + BOOL_NA_TMP <- (PotEvap < 0) | is.na(PotEvap); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in PotEvap series \n"); } } + } + if("CemaNeige" %in% ObjectClass){ + BOOL_NA_TMP <- (Precip < 0 ) | is.na(Precip ); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < 0 or NA values detected in Precip series \n"); } } + BOOL_NA_TMP <- (TempMean<(-150)) | is.na(TempMean); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMean series \n"); } } + if(!is.null(TempMin) & !is.null(TempMax)){ + BOOL_NA_TMP <- (TempMin<(-150)) | is.na(TempMin); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMin series \n"); } } + BOOL_NA_TMP <- (TempMax<(-150)) | is.na(TempMax); if(sum(BOOL_NA_TMP)!=0){ BOOL_NA <- BOOL_NA | BOOL_NA_TMP; if(!quiet){ warning("\t Values < -150) or NA values detected in TempMax series \n"); } } } + } + if(sum(BOOL_NA)!=0){ + WTxt <- NULL; + WTxt <- paste(WTxt,"\t Missing values are not allowed in InputsModel \n",sep=""); + Select <- (max(which(BOOL_NA))+1):length(BOOL_NA); + if(Select[1]>Select[2]){ stop(paste("time series could not be trunced since missing values were detected at the list time-step \n",sep="")); return(NULL); } + if("GR" %in% ObjectClass){ + Precip <- Precip[Select]; PotEvap <- PotEvap[Select]; } + if("CemaNeige" %in% ObjectClass){ + Precip <- Precip[Select]; TempMean <- TempMean[Select]; if(!is.null(TempMin) & !is.null(TempMax)){ TempMin <- TempMin[Select]; TempMax <- TempMax[Select]; } } + WTxt <- paste(WTxt,"\t -> data were trunced to keep the most recent available time-steps \n",sep=""); + WTxt <- paste(WTxt,"\t -> ",length(Select)," time-steps were kept \n",sep=""); + if(!is.null(WTxt) & !quiet){ warning(WTxt); } + } + + + ##DataAltiExtrapolation_HBAN + if("CemaNeige" %in% ObjectClass){ + RESULT <- DataAltiExtrapolation_HBAN(DatesR=DatesR,Precip=Precip,TempMean=TempMean,TempMin=TempMin,TempMax=TempMax,ZInputs=ZInputs,HypsoData=HypsoData,NLayers=NLayers,quiet=quiet); + if(!quiet){ if(NLayers==1){ cat(paste("\t Input series were successfully created on 1 elevation layer for use by CemaNeige \n",sep="")); + } else { cat(paste("\t Input series were successfully created on ",NLayers," elevation layers for use by CemaNeige \n",sep="")); } } + } + + + ##Create_InputsModel + InputsModel <- list(DatesR=DatesR); + if("GR" %in% ObjectClass){ + InputsModel <- c(InputsModel,list(Precip=as.double(Precip),PotEvap=as.double(PotEvap))); } + if("CemaNeige" %in% ObjectClass){ + InputsModel <- c(InputsModel,list(LayerPrecip=RESULT$LayerPrecip,LayerTempMean=RESULT$LayerTempMean, + LayerFracSolidPrecip=RESULT$LayerFracSolidPrecip,ZLayers=RESULT$ZLayers)); } + + class(InputsModel) <- c("InputsModel",ObjectClass); + return(InputsModel); + + +} + diff --git a/R/CreateRunOptions.R b/R/CreateRunOptions.R new file mode 100644 index 00000000..f5c778d8 --- /dev/null +++ b/R/CreateRunOptions.R @@ -0,0 +1,260 @@ +#************************************************************************************************* +#' Creation of the RunOptions object required to the RunModel functions. +#' +#' Users wanting to use FUN_MOD functions that are not included in +#' the package must create their own RunOptions object accordingly. +#' +#' ##### Initialisation options ##### +#' +#' The model initialisation options can either be set to a default configuration or be defined by the user. +#' +#' This is done via three vectors: \cr \emph{IndPeriod_WarmUp}, \emph{IniStates}, \emph{IniResLevels}. \cr +#' A default configuration is used for initialisation if these vectors are not defined. +#' +#' (1) Default initialisation options: +#' +#' \itemize{ +#' \item \emph{IndPeriod_WarmUp} default setting ensures a one-year warm-up using the time-steps preceding the \emph{IndPeriod_Run}. +#' The actual length of this warm-up might be shorter depending on data availability (no missing value being allowed on model input series). +#' +#' \item \emph{IniStates} and \emph{IniResLevels} are automatically set to initialise all the model states at 0, except for the production and routing stores which are initialised at 50\% of their capacity. This initialisation is made at the very beginning of the model call (i.e. at the beginning of \emph{IndPeriod_WarmUp} or at the beginning of IndPeriod_Run if the warm-up period is disabled). +#' } +#' +#' (2) Customisation of initialisation options: +#' +#' \itemize{ +#' \item \emph{IndPeriod_WarmUp} can be used to specify the indices of the warm-up period (within the time-series prepared in InputsModel). \cr +#' - remark 1: for most common cases, indices corresponding to one or several years preceding \emph{IndPeriod_Run} are used (e.g. \emph{IndPeriod_WarmUp <- 1000:1365} and \emph{IndPeriod_Run <- 1366:5000)}. \cr +#' However, it is also possible to perform a long-term initialisation if other indices than the warm-up ones are set in \emph{IndPeriod_WarmUp} (e.g. \emph{IndPeriod_WarmUp <- c( 1:5000 , 1:5000 , 1:5000 ,1000:1365 )}). \cr +#' - remark 2: it is also possible to completely disable the warm-up period when using \emph{IndPeriod_WarmUp <- 0}. +#' +#' \item \emph{IniStates} and \emph{IniResLevels} can be used to specify the initial model states. \cr +#' - remark 1: if \emph{IniStates} is used, all model states must be provided (e.g. 60 floats [mm] are required for GR4J, GR5J and GR6J; 60+2*NLayers floats [mm] are required for CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J; see fortran source code for details). \cr +#' - remark 2: in addition to \emph{IniStates}, \emph{IniResLevels} allows to set the filling rate of the production and routing stores for the GR models. For instance for GR4J, GR5J and GR6J: \emph{IniResLevels <- c(0.3,0.5)} should be used to obtain initial fillings of 30\% and 50\% for the production and routing stores, respectively. \emph{IniResLevels} is optional and can only be used if \emph{IniStates} is also defined (the state values corresponding to these two stores in \emph{IniStates} are not used in such case). \cr \cr +#' } +#************************************************************************************************* +#' @title Creation of the RunOptions object required to the RunModel functions +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}} +#' @example tests/example_RunModel.R +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________ +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param IndPeriod_WarmUp (optional) [numeric] index of period to be used for the model warm-up [-] +#' @param IndPeriod_Run [numeric] index of period to be used for the model run [-] +#' @param IniStates (optional) [numeric] vector of initial model states [mm] +#' @param IniResLevels (optional) [numeric] vector of initial filling rates for production and routing stores (2 values between 0 and 1) [-] +#' @param Outputs_Cal (optional) [character] vector giving the outputs needed for the calibration \cr (e.g. c("Qsim")), the least outputs the fastest the calibration +#' @param Outputs_Sim (optional) [character] vector giving the requested outputs \cr (e.g. c("DatesR","Qsim","SnowPack")), default="all" +#' @param RunSnowModule (optional) [boolean] option indicating whether CemaNeige should be activated, default=TRUE +#' @param MeanAnSolidPrecip (optional) [numeric] vector giving the annual mean of average solid precipitation for each layer (computed from InputsModel if not defined) [mm/y] +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________ +#' @return [list] object of class \emph{RunOptions} containing the data required to evaluate the model outputs; it can include the following: +#' \tabular{ll}{ +#' \emph{IndPeriod_WarmUp } \tab [numeric] index of period to be used for the model warm-up [-] \cr +#' \emph{IndPeriod_Run } \tab [numeric] index of period to be used for the model run [-] \cr +#' \emph{IniStates } \tab [numeric] vector of initial model states [mm] \cr +#' \emph{IniResLevels } \tab [numeric] vector of initial filling rates for production and routing stores [-] \cr +#' \emph{Outputs_Cal } \tab [character] character vector giving only the outputs needed for the calibration \cr +#' \emph{Outputs_Sim } \tab [character] character vector giving the requested outputs \cr +#' \emph{RunSnowModule } \tab [boolean] option indicating whether CemaNeige should be activated \cr +#' \emph{MeanAnSolidPrecip} \tab [numeric] vector giving the annual mean of average solid precipitation for each layer [mm/y] \cr +#' } +#**************************************************************************************************' +CreateRunOptions <- function(FUN_MOD,InputsModel,IndPeriod_WarmUp=NULL,IndPeriod_Run,IniStates=NULL,IniResLevels=NULL, + Outputs_Cal=NULL,Outputs_Sim="all",RunSnowModule=TRUE,MeanAnSolidPrecip=NULL,quiet=FALSE){ + + + ObjectClass <- NULL; + + + ##check_FUN_MOD + BOOL <- FALSE; + if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_GR6J)){ + ObjectClass <- c(ObjectClass,"GR","daily"); + BOOL <- TRUE; + } + if(identical(FUN_MOD,RunModel_CemaNeige)){ + ObjectClass <- c(ObjectClass,"CemaNeige","daily"); + BOOL <- TRUE; + } + if(identical(FUN_MOD,RunModel_CemaNeigeGR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ + ObjectClass <- c(ObjectClass,"GR","CemaNeige","daily"); + BOOL <- TRUE; + } + if(!BOOL){ stop("incorrect FUN_MOD for use in CreateRunOptions \n"); return(NULL); } + + + ##check_InputsModel + if(!inherits(InputsModel,"InputsModel")){ + stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if("daily" %in% ObjectClass & !inherits(InputsModel,"daily")){ + stop("InputsModel must be of class 'daily' \n"); return(NULL); } + + + ##check_IndPeriod_Run + if(!is.vector( IndPeriod_Run)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } + if(!is.numeric(IndPeriod_Run)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } + if(identical(as.integer(IndPeriod_Run),as.integer(seq(from=IndPeriod_Run[1],to=tail(IndPeriod_Run,1),by=1)))==FALSE){ + stop("IndPeriod_Run must be a continuous sequence of integers \n"); return(NULL); } + if(storage.mode(IndPeriod_Run)!="integer"){ stop("IndPeriod_Run should be of type integer \n"); return(NULL); } + + + ##check_IndPeriod_WarmUp + WTxt <- NULL; + if(is.null(IndPeriod_WarmUp)){ + WTxt <- paste(WTxt,"\t Model warm-up period not defined -> default configuration used \n",sep=""); + ##If_the_run_period_starts_at_the_very_beginning_of_the_time_series + if(IndPeriod_Run[1]==as.integer(1)){ + IndPeriod_WarmUp <- as.integer(0); + WTxt <- paste(WTxt,"\t No data were found for model warm-up! \n",sep=""); + ##We_look_for_the_longest_period_preceeding_the_run_period_with_a_maximum_of_one_year + } else { + TmpDateR <- InputsModel$DatesR[IndPeriod_Run[1]] - 365*24*60*60; ### minimal date to start the warmup + IndPeriod_WarmUp <- which(InputsModel$DatesR==max(InputsModel$DatesR[1],TmpDateR)) : (IndPeriod_Run[1]-1); + if("daily" %in% ObjectClass){ TimeStep <- as.integer( 24*60*60); } + if(length(IndPeriod_WarmUp)*TimeStep/(365*24*60*60)>=1){ + WTxt <- paste(WTxt,"\t The year preceding the run period is used \n",sep=""); + } else { + WTxt <- paste(WTxt,"\t Less than a year (without missing values) was found for model warm-up: \n",sep=""); + WTxt <- paste(WTxt,"\t Only ",length(IndPeriod_WarmUp)," time-steps are used! \n",sep=""); + } + } + } + if(!is.null(IndPeriod_WarmUp)){ + if(!is.vector( IndPeriod_WarmUp)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } + if(!is.numeric(IndPeriod_WarmUp)){ stop("IndPeriod_Run must be a vector of numeric values \n"); return(NULL); } + if(storage.mode(IndPeriod_WarmUp)!="integer"){ stop("IndPeriod_Run should be of type integer \n"); return(NULL); } + if(identical(IndPeriod_WarmUp,as.integer(0))){ + WTxt <- paste(WTxt,"\t No warm-up period is used! \n",sep=""); } + if((IndPeriod_Run[1]-1)!=tail(IndPeriod_WarmUp,1)){ + WTxt <- paste(WTxt,"\t Model warm-up period is not directly before the model run period \n",sep=""); } + } + if(!is.null(WTxt) & !quiet){ warning(WTxt); } + + + ##check_IniStates_and_IniResLevels + if(is.null(IniStates) & is.null(IniResLevels) & !quiet){ + warning("\t Model states initialisation not defined -> default configuration used \n"); } + if("GR" %in% ObjectClass){ + if("daily" %in% ObjectClass){ NH <- 20; } + } else { + NH <- 0; + } + if("CemaNeige" %in% ObjectClass){ NLayers <- length(InputsModel$LayerPrecip); } else { NLayers <- 0; } + NState <- 3*NH + 2*NLayers; + if(!is.null(IniStates)){ + if(!is.vector( IniStates) ){ stop("IniStates must be a vector of numeric values \n"); return(NULL); } + if(!is.numeric(IniStates) ){ stop("IniStates must be a vector of numeric values \n"); return(NULL); } + if(length(IniStates)!=NState){ stop(paste("the length of IniStates must be ",NState," for the chosen FUN_MOD \n",sep="")); return(NULL); } + } else { + IniStates <- as.double(rep(0.0,NState)); + } + if(!is.null(IniResLevels)){ + if(!is.vector(IniResLevels) ){ stop("IniResLevels must be a vector of numeric values \n"); return(NULL); } + if(!is.numeric(IniResLevels)){ stop("IniResLevels must be a vector of numeric values \n"); return(NULL); } + if(length(IniResLevels)!=2 ) { stop("the length of IniStates must be 2 for the chosen FUN_MOD \n"); return(NULL); } + } else { + if("GR" %in% ObjectClass){ IniResLevels <- as.double(c(0.3,0.5)); } + } + + + ##check_Outputs_Cal_and_Sim + + ##Outputs_all + Outputs_all <- NULL; + if(identical(FUN_MOD,RunModel_GR4J) | identical(FUN_MOD,RunModel_CemaNeigeGR4J)){ + Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); } + if(identical(FUN_MOD,RunModel_GR5J) | identical(FUN_MOD,RunModel_CemaNeigeGR5J)){ + Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); } + if(identical(FUN_MOD,RunModel_GR6J) | identical(FUN_MOD,RunModel_CemaNeigeGR6J)){ + Outputs_all <- c(Outputs_all,"PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim"); } + if("CemaNeige" %in% ObjectClass){ + Outputs_all <- c(Outputs_all,"Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); } + + ##check_Outputs_Sim + if(!is.vector( Outputs_Sim)){ stop("Outputs_Sim must be a vector of characters \n"); return(NULL); } + if(!is.character(Outputs_Sim)){ stop("Outputs_Sim must be a vector of characters \n"); return(NULL); } + if(sum(is.na(Outputs_Sim))!=0){ stop("Outputs_Sim must not contain NA \n"); return(NULL); } + if("all" %in% Outputs_Sim){ Outputs_Sim <- c("DatesR",Outputs_all,"StateEnd"); } + Test <- which(Outputs_Sim %in% c("DatesR",Outputs_all,"StateEnd") == FALSE); if(length(Test)!=0){ + stop(paste("Outputs_Sim is incorrectly defined: ",paste(Outputs_Sim[Test],collapse=", ")," not found \n",sep="")); return(NULL); } + Outputs_Sim <- Outputs_Sim[!duplicated(Outputs_Sim)]; + + ##check_Outputs_Cal + if(is.null(Outputs_Cal)){ + if("GR" %in% ObjectClass ){ Outputs_Cal <- c("Qsim"); } + if("CemaNeige" %in% ObjectClass ){ Outputs_Cal <- c("all"); } + if("GR" %in% ObjectClass & "CemaNeige" %in% ObjectClass){ Outputs_Cal <- c("PliqAndMelt","Qsim"); } + } else { + if(!is.vector( Outputs_Cal)){ stop("Outputs_Cal must be a vector of characters \n"); return(NULL); } + if(!is.character(Outputs_Cal)){ stop("Outputs_Cal must be a vector of characters \n"); return(NULL); } + if(sum(is.na(Outputs_Cal))!=0){ stop("Outputs_Cal must not contain NA \n"); return(NULL); } + } + if("all" %in% Outputs_Cal){ Outputs_Cal <- c("DatesR",Outputs_all,"StateEnd"); } + Test <- which(Outputs_Cal %in% c("DatesR",Outputs_all,"StateEnd") == FALSE); if(length(Test)!=0){ + stop(paste("Outputs_Cal is incorrectly defined: ",paste(Outputs_Cal[Test],collapse=", ")," not found \n",sep="")); return(NULL); } + Outputs_Cal <- Outputs_Cal[!duplicated(Outputs_Cal)]; + + + ##check_RunSnowModule + if("CemaNeige" %in% ObjectClass){ + if(!is.vector( RunSnowModule)){ stop("RunSnowModule must be a single boolean \n"); return(NULL); } + if(!is.logical(RunSnowModule)){ stop("RunSnowModule must be either TRUE or FALSE \n"); return(NULL); } + if(length(RunSnowModule)!=1 ){ stop("RunSnowModule must be either TRUE or FALSE \n"); return(NULL); } + } + + + ##check_MeanAnSolidPrecip + if("CemaNeige" %in% ObjectClass & is.null(MeanAnSolidPrecip)){ + NLayers <- length(InputsModel$LayerPrecip); + SolidPrecip <- NULL; for(iLayer in 1:NLayers){ + if(iLayer==1){ SolidPrecip <- InputsModel$LayerFracSolidPrecip[[1]]*InputsModel$LayerPrecip[[iLayer]]/NLayers; + } else { SolidPrecip <- SolidPrecip + InputsModel$LayerFracSolidPrecip[[iLayer]]*InputsModel$LayerPrecip[[iLayer]]/NLayers; } } + Factor <- NULL; + if(inherits(InputsModel,"hourly" )){ Factor <- 365.25*24; } + if(inherits(InputsModel,"daily" )){ Factor <- 365.25; } + if(inherits(InputsModel,"monthly")){ Factor <- 12; } + if(inherits(InputsModel,"yearly" )){ Factor <- 1; } + if(is.null(Factor)){ stop("InputsModel must be of class 'hourly', 'daily', 'monthly' or 'yearly' \n"); return(NULL); } + MeanAnSolidPrecip <- rep(mean(SolidPrecip)*Factor,NLayers); ### default value: same Gseuil for all layers + if(!quiet){ warning("\t MeanAnSolidPrecip not defined -> it was automatically set to c(",paste(round(MeanAnSolidPrecip),collapse=","),") \n"); } + } + if("CemaNeige" %in% ObjectClass & !is.null(MeanAnSolidPrecip)){ + if(!is.vector( MeanAnSolidPrecip) ){ stop(paste("MeanAnSolidPrecip must be a vector of numeric values \n",sep="")); return(NULL); } + if(!is.numeric(MeanAnSolidPrecip) ){ stop(paste("MeanAnSolidPrecip must be a vector of numeric values \n",sep="")); return(NULL); } + if(length(MeanAnSolidPrecip)!=NLayers){ stop(paste("MeanAnSolidPrecip must be a numeric vector of length ",NLayers," \n",sep="")); return(NULL); } + } + + + ##check_PliqAndMelt + if(RunSnowModule & "GR" %in% ObjectClass & "CemaNeige" %in% ObjectClass){ + if("PliqAndMelt" %in% Outputs_Cal == FALSE & "all" %in% Outputs_Cal == FALSE){ + WTxt <- NULL; + WTxt <- paste(WTxt,"\t PliqAndMelt was not defined in Outputs_Cal but is needed to feed the hydrological model with the snow module outputs \n",sep=""); + WTxt <- paste(WTxt,"\t -> it was automatically added \n",sep=""); + if(!is.null(WTxt) & !quiet){ warning(WTxt); } + Outputs_Cal <- c(Outputs_Cal,"PliqAndMelt"); } + if("PliqAndMelt" %in% Outputs_Sim == FALSE & "all" %in% Outputs_Sim == FALSE){ + WTxt <- NULL; + WTxt <- paste(WTxt,"\t PliqAndMelt was not defined in Outputs_Sim but is needed to feed the hydrological model with the snow module outputs \n",sep=""); + WTxt <- paste(WTxt,"\t -> it was automatically added \n",sep=""); + if(!is.null(WTxt) & !quiet){ warning(WTxt); } + Outputs_Sim <- c(Outputs_Sim,"PliqAndMelt"); } + } + + + ##Create_RunOptions + RunOptions <- list(IndPeriod_WarmUp=IndPeriod_WarmUp,IndPeriod_Run=IndPeriod_Run,IniStates=IniStates,IniResLevels=IniResLevels, + Outputs_Cal=Outputs_Cal,Outputs_Sim=Outputs_Sim); + if("CemaNeige" %in% ObjectClass){ + RunOptions <- c(RunOptions,list(RunSnowModule=RunSnowModule,MeanAnSolidPrecip=MeanAnSolidPrecip)); } + class(RunOptions) <- c("RunOptions",ObjectClass); + return(RunOptions); + + +} + diff --git a/R/DataAltiExtrapolation_HBAN.R b/R/DataAltiExtrapolation_HBAN.R new file mode 100644 index 00000000..7a5354b6 --- /dev/null +++ b/R/DataAltiExtrapolation_HBAN.R @@ -0,0 +1,540 @@ +#***************************************************************************************************************** +#' Function which extrapolates the precipitation and air temperature series for different elevation layers (method from Valery, 2010). +#' +#' Elevation layers of equal surface are created the 101 elevation quantiles (\emph{HypsoData}) +#' and the number requested elevation layers (\emph{NLayers}). \cr +#' Forcing data (precipitation and air temperature) are extrapolated using gradients from Valery (2010). +#' (e.g. gradP=0.0004 [m-1] for France and gradT=0.434 [degreC/100m] for January, 1st). \cr +#' This function is used by the \emph{CreateInputsModel} function. \cr +#***************************************************************************************************************** +#' @title Altitudinal extrapolation of precipitation and temperature series +#' @author Laurent Coron, Pierre Brigode (June 2014) +#' @references +#' Turcotte, R., L.-G. Fortin, V. Fortin, J.-P. Fortin and J.-P. Villeneuve (2007), +#' Operational analysis of the spatial distribution and the temporal evolution of the snowpack water equivalent +#' in southern Quebec, Canada, Nordic Hydrology, 38(3), 211, doi:10.2166/nh.2007.009. \cr +#' Valéry, A. (2010), Modélisation précipitations-débit sous influence nivale ? : Elaboration d'un module neige +#' et évaluation sur 380 bassins versants, PhD thesis (in french), AgroParisTech, Paris, France. \cr +#' USACE (1956), Snow Hydrology, pp. 437, U.S. Army Coprs of Engineers (USACE) North Pacific Division, Portland, Oregon, USA. +#' @seealso \code{\link{CreateInputsModel}}, \code{\link{RunModel_CemaNeigeGR4J}} +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param DatesR [POSIXlt] vector of dates +#' @param Precip [numeric] time series of daily total precipitation (catchment average) [mm] +#' @param TempMean [numeric] time series of daily mean air temperature [degC] +#' @param TempMin (optional) [numeric] time series of daily min air temperature [degC] +#' @param TempMax (optional) [numeric] time series of daily max air temperature [degC] +#' @param ZInputs [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m] +#' @param HypsoData [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m] +#' @param NLayers [numeric] integer giving the number of elevation layers requested [-] +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return list containing the extrapolated series of precip. and air temp. on each elevation layer +#' \tabular{ll}{ +#' \emph{$LayerPrecip } \tab [list] list of time series of daily precipitation (layer average) [mm] \cr +#' \emph{$LayerTempMean } \tab [list] list of time series of daily mean air temperature (layer average) [degC] \cr +#' \emph{$LayerTempMin } \tab [list] list of time series of daily min air temperature (layer average) [degC] \cr +#' \emph{$LayerTempMax } \tab [list] list of time series of daily max air temperature (layer average) [degC] \cr +#' \emph{$LayerFracSolidPrecip} \tab [list] list of time series of daily solid precip. fract. (layer average) [-] \cr +#' \emph{$ZLayers } \tab [numeric] vector of median elevation for each layer \cr +#' } +#***************************************************************************************************************** +DataAltiExtrapolation_HBAN <- function(DatesR,Precip,TempMean,TempMin=NULL,TempMax=NULL,ZInputs,HypsoData,NLayers,quiet=FALSE){ + + + ##Altitudinal_gradient_functions_______________________________________________________________ + ##unique_gradient_for_precipitation + GradP_Valery2010 <- function(){ + return(0.00041); ### value from Val? PhD thesis page 126 + } + ##daily_gradients_for_mean_min_and_max_air_temperature + GradT_Valery2010 <- function(){ + RESULT <- matrix(c( + 1, 1, 0.434, 0.366, 0.498, + 2, 1, 0.434, 0.366, 0.500, + 3, 1, 0.435, 0.367, 0.501, + 4, 1, 0.436, 0.367, 0.503, + 5, 1, 0.437, 0.367, 0.504, + 6, 1, 0.439, 0.367, 0.506, + 7, 1, 0.440, 0.367, 0.508, + 8, 1, 0.441, 0.368, 0.510, + 9, 1, 0.442, 0.368, 0.512, + 10, 1, 0.444, 0.368, 0.514, + 11, 1, 0.445, 0.368, 0.517, + 12, 1, 0.446, 0.368, 0.519, + 13, 1, 0.448, 0.369, 0.522, + 14, 1, 0.450, 0.369, 0.525, + 15, 1, 0.451, 0.369, 0.527, + 16, 1, 0.453, 0.370, 0.530, + 17, 1, 0.455, 0.370, 0.533, + 18, 1, 0.456, 0.370, 0.537, + 19, 1, 0.458, 0.371, 0.540, + 20, 1, 0.460, 0.371, 0.543, + 21, 1, 0.462, 0.371, 0.547, + 22, 1, 0.464, 0.372, 0.550, + 23, 1, 0.466, 0.372, 0.554, + 24, 1, 0.468, 0.373, 0.558, + 25, 1, 0.470, 0.373, 0.561, + 26, 1, 0.472, 0.374, 0.565, + 27, 1, 0.474, 0.374, 0.569, + 28, 1, 0.476, 0.375, 0.573, + 29, 1, 0.478, 0.375, 0.577, + 30, 1, 0.480, 0.376, 0.582, + 31, 1, 0.483, 0.376, 0.586, + 1, 2, 0.485, 0.377, 0.590, + 2, 2, 0.487, 0.377, 0.594, + 3, 2, 0.489, 0.378, 0.599, + 4, 2, 0.492, 0.379, 0.603, + 5, 2, 0.494, 0.379, 0.607, + 6, 2, 0.496, 0.380, 0.612, + 7, 2, 0.498, 0.381, 0.616, + 8, 2, 0.501, 0.381, 0.621, + 9, 2, 0.503, 0.382, 0.625, + 10, 2, 0.505, 0.383, 0.630, + 11, 2, 0.508, 0.384, 0.634, + 12, 2, 0.510, 0.384, 0.639, + 13, 2, 0.512, 0.385, 0.643, + 14, 2, 0.515, 0.386, 0.648, + 15, 2, 0.517, 0.387, 0.652, + 16, 2, 0.519, 0.387, 0.657, + 17, 2, 0.522, 0.388, 0.661, + 18, 2, 0.524, 0.389, 0.666, + 19, 2, 0.526, 0.390, 0.670, + 20, 2, 0.528, 0.391, 0.674, + 21, 2, 0.530, 0.392, 0.679, + 22, 2, 0.533, 0.393, 0.683, + 23, 2, 0.535, 0.393, 0.687, + 24, 2, 0.537, 0.394, 0.691, + 25, 2, 0.539, 0.395, 0.695, + 26, 2, 0.541, 0.396, 0.699, + 27, 2, 0.543, 0.397, 0.703, + 28, 2, 0.545, 0.398, 0.707, + 29, 2, 0.546, 0.399, 0.709, + 1, 3, 0.547, 0.399, 0.711, + 2, 3, 0.549, 0.400, 0.715, + 3, 3, 0.551, 0.401, 0.718, + 4, 3, 0.553, 0.402, 0.722, + 5, 3, 0.555, 0.403, 0.726, + 6, 3, 0.557, 0.404, 0.729, + 7, 3, 0.559, 0.405, 0.732, + 8, 3, 0.560, 0.406, 0.736, + 9, 3, 0.562, 0.406, 0.739, + 10, 3, 0.564, 0.407, 0.742, + 11, 3, 0.566, 0.408, 0.745, + 12, 3, 0.567, 0.409, 0.748, + 13, 3, 0.569, 0.410, 0.750, + 14, 3, 0.570, 0.411, 0.753, + 15, 3, 0.572, 0.412, 0.756, + 16, 3, 0.573, 0.413, 0.758, + 17, 3, 0.575, 0.414, 0.761, + 18, 3, 0.576, 0.415, 0.763, + 19, 3, 0.577, 0.416, 0.765, + 20, 3, 0.579, 0.417, 0.767, + 21, 3, 0.580, 0.417, 0.769, + 22, 3, 0.581, 0.418, 0.771, + 23, 3, 0.582, 0.419, 0.773, + 24, 3, 0.583, 0.420, 0.774, + 25, 3, 0.584, 0.421, 0.776, + 26, 3, 0.585, 0.422, 0.777, + 27, 3, 0.586, 0.422, 0.779, + 28, 3, 0.587, 0.423, 0.780, + 29, 3, 0.588, 0.424, 0.781, + 30, 3, 0.589, 0.425, 0.782, + 31, 3, 0.590, 0.425, 0.783, + 1, 4, 0.591, 0.426, 0.784, + 2, 4, 0.591, 0.427, 0.785, + 3, 4, 0.592, 0.427, 0.785, + 4, 4, 0.593, 0.428, 0.786, + 5, 4, 0.593, 0.429, 0.787, + 6, 4, 0.594, 0.429, 0.787, + 7, 4, 0.595, 0.430, 0.787, + 8, 4, 0.595, 0.431, 0.788, + 9, 4, 0.596, 0.431, 0.788, + 10, 4, 0.596, 0.432, 0.788, + 11, 4, 0.597, 0.432, 0.788, + 12, 4, 0.597, 0.433, 0.788, + 13, 4, 0.597, 0.433, 0.788, + 14, 4, 0.598, 0.434, 0.788, + 15, 4, 0.598, 0.434, 0.788, + 16, 4, 0.598, 0.435, 0.787, + 17, 4, 0.599, 0.435, 0.787, + 18, 4, 0.599, 0.436, 0.787, + 19, 4, 0.599, 0.436, 0.786, + 20, 4, 0.599, 0.436, 0.786, + 21, 4, 0.600, 0.437, 0.785, + 22, 4, 0.600, 0.437, 0.785, + 23, 4, 0.600, 0.437, 0.784, + 24, 4, 0.600, 0.438, 0.784, + 25, 4, 0.600, 0.438, 0.783, + 26, 4, 0.601, 0.438, 0.783, + 27, 4, 0.601, 0.438, 0.782, + 28, 4, 0.601, 0.439, 0.781, + 29, 4, 0.601, 0.439, 0.781, + 30, 4, 0.601, 0.439, 0.780, + 1, 5, 0.601, 0.439, 0.779, + 2, 5, 0.601, 0.439, 0.778, + 3, 5, 0.601, 0.439, 0.778, + 4, 5, 0.601, 0.440, 0.777, + 5, 5, 0.601, 0.440, 0.776, + 6, 5, 0.601, 0.440, 0.775, + 7, 5, 0.601, 0.440, 0.775, + 8, 5, 0.601, 0.440, 0.774, + 9, 5, 0.601, 0.440, 0.773, + 10, 5, 0.602, 0.440, 0.772, + 11, 5, 0.602, 0.440, 0.772, + 12, 5, 0.602, 0.440, 0.771, + 13, 5, 0.602, 0.440, 0.770, + 14, 5, 0.602, 0.440, 0.770, + 15, 5, 0.602, 0.440, 0.769, + 16, 5, 0.602, 0.440, 0.768, + 17, 5, 0.602, 0.440, 0.768, + 18, 5, 0.602, 0.440, 0.767, + 19, 5, 0.602, 0.440, 0.767, + 20, 5, 0.602, 0.440, 0.766, + 21, 5, 0.602, 0.440, 0.766, + 22, 5, 0.602, 0.440, 0.765, + 23, 5, 0.602, 0.440, 0.765, + 24, 5, 0.602, 0.440, 0.764, + 25, 5, 0.602, 0.440, 0.764, + 26, 5, 0.602, 0.440, 0.764, + 27, 5, 0.602, 0.439, 0.763, + 28, 5, 0.602, 0.439, 0.763, + 29, 5, 0.602, 0.439, 0.763, + 30, 5, 0.602, 0.439, 0.762, + 31, 5, 0.602, 0.439, 0.762, + 1, 6, 0.602, 0.439, 0.762, + 2, 6, 0.602, 0.439, 0.762, + 3, 6, 0.602, 0.439, 0.762, + 4, 6, 0.602, 0.439, 0.762, + 5, 6, 0.602, 0.439, 0.762, + 6, 6, 0.602, 0.438, 0.761, + 7, 6, 0.602, 0.438, 0.761, + 8, 6, 0.602, 0.438, 0.761, + 9, 6, 0.602, 0.438, 0.761, + 10, 6, 0.602, 0.438, 0.761, + 11, 6, 0.602, 0.438, 0.762, + 12, 6, 0.602, 0.438, 0.762, + 13, 6, 0.602, 0.438, 0.762, + 14, 6, 0.602, 0.438, 0.762, + 15, 6, 0.602, 0.437, 0.762, + 16, 6, 0.602, 0.437, 0.762, + 17, 6, 0.602, 0.437, 0.762, + 18, 6, 0.602, 0.437, 0.762, + 19, 6, 0.602, 0.437, 0.763, + 20, 6, 0.602, 0.437, 0.763, + 21, 6, 0.602, 0.437, 0.763, + 22, 6, 0.602, 0.436, 0.763, + 23, 6, 0.602, 0.436, 0.763, + 24, 6, 0.602, 0.436, 0.764, + 25, 6, 0.602, 0.436, 0.764, + 26, 6, 0.601, 0.436, 0.764, + 27, 6, 0.601, 0.436, 0.764, + 28, 6, 0.601, 0.436, 0.764, + 29, 6, 0.601, 0.435, 0.765, + 30, 6, 0.601, 0.435, 0.765, + 1, 7, 0.601, 0.435, 0.765, + 2, 7, 0.600, 0.435, 0.765, + 3, 7, 0.600, 0.435, 0.765, + 4, 7, 0.600, 0.434, 0.766, + 5, 7, 0.600, 0.434, 0.766, + 6, 7, 0.599, 0.434, 0.766, + 7, 7, 0.599, 0.434, 0.766, + 8, 7, 0.599, 0.434, 0.766, + 9, 7, 0.598, 0.433, 0.766, + 10, 7, 0.598, 0.433, 0.766, + 11, 7, 0.598, 0.433, 0.766, + 12, 7, 0.597, 0.433, 0.766, + 13, 7, 0.597, 0.432, 0.767, + 14, 7, 0.597, 0.432, 0.767, + 15, 7, 0.596, 0.432, 0.767, + 16, 7, 0.596, 0.432, 0.766, + 17, 7, 0.595, 0.431, 0.766, + 18, 7, 0.595, 0.431, 0.766, + 19, 7, 0.594, 0.431, 0.766, + 20, 7, 0.594, 0.430, 0.766, + 21, 7, 0.593, 0.430, 0.766, + 22, 7, 0.593, 0.430, 0.766, + 23, 7, 0.592, 0.429, 0.765, + 24, 7, 0.592, 0.429, 0.765, + 25, 7, 0.591, 0.428, 0.765, + 26, 7, 0.590, 0.428, 0.765, + 27, 7, 0.590, 0.428, 0.764, + 28, 7, 0.589, 0.427, 0.764, + 29, 7, 0.588, 0.427, 0.764, + 30, 7, 0.588, 0.426, 0.763, + 31, 7, 0.587, 0.426, 0.763, + 1, 8, 0.586, 0.425, 0.762, + 2, 8, 0.586, 0.425, 0.762, + 3, 8, 0.585, 0.424, 0.761, + 4, 8, 0.584, 0.424, 0.761, + 5, 8, 0.583, 0.423, 0.760, + 6, 8, 0.583, 0.423, 0.760, + 7, 8, 0.582, 0.422, 0.759, + 8, 8, 0.581, 0.421, 0.758, + 9, 8, 0.580, 0.421, 0.758, + 10, 8, 0.579, 0.420, 0.757, + 11, 8, 0.578, 0.420, 0.756, + 12, 8, 0.578, 0.419, 0.755, + 13, 8, 0.577, 0.418, 0.754, + 14, 8, 0.576, 0.418, 0.754, + 15, 8, 0.575, 0.417, 0.753, + 16, 8, 0.574, 0.416, 0.752, + 17, 8, 0.573, 0.415, 0.751, + 18, 8, 0.572, 0.415, 0.750, + 19, 8, 0.571, 0.414, 0.749, + 20, 8, 0.570, 0.413, 0.748, + 21, 8, 0.569, 0.413, 0.747, + 22, 8, 0.569, 0.412, 0.746, + 23, 8, 0.568, 0.411, 0.745, + 24, 8, 0.567, 0.410, 0.744, + 25, 8, 0.566, 0.409, 0.743, + 26, 8, 0.565, 0.409, 0.742, + 27, 8, 0.564, 0.408, 0.741, + 28, 8, 0.563, 0.407, 0.740, + 29, 8, 0.562, 0.406, 0.738, + 30, 8, 0.561, 0.405, 0.737, + 31, 8, 0.560, 0.405, 0.736, + 1, 9, 0.558, 0.404, 0.735, + 2, 9, 0.557, 0.403, 0.734, + 3, 9, 0.556, 0.402, 0.732, + 4, 9, 0.555, 0.401, 0.731, + 5, 9, 0.554, 0.401, 0.730, + 6, 9, 0.553, 0.400, 0.728, + 7, 9, 0.552, 0.399, 0.727, + 8, 9, 0.551, 0.398, 0.725, + 9, 9, 0.550, 0.397, 0.724, + 10, 9, 0.549, 0.396, 0.723, + 11, 9, 0.548, 0.396, 0.721, + 12, 9, 0.546, 0.395, 0.720, + 13, 9, 0.545, 0.394, 0.718, + 14, 9, 0.544, 0.393, 0.717, + 15, 9, 0.543, 0.392, 0.715, + 16, 9, 0.542, 0.391, 0.713, + 17, 9, 0.541, 0.391, 0.712, + 18, 9, 0.540, 0.390, 0.710, + 19, 9, 0.538, 0.389, 0.709, + 20, 9, 0.537, 0.388, 0.707, + 21, 9, 0.536, 0.388, 0.705, + 22, 9, 0.535, 0.387, 0.703, + 23, 9, 0.533, 0.386, 0.702, + 24, 9, 0.532, 0.385, 0.700, + 25, 9, 0.531, 0.385, 0.698, + 26, 9, 0.530, 0.384, 0.696, + 27, 9, 0.528, 0.383, 0.694, + 28, 9, 0.527, 0.383, 0.692, + 29, 9, 0.526, 0.382, 0.690, + 30, 9, 0.525, 0.381, 0.688, + 1, 10, 0.523, 0.381, 0.686, + 2, 10, 0.522, 0.380, 0.684, + 3, 10, 0.521, 0.379, 0.682, + 4, 10, 0.519, 0.379, 0.680, + 5, 10, 0.518, 0.378, 0.678, + 6, 10, 0.517, 0.377, 0.676, + 7, 10, 0.515, 0.377, 0.674, + 8, 10, 0.514, 0.376, 0.671, + 9, 10, 0.512, 0.376, 0.669, + 10, 10, 0.511, 0.375, 0.667, + 11, 10, 0.510, 0.375, 0.664, + 12, 10, 0.508, 0.374, 0.662, + 13, 10, 0.507, 0.374, 0.659, + 14, 10, 0.505, 0.373, 0.657, + 15, 10, 0.504, 0.373, 0.654, + 16, 10, 0.502, 0.372, 0.652, + 17, 10, 0.501, 0.372, 0.649, + 18, 10, 0.499, 0.372, 0.647, + 19, 10, 0.498, 0.371, 0.644, + 20, 10, 0.496, 0.371, 0.641, + 21, 10, 0.495, 0.371, 0.639, + 22, 10, 0.493, 0.370, 0.636, + 23, 10, 0.492, 0.370, 0.633, + 24, 10, 0.490, 0.370, 0.630, + 25, 10, 0.489, 0.369, 0.628, + 26, 10, 0.487, 0.369, 0.625, + 27, 10, 0.485, 0.369, 0.622, + 28, 10, 0.484, 0.368, 0.619, + 29, 10, 0.482, 0.368, 0.616, + 30, 10, 0.481, 0.368, 0.613, + 31, 10, 0.479, 0.368, 0.610, + 1, 11, 0.478, 0.368, 0.607, + 2, 11, 0.476, 0.367, 0.604, + 3, 11, 0.475, 0.367, 0.601, + 4, 11, 0.473, 0.367, 0.598, + 5, 11, 0.471, 0.367, 0.595, + 6, 11, 0.470, 0.367, 0.592, + 7, 11, 0.468, 0.367, 0.589, + 8, 11, 0.467, 0.366, 0.586, + 9, 11, 0.465, 0.366, 0.583, + 10, 11, 0.464, 0.366, 0.580, + 11, 11, 0.462, 0.366, 0.577, + 12, 11, 0.461, 0.366, 0.574, + 13, 11, 0.459, 0.366, 0.571, + 14, 11, 0.458, 0.366, 0.568, + 15, 11, 0.456, 0.366, 0.565, + 16, 11, 0.455, 0.366, 0.562, + 17, 11, 0.454, 0.366, 0.559, + 18, 11, 0.452, 0.365, 0.556, + 19, 11, 0.451, 0.365, 0.553, + 20, 11, 0.450, 0.365, 0.550, + 21, 11, 0.448, 0.365, 0.547, + 22, 11, 0.447, 0.365, 0.544, + 23, 11, 0.446, 0.365, 0.542, + 24, 11, 0.445, 0.365, 0.539, + 25, 11, 0.443, 0.365, 0.536, + 26, 11, 0.442, 0.365, 0.533, + 27, 11, 0.441, 0.365, 0.531, + 28, 11, 0.440, 0.365, 0.528, + 29, 11, 0.439, 0.365, 0.526, + 30, 11, 0.438, 0.365, 0.523, + 1, 12, 0.437, 0.365, 0.521, + 2, 12, 0.436, 0.365, 0.519, + 3, 12, 0.435, 0.365, 0.517, + 4, 12, 0.434, 0.365, 0.515, + 5, 12, 0.434, 0.365, 0.513, + 6, 12, 0.433, 0.365, 0.511, + 7, 12, 0.432, 0.365, 0.509, + 8, 12, 0.431, 0.365, 0.507, + 9, 12, 0.431, 0.365, 0.505, + 10, 12, 0.430, 0.365, 0.504, + 11, 12, 0.430, 0.365, 0.502, + 12, 12, 0.429, 0.365, 0.501, + 13, 12, 0.429, 0.365, 0.500, + 14, 12, 0.429, 0.365, 0.498, + 15, 12, 0.428, 0.365, 0.497, + 16, 12, 0.428, 0.365, 0.496, + 17, 12, 0.428, 0.365, 0.496, + 18, 12, 0.428, 0.365, 0.495, + 19, 12, 0.428, 0.365, 0.494, + 20, 12, 0.428, 0.365, 0.494, + 21, 12, 0.428, 0.365, 0.494, + 22, 12, 0.428, 0.365, 0.493, + 23, 12, 0.429, 0.365, 0.493, + 24, 12, 0.429, 0.366, 0.493, + 25, 12, 0.429, 0.366, 0.493, + 26, 12, 0.430, 0.366, 0.494, + 27, 12, 0.430, 0.366, 0.494, + 28, 12, 0.431, 0.366, 0.495, + 29, 12, 0.431, 0.366, 0.495, + 30, 12, 0.432, 0.366, 0.496, + 31, 12, 0.433, 0.366, 0.497),ncol=5,byrow=TRUE); + dimnames(RESULT) <- list(1:366,c("day","month","grad_Tmean","grad_Tmin","grad_Tmax")); + return(RESULT); + } + + + + ##Format_______________________________________________________________________________________ + HypsoData <- as.double(HypsoData); + ZInputs <- as.double(ZInputs); + + + ##ElevationLayers_Creation_____________________________________________________________________ + ZLayers <- as.double(rep(NA,NLayers)); + if(!identical(HypsoData,as.double(rep(NA,101)))){ + nmoy <- 100 %/% NLayers; + nreste <- 100 %% NLayers; + ncont <- 0; + for(iLayer in 1:NLayers){ + if(nreste > 0){ nn <- nmoy+1; nreste <- nreste-1; } else { nn <- nmoy; } + if(nn==1){ ZLayers[iLayer] <- HypsoData[ncont+1]; } + if(nn==2){ ZLayers[iLayer] <- 0.5 * (HypsoData[ncont+1] + HypsoData[ncont+2]); } + if(nn>2 ){ ZLayers[iLayer] <- HypsoData[ncont+nn/2]; } + ncont <- ncont+nn; + } + } + + + ##Precipitation_extrapolation__________________________________________________________________ + ##Initialisation + LayerPrecip <- list(); + if(identical(ZInputs,HypsoData[51]) & NLayers==1){ + LayerPrecip[[1]] <- as.double(Precip); + } else { + ##Elevation_gradients_for_daily_mean_precipitation + GradP <- GradP_Valery2010(); ### single value + TabGradP <- rep(GradP,length(Precip)); + ##Extrapolation + ##Thresold_of_inputs_median_elevation + Zthreshold <- 4000; + ##_On_each_elevation_layer... + for(iLayer in 1:NLayers){ + ##If_layer_elevation_smaller_than_Zthreshold + if(ZLayers[iLayer] <= Zthreshold){ + LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(ZLayers[iLayer]-ZInputs))); + ##If_layer_elevation_greater_than_Zthreshold + } else { + ##If_inputs_median_elevation_smaller_than_Zthreshold + if(ZInputs <= Zthreshold){ LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(Zthreshold-ZInputs))); + ##If_inputs_median_elevation_greater_then_Zthreshold + } else { LayerPrecip[[iLayer]] <- as.double(Precip); } + } + } + } + + + + ##Temperature_extrapolation____________________________________________________________________ + ##Initialisation + LayerTempMean <- list(); LayerTempMin <- list(); LayerTempMax <- list(); + if(identical(ZInputs,HypsoData[51]) & NLayers==1){ + LayerTempMean[[1]] <- as.double(TempMean); + if(!is.null(TempMin) & !is.null(TempMax)){ LayerTempMin[[1]] <- as.double(TempMin); LayerTempMax[[1]] <- as.double(TempMax); } + } else { + ##Elevation_gradients_for_daily_mean_min_and_max_temperature + GradT <- GradT_Valery2010(); ### Day, Month, GradTmean, GradTmin and GradTmax for iCol=1,2,3,4,5, respectively + TabGradT <- matrix(NA,nrow=length(Precip),ncol=3); + for(iday in 1:366){ + ind <- which(as.numeric(format(DatesR,format="%d"))==GradT[iday,1] & as.numeric(format(DatesR,format="%m"))==GradT[iday,2]); + TabGradT[ind,1:3] <- GradT[iday,3:5]; + } + ##Extrapolation + ##On_each_elevation_layer... + for(iLayer in 1:NLayers){ + LayerTempMean[[iLayer]] <- as.double(TempMean + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,1])/100); + if(!is.null(TempMin) & !is.null(TempMax)){ + LayerTempMin[[iLayer]] <- as.double(TempMin + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,2])/100); + LayerTempMax[[iLayer]] <- as.double(TempMax + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,3])/100); + } + } + } + + + + ##Solid_Fraction_for_each_elevation_layer______________________________________________________ + LayerFracSolidPrecip <- list(); + ##Thresold_of_inputs_median_elevation + Zthreshold <- 1500; + ##On_each_elevation_layer... + for(iLayer in 1:NLayers){ + Option <- "USACE"; + if(!is.na(ZInputs)){ if(ZInputs < Zthreshold & !is.null(TempMin) & !is.null(TempMax)){ Option <- "Hydrotel"; } } + ##Turcotte_formula_from_Hydrotel + if(Option=="Hydrotel"){ + TempMin <- LayerTempMin[[iLayer]]; + TempMax <- LayerTempMax[[iLayer]]; + SolidFraction <- 1 - TempMax/(TempMax - TempMin); + SolidFraction[TempMin >= 0] <- 0; + SolidFraction[TempMax <= 0] <- 1; + } + ##USACE_formula + if(Option=="USACE"){ + USACE_Tmin <- -1.0; + USACE_Tmax <- 3.0; + TempMean <- LayerTempMean[[iLayer]]; + SolidFraction <- 1- (TempMean - USACE_Tmin)/(USACE_Tmax - USACE_Tmin); + SolidFraction[TempMean > USACE_Tmax] <- 0; + SolidFraction[TempMean < USACE_Tmin] <- 1; + } + LayerFracSolidPrecip[[iLayer]] <- as.double(SolidFraction); + } + + + + + ##END__________________________________________________________________________________________ + return(list(LayerPrecip=LayerPrecip,LayerTempMean=LayerTempMean,LayerTempMin=LayerTempMin,LayerTempMax=LayerTempMax, + LayerFracSolidPrecip=LayerFracSolidPrecip,ZLayers=ZLayers)); + +} + + diff --git a/R/ErrorCrit.R b/R/ErrorCrit.R new file mode 100644 index 00000000..fe874c83 --- /dev/null +++ b/R/ErrorCrit.R @@ -0,0 +1,22 @@ +#***************************************************************************************************************** +#' Function which computes an error criterion with the provided function. +#***************************************************************************************************************** +#' @title Error criterion using the provided function +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}} +#' @example tests/example_ErrorCrit.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param OutputsModel [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#' @param FUN_CRIT [function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE) +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs, see \code{\link{ErrorCrit_RMSE}} or \code{\link{ErrorCrit_NSE}} for details +#*****************************************************************************************************************' +ErrorCrit <- function(InputsCrit,OutputsModel,FUN_CRIT,quiet=FALSE){ + return( FUN_CRIT(InputsCrit,OutputsModel,quiet=quiet) ) +} + diff --git a/R/ErrorCrit_KGE.R b/R/ErrorCrit_KGE.R new file mode 100644 index 00000000..96406587 --- /dev/null +++ b/R/ErrorCrit_KGE.R @@ -0,0 +1,122 @@ +#***************************************************************************************************************** +#' Function which computes an error criterion based on the KGE formula proposed by Gupta et al. (2009). +#' +#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +#***************************************************************************************************************** +#' @title Error criterion based on the KGE formula +#' @author Laurent Coron (June 2014) +#' @references +#' Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), +#' Decomposition of the mean squared error and NSE performance criteria: Implications +#' for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr +#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE2}} +#' @examples ## see example of the ErrorCrit function +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param OutputsModel [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$CritValue } \tab [numeric] value of the criterion \cr +#' \emph{$CritName } \tab [character] name of the criterion \cr +#' \emph{$SubCritValues } \tab [numeric] values of the sub-criteria \cr +#' \emph{$SubCritNames } \tab [character] names of the sub-criteria \cr +#' \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr +#' \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr +#' \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr +#' } +#***************************************************************************************************************** +ErrorCrit_KGE <- function(InputsCrit,OutputsModel,quiet=FALSE){ + + +##Arguments_check________________________________ + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); } + + +##Initialisation_________________________________ + CritName <- NA; + if(InputsCrit$transfo=="" ){ CritName <- "KGE[Q]" ; } + if(InputsCrit$transfo=="sqrt"){ CritName <- "KGE[sqrt(Q)]"; } + if(InputsCrit$transfo=="log" ){ CritName <- "KGE[log(Q)]" ; } + if(InputsCrit$transfo=="inv" ){ CritName <- "KGE[1/Q]" ; } + if(InputsCrit$transfo=="sort"){ CritName <- "KGE[sort(Q)]"; } + CritValue <- NA; + CritBestValue <- +1; + Multiplier <- -1; ### must be equal to -1 or +1 only + + +##Data_preparation_______________________________ + VarObs <- InputsCrit$Qobs ; VarObs[!InputsCrit$BoolCrit] <- NA; + VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA; + ##Data_transformation + if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){ + VarObs <- VarObs + InputsCrit$epsilon; + VarSim <- VarSim + InputsCrit$epsilon; + } } + if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); } + if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim < -1E100] <- NA; } + if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs ; VarSim <- 1/VarSim ; VarSim[abs(VarSim) > 1E+100] <- NA; } + if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); } + ##TS_ignore + TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ; + if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); } + if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); } + ##Other_variables_preparation + meanVarObs <- mean(VarObs[!TS_ignore]); + meanVarSim <- mean(VarSim[!TS_ignore]); + iCrit <- 0; + SubCritNames <- NULL; + SubCritValues <- NULL; + + + +##SubErrorCrit_____KGE_rPearson__________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," rPEARSON(sim vs. obs)",sep=""); + SubCritValues[iCrit] <- NA; + Numer <- sum( (VarObs[!TS_ignore]-meanVarObs)*(VarSim[!TS_ignore]-meanVarSim) ); + Deno1 <- sqrt( sum((VarObs[!TS_ignore]-meanVarObs)^2) ); + Deno2 <- sqrt( sum((VarSim[!TS_ignore]-meanVarSim)^2) ); + if(Numer==0){ if(Deno1==0 & Deno2==0){ Crit <- 1; } else { Crit <- 0; } + } else { Crit <- Numer/(Deno1*Deno2); } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##SubErrorCrit_____KGE_alpha_____________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," STDEVsim/STDEVobs",sep=""); + SubCritValues[iCrit] <- NA; + Numer <- sd(VarSim[!TS_ignore]); + Denom <- sd(VarObs[!TS_ignore]); + if(Numer==0 & Denom==0){ Crit <- 1; } else { Crit <- Numer/Denom ; } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##SubErrorCrit_____KGE_beta______________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," MEANsim/MEANobs",sep=""); + SubCritValues[iCrit] <- NA; + if(meanVarSim==0 & meanVarObs==0){ Crit <- 1; } else { Crit <- meanVarSim/meanVarObs ; } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##ErrorCrit______________________________________ + if(sum(is.na(SubCritValues))==0){ + CritValue <- ( 1 - sqrt( (SubCritValues[1]-1)^2 + (SubCritValues[2]-1)^2 + (SubCritValues[3]-1)^2 ) ); + } + + +##Output_________________________________________ + OutputsCrit <- list(CritValue,CritName,SubCritValues,SubCritNames,CritBestValue,Multiplier,which(TS_ignore)); + names(OutputsCrit) <- c("CritValue","CritName","SubCritValues","SubCritNames","CritBestValue","Multiplier","Ind_notcomputed"); + return(OutputsCrit); + +} + + diff --git a/R/ErrorCrit_KGE2.R b/R/ErrorCrit_KGE2.R new file mode 100644 index 00000000..d4424d72 --- /dev/null +++ b/R/ErrorCrit_KGE2.R @@ -0,0 +1,124 @@ +#***************************************************************************************************************** +#' Function which computes an error criterion based on the KGE' formula proposed by Kling et al. (2012). +#' +#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +#***************************************************************************************************************** +#' @title Error criterion based on the KGE' formula +#' @author Laurent Coron (June 2014) +#' @references +#' Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), +#' Decomposition of the mean squared error and NSE performance criteria: Implications +#' for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr +#' Kling, H., Fuchs, M. and Paulin, M. (2012), +#' Runoff conditions in the upper Danube basin under an ensemble of climate change scenarios, +#' Journal of Hydrology, 424-425, 264-277, doi:10.1016/j.jhydrol.2012.01.011. +#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}} +#' @examples ## see example of the ErrorCrit function +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param OutputsModel [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$CritValue } \tab [numeric] value of the criterion \cr +#' \emph{$CritName } \tab [character] name of the criterion \cr +#' \emph{$SubCritValues } \tab [numeric] values of the sub-criteria \cr +#' \emph{$SubCritNames } \tab [character] names of the sub-criteria \cr +#' \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr +#' \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr +#' \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr +#' } +#*****************************************************************************************************************' +ErrorCrit_KGE2 <- function(InputsCrit,OutputsModel,quiet=FALSE){ + + +##Arguments_check________________________________ + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); } + + +##Initialisation_________________________________ + CritName <- NA; + if(InputsCrit$transfo=="" ){ CritName <- "KGE'[Q]" ; } + if(InputsCrit$transfo=="sqrt"){ CritName <- "KGE'[sqrt(Q)]"; } + if(InputsCrit$transfo=="log" ){ CritName <- "KGE'[log(Q)]" ; } + if(InputsCrit$transfo=="inv" ){ CritName <- "KGE'[1/Q]" ; } + if(InputsCrit$transfo=="sort"){ CritName <- "KGE'[sort(Q)]"; } + CritValue <- NA; + CritBestValue <- +1; + Multiplier <- -1; ### must be equal to -1 or +1 only + + +##Data_preparation_______________________________ + VarObs <- InputsCrit$Qobs ; VarObs[!InputsCrit$BoolCrit] <- NA; + VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA; + ##Data_transformation + if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){ + VarObs <- VarObs + InputsCrit$epsilon; + VarSim <- VarSim + InputsCrit$epsilon; + } } + if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); } + if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim < -1E100] <- NA; } + if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs ; VarSim <- 1/VarSim ; VarSim[abs(VarSim) > 1E+100] <- NA; } + if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); } + ##TS_ignore + TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ; + if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); } + if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); } + ##Other_variables_preparation + meanVarObs <- mean(VarObs[!TS_ignore]); + meanVarSim <- mean(VarSim[!TS_ignore]); + iCrit <- 0; + SubCritNames <- NULL; + SubCritValues <- NULL; + + +##SubErrorCrit_____KGE_rPearson__________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," rPEARSON(sim vs. obs)",sep=""); + SubCritValues[iCrit] <- NA; + Numer <- sum( (VarObs[!TS_ignore]-meanVarObs)*(VarSim[!TS_ignore]-meanVarSim) ); + Deno1 <- sqrt( sum((VarObs[!TS_ignore]-meanVarObs)^2) ); + Deno2 <- sqrt( sum((VarSim[!TS_ignore]-meanVarSim)^2) ); + if(Numer==0){ if(Deno1==0 & Deno2==0){ Crit <- 1; } else { Crit <- 0; } + } else { Crit <- Numer/(Deno1*Deno2); } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##SubErrorCrit_____KGE_gama______________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," CVsim/CVobs",sep=""); + SubCritValues[iCrit] <- NA; + if(meanVarSim==0){ if(sd(VarSim[!TS_ignore])==0){ CVsim <- 1; } else { CVsim <- 99999; } } else { CVsim <- sd(VarSim[!TS_ignore])/meanVarSim; } + if(meanVarObs==0){ if(sd(VarObs[!TS_ignore])==0){ CVobs <- 1; } else { CVobs <- 99999; } } else { CVobs <- sd(VarObs[!TS_ignore])/meanVarObs; } + if(CVsim==0 & CVobs==0){ Crit <- 1; } else { Crit <- CVsim/CVobs ; } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##SubErrorCrit_____KGE_beta______________________ + iCrit <- iCrit+1; + SubCritNames[iCrit] <- paste(CritName," MEANsim/MEANobs",sep=""); + SubCritValues[iCrit] <- NA; + if(meanVarSim==0 & meanVarObs==0){ Crit <- 1; } else { Crit <- meanVarSim/meanVarObs ; } + if(is.numeric(Crit) & is.finite(Crit)){ SubCritValues[iCrit] <- Crit; } + + +##ErrorCrit______________________________________ + if(sum(is.na(SubCritValues))==0){ + CritValue <- ( 1 - sqrt( (SubCritValues[1]-1)^2 + (SubCritValues[2]-1)^2 + (SubCritValues[3]-1)^2 ) ); + } + + +##Output_________________________________________ + OutputsCrit <- list(CritValue,CritName,SubCritValues,SubCritNames,CritBestValue,Multiplier,which(TS_ignore)); + names(OutputsCrit) <- c("CritValue","CritName","SubCritValues","SubCritNames","CritBestValue","Multiplier","Ind_notcomputed"); + return(OutputsCrit); + +} + + diff --git a/R/ErrorCrit_NSE.R b/R/ErrorCrit_NSE.R new file mode 100644 index 00000000..7fcbb3ab --- /dev/null +++ b/R/ErrorCrit_NSE.R @@ -0,0 +1,87 @@ +#***************************************************************************************************************** +#' Function which computes an error criterion based on the NSE formula proposed by Nash & Sutcliffe (1970). +#' +#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +#***************************************************************************************************************** +#' @title Error criterion based on the NSE formula +#' @author Laurent Coron (June 2014) +#' @references +#' Nash, J.E. and Sutcliffe, J.V. (1970), +#' River flow forecasting through conceptual models part 1. +#' A discussion of principles, Journal of Hydrology, 10(3), 282-290, doi:10.1016/0022-1694(70)90255-6. \cr +#' @seealso \code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}} +#' @examples ## see example of the ErrorCrit function +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param OutputsModel [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$CritValue } \tab [numeric] value of the criterion \cr +#' \emph{$CritName } \tab [character] name of the criterion \cr +#' \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr +#' \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr +#' \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr +#' } +#***************************************************************************************************************** +ErrorCrit_NSE <- function(InputsCrit,OutputsModel,quiet=FALSE){ + + +##Arguments_check________________________________ + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); } + + +##Initialisation_________________________________ + CritName <- NA; + if(InputsCrit$transfo=="" ){ CritName <- "NSE[Q]" ; } + if(InputsCrit$transfo=="sqrt"){ CritName <- "NSE[sqrt(Q)]"; } + if(InputsCrit$transfo=="log" ){ CritName <- "NSE[log(Q)]" ; } + if(InputsCrit$transfo=="inv" ){ CritName <- "NSE[1/Q]" ; } + if(InputsCrit$transfo=="sort"){ CritName <- "NSE[sort(Q)]"; } + CritValue <- NA; + CritBestValue <- +1; + Multiplier <- -1; ### must be equal to -1 or +1 only + + +##Data_preparation_______________________________ + VarObs <- InputsCrit$Qobs ; VarObs[!InputsCrit$BoolCrit] <- NA; + VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA; + ##Data_transformation + if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){ + VarObs <- VarObs + InputsCrit$epsilon; + VarSim <- VarSim + InputsCrit$epsilon; + } } + if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); } + if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim < -1E100] <- NA; } + if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs ; VarSim <- 1/VarSim ; VarSim[abs(VarSim) > 1E+100] <- NA; } + if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); } + ##TS_ignore + TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ; + if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); } + if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); } + ##Other_variables_preparation + meanVarObs <- mean(VarObs[!TS_ignore]); + meanVarSim <- mean(VarSim[!TS_ignore]); + + +##ErrorCrit______________________________________ + Emod <- sum((VarSim[!TS_ignore]-VarObs[!TS_ignore])^2); + Eref <- sum((VarObs[!TS_ignore]-mean(VarObs[!TS_ignore]))^2); + if(Emod==0 & Eref==0){ Crit <- 0; } else { Crit <- (1-Emod/Eref); } + if(is.numeric(Crit) & is.finite(Crit)){ CritValue <- Crit; } + + +##Output_________________________________________ + OutputsCrit <- list(CritValue,CritName,CritBestValue,Multiplier,which(TS_ignore)); + names(OutputsCrit) <- c("CritValue","CritName","CritBestValue","Multiplier","Ind_notcomputed"); + return(OutputsCrit); + +} + + diff --git a/R/ErrorCrit_RMSE.R b/R/ErrorCrit_RMSE.R new file mode 100644 index 00000000..a5da7a3e --- /dev/null +++ b/R/ErrorCrit_RMSE.R @@ -0,0 +1,81 @@ +#***************************************************************************************************************** +#' Function which computes an error criterion based on the root mean square error (RMSE). +#' +#' In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +#' the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +#' (e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +#***************************************************************************************************************** +#' @title Error criterion based on the RMSE +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}} +#' @examples ## see example of the ErrorCrit function +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsCrit [object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details +#' @param OutputsModel [object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$CritValue } \tab [numeric] value of the criterion \cr +#' \emph{$CritName } \tab [character] name of the criterion \cr +#' \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr +#' \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr +#' \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr +#' } +#***************************************************************************************************************** +ErrorCrit_RMSE <- function(InputsCrit,OutputsModel,quiet=FALSE){ + + +##Arguments_check________________________________ + if(inherits(InputsCrit,"InputsCrit")==FALSE){ stop("InputsCrit must be of class 'InputsCrit' \n"); return(NULL); } + if(inherits(OutputsModel,"OutputsModel")==FALSE){ stop("OutputsModel must be of class 'OutputsModel' \n"); return(NULL); } + + +##Initialisation_________________________________ + CritName <- NA; + if(InputsCrit$transfo=="" ){ CritName <- "RMSE[Q]" ; } + if(InputsCrit$transfo=="sqrt"){ CritName <- "RMSE[sqrt(Q)]"; } + if(InputsCrit$transfo=="log" ){ CritName <- "RMSE[log(Q)]" ; } + if(InputsCrit$transfo=="inv" ){ CritName <- "RMSE[1/Q]" ; } + if(InputsCrit$transfo=="sort"){ CritName <- "RMSE[sort(Q)]"; } + + CritValue <- NA; + CritBestValue <- +1; + Multiplier <- -1; ### must be equal to -1 or +1 only + + +##Data_preparation_______________________________ + VarObs <- InputsCrit$Qobs ; VarObs[!InputsCrit$BoolCrit] <- NA; + VarSim <- OutputsModel$Qsim; VarSim[!InputsCrit$BoolCrit] <- NA; + ##Data_transformation + if("Ind_zeroes" %in% names(InputsCrit) & "epsilon" %in% names(InputsCrit)){ if(length(InputsCrit$Ind_zeroes)>0){ + VarObs <- VarObs + InputsCrit$epsilon; + VarSim <- VarSim + InputsCrit$epsilon; + } } + if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); } + if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim < -1E100] <- NA; } + if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs ; VarSim <- 1/VarSim ; VarSim[abs(VarSim) > 1E+100] <- NA; } + if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); } + ##TS_ignore + TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ; + if(sum(!TS_ignore)==0){ OutputsCrit <- list(NA); names(OutputsCrit) <- c("CritValue"); return(OutputsCrit); } + if(sum(!TS_ignore)<365 & !quiet){ warning("\t criterion computed on less than 365 time-steps \n"); } + + +##ErrorCrit______________________________________ + Numer <- sum((VarSim-VarObs)^2,na.rm=TRUE); + Denom <- sum(!is.na(VarObs)); + if(Numer==0){ Crit <- 0; } else { Crit <- sqrt(Numer/Denom); } + if(is.numeric(Crit) & is.finite(Crit)){ CritValue <- Crit; } + + +##Output_________________________________________ + OutputsCrit <- list(CritValue,CritName,CritBestValue,Multiplier,which(TS_ignore)); + names(OutputsCrit) <- c("CritValue","CritName","CritBestValue","Multiplier","Ind_notcomputed"); + return(OutputsCrit); + +} + + diff --git a/R/PEdaily_Oudin.R b/R/PEdaily_Oudin.R new file mode 100644 index 00000000..1f3b2c6d --- /dev/null +++ b/R/PEdaily_Oudin.R @@ -0,0 +1,58 @@ +#***************************************************************************************************************** +#' Function which computes daily PE using the formula from Oudin et al. (2005). +#***************************************************************************************************************** +#' @title Computation of daily series of potential evapotranspiration with Oudin's formula +#' @author Laurent Coron (December 2013) +#' @references +#' Oudin, L., F. Hervieu, C. Michel, C. Perrin, V. Andréassian, F. Anctil and C. Loumagne (2005), +#' Which potential evapotranspiration input for a lumped rainfall-runoff model?: Part 2-Towards a +#' simple and efficient potential evapotranspiration model for rainfall-runoff modelling, Journal of Hydrology, +#' 303(1-4), 290-306, doi:10.1016/j.jhydrol.2004.08.026. +#' @examples +#' require(airGR) +#' data(L0123001) +#' PotEvap <- PEdaily_Oudin(JD=as.POSIXlt(BasinObs$DatesR)$yday,Temp=BasinObs$T,LatRad=0.8) +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param JD [numeric] time series of julian day [-] +#' @param Temp [numeric] time series of daily mean air temperature [degC] +#' @param LatRad [numeric] latitude of measurement for the temperature series [rad] +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [numeric] time series of daily potential evapotranspiration [mm/d] +#*****************************************************************************************************************' +PEdaily_Oudin <- function(JD,Temp,LatRad){ + + PE_Oudin_D <- rep(NA,length(Temp)); + for(k in 1:length(Temp)){ + + FI <- LatRad ### latitude in rad + ### FI <- LatDeg/(180/pi) ### conversion from deg to rad + COSFI <- cos(FI) + AFI <- abs(LatRad/42.) + + TETA <- 0.4093*sin(JD[k]/58.1-1.405) + COSTETA <- cos(TETA) + COSGZ <- max(0.001,cos(FI-TETA)) + GZ <- acos(COSGZ) + COSGZ2 <- COSGZ*COSGZ + if(COSGZ2 >= 1){ SINGZ <- 0. } else { SINGZ <- sqrt(1.-COSGZ2) } + COSOM <- 1.-COSGZ/COSFI/COSTETA + if(COSOM < -1.){ COSOM <- -1. } + if(COSOM > 1.){ COSOM <- 1. } + COSOM2 <- COSOM*COSOM + if(COSOM2 >= 1.){ SINOM <- 0. } else { SINOM <- sqrt(1.-COSOM2) } + OM <- acos(COSOM) + COSPZ <- COSGZ+COSFI*COSTETA*(SINOM/OM-1.) + if(COSPZ < 0.001){ COSPZ <- 0.001 } + ETA <- 1.+cos(JD[k]/58.1)/30. + GE <- 446.*OM*COSPZ*ETA + + if(Temp[k] >= -5.0) { PE_Oudin_D[k] <- GE*(Temp[k]+5.)/100./28.5 } else { PE_Oudin_D[k] <- 0 } + + } + + return(PE_Oudin_D); + +} + diff --git a/R/RunModel.R b/R/RunModel.R new file mode 100644 index 00000000..4acfd1e2 --- /dev/null +++ b/R/RunModel.R @@ -0,0 +1,22 @@ +#***************************************************************************************************************** +#' Function which performs a single model run with the provided function. +#***************************************************************************************************************** +#' @title Run with the provided hydrological model function +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of model parameters +#' @param FUN_MOD [function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J) +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +#*****************************************************************************************************************' +RunModel <- function(InputsModel,RunOptions,Param,FUN_MOD){ + return( FUN_MOD(InputsModel,RunOptions,Param) ) +} + diff --git a/R/RunModel_CemaNeige.R b/R/RunModel_CemaNeige.R new file mode 100644 index 00000000..8122b4b5 --- /dev/null +++ b/R/RunModel_CemaNeige.R @@ -0,0 +1,131 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for RunModel_CemaNeige. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the CemaNeige snow module +#' @author Laurent Coron (January 2014) +#' @references +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? +#' Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? +#' Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_CemaNeige.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 2 parameters +#' \tabular{ll}{ +#' CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +#' CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run: CemaNeige states [mm & degC] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#*****************************************************************************************************************' +RunModel_CemaNeige <- function(InputsModel,RunOptions,Param){ + + NParam <- 2; + FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"CemaNeige" )==FALSE){ stop("InputsModel must be of class 'CemaNeige' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"CemaNeige" )==FALSE){ stop("RunOptions must be of class 'CemaNeige' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,0)){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):length(IndPeriod1); + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + + + + ##SNOW_MODULE________________________________________________________________________________## + ParamCemaNeige <- Param; + NLayers <- length(InputsModel$LayerPrecip); + if(sum(is.na(ParamCemaNeige))!=0){ stop("Param contains missing values \n"); return(NULL); } + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); + } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim); } + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers"; + + ##Call_DLL_CemaNeige_________________________ + for(iLayer in 1:NLayers){ + StateStartCemaNeige <- RunOptions$IniStates[ (2*(iLayer-1)+1):(2*(iLayer-1)+2) ]; + RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr", + ##inputs + LInputs=as.integer(length(IndPeriod1)), ### length of input and output series + InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1], ### input series of total precipitation [mm/d] + InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1], ### input series of fraction of solid precipitation [0-1] + InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1], ### input series of air mean temperature [degC] + MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] + NParam=as.integer(2), ### number of model parameter = 2 + Param=ParamCemaNeige, ### parameter set + NStates=as.integer(2), ### number of state variables used for model initialising = 2 + StateStart=StateStartCemaNeige, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsCemaNeige)), ### number of output series + IndOutputs=IndOutputsCemaNeige, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=length(IndPeriod1),ncol=length(IndOutputsCemaNeige)), ### output series [mm] + StateEnd=rep(as.double(-999.999),as.integer(2)) ### state variables at the end of the model run (reservoir levels [mm] and HU) + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Data_storage + CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige]; + if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); } + rm(RESULTS); + } ###ENDFOR_iLayer + names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep=""); + + ##Output_data_preparation + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- list(CemaNeigeLayers); + names(OutputsModel) <- NameCemaNeigeLayers; } + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c("DatesR",NameCemaNeigeLayers); } + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( list(CemaNeigeLayers), + CemaNeigeStateEnd ); + names(OutputsModel) <- c(NameCemaNeigeLayers,"StateEnd"); } + if(ExportDatesR==TRUE & ExportStateEnd==TRUE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + list(CemaNeigeLayers), + CemaNeigeStateEnd ); + names(OutputsModel) <- c("DatesR",NameCemaNeigeLayers,"StateEnd"); } + + ##End + class(OutputsModel) <- c("OutputsModel","daily","CemaNeige"); + return(OutputsModel); + +} + diff --git a/R/RunModel_CemaNeigeGR4J.R b/R/RunModel_CemaNeigeGR4J.R new file mode 100644 index 00000000..70e81522 --- /dev/null +++ b/R/RunModel_CemaNeigeGR4J.R @@ -0,0 +1,208 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for RunModel_CemaNeigeGR4J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the CemaNeigeGR4J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Perrin, C., C. Michel and V. Andréassian (2003), +#' Improvement of a parsimonious model for streamflow simulation, +#' Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? +#' Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? +#' Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +#' @seealso \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR4J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_CemaNeigeGR4J.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 6 parameters +#' \tabular{ll}{ +#' GR4J X1 \tab production store capacity [mm] \cr +#' GR4J X2 \tab intercatchment exchange coefficient [mm/d] \cr +#' GR4J X3 \tab routing store capacity [mm] \cr +#' GR4J X4 \tab unit hydrograph time constant [d] \cr +#' CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +#' CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#*****************************************************************************************************************' +RunModel_CemaNeigeGR4J <- function(InputsModel,RunOptions,Param){ + + NParam <- 6; + FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); + FortranOutputsMod <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(InputsModel,"CemaNeige" )==FALSE){ stop("InputsModel must be of class 'CemaNeige' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"CemaNeige" )==FALSE){ stop("RunOptions must be of class 'CemaNeige' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ParamCemaNeige <- Param[(length(Param)-1):length(Param)]; + NParamMod <- as.integer(length(Param)-2); + ParamMod <- Param[1:NParamMod]; + NLayers <- length(InputsModel$LayerPrecip); + NStatesMod <- as.integer(length(RunOptions$IniStates)-2*NLayers); + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + + + + ##SNOW_MODULE________________________________________________________________________________## + if(RunOptions$RunSnowModule==TRUE){ + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); + } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim); } + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers"; + + ##Call_DLL_CemaNeige_________________________ + for(iLayer in 1:NLayers){ + StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ]; + RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1], ### input series of total precipitation [mm/d] + InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1], ### input series of fraction of solid precipitation [0-1] + InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1], ### input series of air mean temperature [degC] + MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] + NParam=as.integer(2), ### number of model parameter = 2 + Param=ParamCemaNeige, ### parameter set + NStates=as.integer(2), ### number of state variables used for model initialising = 2 + StateStart=StateStartCemaNeige, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsCemaNeige)), ### number of output series + IndOutputs=IndOutputsCemaNeige, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)), ### output series [mm] + StateEnd=rep(as.double(-999.999),as.integer(2)) ### state variables at the end of the model run (reservoir levels [mm] and HU) + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Data_storage + CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige]; + IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt"); + if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); } + rm(RESULTS); + } ###ENDFOR_iLayer + names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep=""); + } ###ENDIF_RunSnowModule + if(RunOptions$RunSnowModule==FALSE){ + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL; + CatchMeltAndPliq <- InputsModel$Precip[IndPeriod1]; } + + + + ##MODEL______________________________________________________________________________________## + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); + } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr4j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=CatchMeltAndPliq, ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=NParamMod, ### number of model parameter + Param=ParamMod, ### parameter set + NStates=NStatesMod, ### number of state variables used for model initialising + StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsMod)), ### number of output series + IndOutputs=IndOutputsMod, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; } + + ##Output_data_preparation + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if(ExportDatesR==TRUE & ExportStateEnd==TRUE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige"); + return(OutputsModel); + +} + diff --git a/R/RunModel_CemaNeigeGR5J.R b/R/RunModel_CemaNeigeGR5J.R new file mode 100644 index 00000000..e65f5dc0 --- /dev/null +++ b/R/RunModel_CemaNeigeGR5J.R @@ -0,0 +1,210 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for RunModel_CemaNeigeGR5J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the CemaNeigeGR5J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances +#' et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr +#' Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), +#' A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, +#' Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? +#' Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? +#' Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR5J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_CemaNeigeGR5J.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 7 parameters +#' \tabular{ll}{ +#' GR5J X1 \tab production store capacity [mm] \cr +#' GR5J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +#' GR5J X3 \tab routing store capacity [mm] \cr +#' GR5J X4 \tab unit hydrograph time constant [d] \cr +#' GR5J X5 \tab intercatchment exchange coefficient 2 [-] \cr +#' CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +#' CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#*****************************************************************************************************************' +RunModel_CemaNeigeGR5J <- function(InputsModel,RunOptions,Param){ + + NParam <- 7; + FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); + FortranOutputsMod <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(InputsModel,"CemaNeige" )==FALSE){ stop("InputsModel must be of class 'CemaNeige' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"CemaNeige" )==FALSE){ stop("RunOptions must be of class 'CemaNeige' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ParamCemaNeige <- Param[(length(Param)-1):length(Param)]; + NParamMod <- as.integer(length(Param)-2); + ParamMod <- Param[1:NParamMod]; + NLayers <- length(InputsModel$LayerPrecip); + NStatesMod <- as.integer(length(RunOptions$IniStates)-2*NLayers); + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + + + ##SNOW_MODULE________________________________________________________________________________## + if(RunOptions$RunSnowModule==TRUE){ + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); + } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim); } + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers"; + + ##Call_DLL_CemaNeige_________________________ + for(iLayer in 1:NLayers){ + StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ]; + RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1], ### input series of total precipitation [mm/d] + InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1], ### input series of fraction of solid precipitation [0-1] + InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1], ### input series of air mean temperature [degC] + MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] + NParam=as.integer(2), ### number of model parameter = 2 + Param=ParamCemaNeige, ### parameter set + NStates=as.integer(2), ### number of state variables used for model initialising = 2 + StateStart=StateStartCemaNeige, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsCemaNeige)), ### number of output series + IndOutputs=IndOutputsCemaNeige, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)), ### output series [mm] + StateEnd=rep(as.double(-999.999),as.integer(2)) ### state variables at the end of the model run (reservoir levels [mm] and HU) + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Data_storage + CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige]; + IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt"); + if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); } + rm(RESULTS); + } ###ENDFOR_iLayer + names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep=""); + } ###ENDIF_RunSnowModule + if(RunOptions$RunSnowModule==FALSE){ + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL; + CatchMeltAndPliq <- InputsModel$Precip[IndPeriod1]; } + + + + ##MODEL______________________________________________________________________________________## + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); + } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr5j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=CatchMeltAndPliq, ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=NParamMod, ### number of model parameter + Param=ParamMod, ### parameter set + NStates=NStatesMod, ### number of state variables used for model initialising + StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsMod)), ### number of output series + IndOutputs=IndOutputsMod, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; } + + ##Output_data_preparation + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if(ExportDatesR==TRUE & ExportStateEnd==TRUE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige"); + return(OutputsModel); + +} + diff --git a/R/RunModel_CemaNeigeGR6J.R b/R/RunModel_CemaNeigeGR6J.R new file mode 100644 index 00000000..32604bd1 --- /dev/null +++ b/R/RunModel_CemaNeigeGR6J.R @@ -0,0 +1,211 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for RunModel_CemaNeigeGR6J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the CemaNeigeGR6J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), +#' A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, +#' Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? +#' Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr +#' Valéry, A., V. Andréassian and C. Perrin (2014), +#' "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? +#' Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +#' @seealso \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_GR6J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 8 parameters +#' \tabular{ll}{ +#' GR6J X1 \tab production store capacity [mm] \cr +#' GR6J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +#' GR6J X3 \tab routing store capacity [mm] \cr +#' GR6J X4 \tab unit hydrograph time constant [d] \cr +#' GR6J X5 \tab intercatchment exchange coefficient 2 [-] \cr +#' GR6J X6 \tab coefficient for emptying exponential store [-] \cr +#' CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +#' CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QR1 } \tab [numeric] series of exponential store outflow (QR1) [mm/d] \cr +#' \emph{$Exp } \tab [numeric] series of exponential store level (X(6)) (negative) [mm] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr +#' \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#***************************************************************************************************************** +RunModel_CemaNeigeGR6J <- function(InputsModel,RunOptions,Param){ + + NParam <- 8; + FortranOutputsCemaNeige <- c("Pliq","Psol","SnowPack","ThermalState","Gratio","PotMelt","Melt","PliqAndMelt"); + FortranOutputsMod <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(InputsModel,"CemaNeige" )==FALSE){ stop("InputsModel must be of class 'CemaNeige' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"CemaNeige" )==FALSE){ stop("RunOptions must be of class 'CemaNeige' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ParamCemaNeige <- Param[(length(Param)-1):length(Param)]; + NParamMod <- as.integer(length(Param)-2); + ParamMod <- Param[1:NParamMod]; + NLayers <- length(InputsModel$LayerPrecip); + NStatesMod <- as.integer(length(RunOptions$IniStates)-2*NLayers); + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + + + + ##SNOW_MODULE________________________________________________________________________________## + if(RunOptions$RunSnowModule==TRUE){ + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsCemaNeige <- as.integer(1:length(FortranOutputsCemaNeige)); + } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim); } + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- "CemaNeigeLayers"; + + ##Call_DLL_CemaNeige_________________________ + for(iLayer in 1:NLayers){ + StateStartCemaNeige <- RunOptions$IniStates[ (NStatesMod+2*(iLayer-1)+1):(NStatesMod+2*(iLayer-1)+2) ]; + RESULTS <- .Fortran("frun_cemaneige",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$LayerPrecip[[iLayer]][IndPeriod1], ### input series of total precipitation [mm/d] + InputsFracSolidPrecip=InputsModel$LayerFracSolidPrecip[[iLayer]][IndPeriod1], ### input series of fraction of solid precipitation [0-1] + InputsTemp=InputsModel$LayerTemp[[iLayer]][IndPeriod1], ### input series of air mean temperature [degC] + MeanAnSolidPrecip=RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] + NParam=as.integer(2), ### number of model parameter = 2 + Param=ParamCemaNeige, ### parameter set + NStates=as.integer(2), ### number of state variables used for model initialising = 2 + StateStart=StateStartCemaNeige, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsCemaNeige)), ### number of output series + IndOutputs=IndOutputsCemaNeige, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsCemaNeige)), ### output series [mm] + StateEnd=rep(as.double(-999.999),as.integer(2)) ### state variables at the end of the model run (reservoir levels [mm] and HU) + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Data_storage + CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige]; + IndPliqAndMelt <- which(names(CemaNeigeLayers[[iLayer]]) == "PliqAndMelt"); + if(iLayer==1){ CatchMeltAndPliq <- RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(iLayer >1){ CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[,IndPliqAndMelt]/NLayers; } + if(ExportStateEnd){ CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd); } + rm(RESULTS); + } ###ENDFOR_iLayer + names(CemaNeigeLayers) <- paste("Layer",formatC(1:NLayers,width=2,flag="0"),sep=""); + } ###ENDIF_RunSnowModule + if(RunOptions$RunSnowModule==FALSE){ + CemaNeigeLayers <- list(); CemaNeigeStateEnd <- NULL; NameCemaNeigeLayers <- NULL; + CatchMeltAndPliq <- InputsModel$Precip[IndPeriod1]; } + + + + ##MODEL______________________________________________________________________________________## + if("all" %in% RunOptions$Outputs_Sim){ IndOutputsMod <- as.integer(1:length(FortranOutputsMod)); + } else { IndOutputsMod <- which(FortranOutputsMod %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*ParamMod[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*ParamMod[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr6j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=CatchMeltAndPliq, ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=NParamMod, ### number of model parameter + Param=ParamMod, ### parameter set + NStates=NStatesMod, ### number of state variables used for model initialising + StateStart=RunOptions$IniStates[1:NStatesMod], ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputsMod)), ### number of output series + IndOutputs=IndOutputsMod, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputsMod)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + if(RunOptions$RunSnowModule & "Precip" %in% RunOptions$Outputs_Sim){ RESULTS$Outputs[,which(FortranOutputsMod[IndOutputsMod]=="Precip")] <- InputsModel$Precip[IndPeriod1]; } + + ##Output_data_preparation + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c(FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if(ExportDatesR==TRUE & ExportStateEnd==TRUE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(CemaNeigeLayers), + list(c(RESULTS$StateEnd,CemaNeigeStateEnd)) ); + names(OutputsModel) <- c("DatesR",FortranOutputsMod[IndOutputsMod],NameCemaNeigeLayers,"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR","CemaNeige"); + return(OutputsModel); + +} + diff --git a/R/RunModel_GR4J.R b/R/RunModel_GR4J.R new file mode 100644 index 00000000..b4325023 --- /dev/null +++ b/R/RunModel_GR4J.R @@ -0,0 +1,128 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for GR4J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the GR4J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Perrin, C., C. Michel and V. Andréassian (2003), +#' Improvement of a parsimonious model for streamflow simulation, +#' Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. +#' @seealso \code{\link{RunModel_GR5J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR4J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_GR4J.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 4 parameters +#' \tabular{ll}{ +#' GR4J X1 \tab production store capacity [mm] \cr +#' GR4J X2 \tab intercatchment exchange coefficient [mm/d] \cr +#' GR4J X3 \tab routing store capacity [mm] \cr +#' GR4J X4 \tab unit hydrograph time constant [d] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#***************************************************************************************************************** +RunModel_GR4J <- function(InputsModel,RunOptions,Param){ + + NParam <- 4; + FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); + } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr4j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=as.integer(length(Param)), ### number of model parameter + Param=Param, ### parameter set + NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising + StateStart=RunOptions$IniStates, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputs)), ### number of output series + IndOutputs=IndOutputs, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Output_data_preparation + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(OutputsModel) <- FortranOutputs[IndOutputs]; } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR"); + return(OutputsModel); + +} + diff --git a/R/RunModel_GR5J.R b/R/RunModel_GR5J.R new file mode 100644 index 00000000..eb82813b --- /dev/null +++ b/R/RunModel_GR5J.R @@ -0,0 +1,131 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for GR5J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the GR5J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances +#' et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr +#' Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet, and V. Andréassian (2011), +#' A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, +#' Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR5J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_GR5J.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 5 parameters +#' \tabular{ll}{ +#' GR5J X1 \tab production store capacity [mm] \cr +#' GR5J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +#' GR5J X3 \tab routing store capacity [mm] \cr +#' GR5J X4 \tab unit hydrograph time constant [d] \cr +#' GR5J X5 \tab intercatchment exchange coefficient 2 [-] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#*****************************************************************************************************************' +RunModel_GR5J <- function(InputsModel,RunOptions,Param){ + + NParam <- 5; + FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); + } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr5j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=as.integer(length(Param)), ### number of model parameter + Param=Param, ### parameter set + NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising + StateStart=RunOptions$IniStates, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputs)), ### number of output series + IndOutputs=IndOutputs, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Output_data_preparation + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(OutputsModel) <- FortranOutputs[IndOutputs]; } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR"); + return(OutputsModel); + +} + diff --git a/R/RunModel_GR6J.R b/R/RunModel_GR6J.R new file mode 100644 index 00000000..7a022c8b --- /dev/null +++ b/R/RunModel_GR6J.R @@ -0,0 +1,132 @@ +#***************************************************************************************************************** +#' Function which performs a single model run for GR6J. +#' +#' For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +#***************************************************************************************************************** +#' @title Run with the GR6J hydrological model +#' @author Laurent Coron (December 2013) +#' @references +#' Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), +#' A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, +#' Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +#' @seealso \code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, +#' \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +#' @example tests/example_RunModel_GR6J.R +#' @useDynLib airgr +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param InputsModel [object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details +#' @param RunOptions [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details +#' @param Param [numeric] vector of 6 parameters +#' \tabular{ll}{ +#' GR6J X1 \tab production store capacity [mm] \cr +#' GR6J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +#' GR6J X3 \tab routing store capacity [mm] \cr +#' GR6J X4 \tab unit hydrograph time constant [d] \cr +#' GR6J X5 \tab intercatchment exchange coefficient 2 [-] \cr +#' GR6J X6 \tab coefficient for emptying exponential store [-] \cr +#' } +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return [list] list containing the function outputs organised as follows: +#' \tabular{ll}{ +#' \emph{$DatesR } \tab [POSIXlt] series of dates \cr +#' \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr +#' \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr +#' \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr +#' \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr +#' \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr +#' \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr +#' \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr +#' \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr +#' \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr +#' \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr +#' \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr +#' \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr +#' \emph{$QR1 } \tab [numeric] series of exponential store outflow (QR1) [mm/d] \cr +#' \emph{$Exp } \tab [numeric] series of exponential store level (X(6)) (negative) [mm] \cr +#' \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr +#' \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr +#' \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr +#' } +#' (refer to the provided references or to the package source code for further details on these model outputs) +#***************************************************************************************************************** +RunModel_GR6J <- function(InputsModel,RunOptions,Param){ + + NParam <- 6; + FortranOutputs <- c("PotEvap","Precip","Prod","AE","Perc","PR","Q9","Q1","Rout","Exch","AExch","QR","QR1","Exp","QD","Qsim"); + + ##Arguments_check + if(inherits(InputsModel,"InputsModel")==FALSE){ stop("InputsModel must be of class 'InputsModel' \n"); return(NULL); } + if(inherits(InputsModel,"daily" )==FALSE){ stop("InputsModel must be of class 'daily' \n"); return(NULL); } + if(inherits(InputsModel,"GR" )==FALSE){ stop("InputsModel must be of class 'GR' \n"); return(NULL); } + if(inherits(RunOptions,"RunOptions" )==FALSE){ stop("RunOptions must be of class 'RunOptions' \n"); return(NULL); } + if(inherits(RunOptions,"GR" )==FALSE){ stop("RunOptions must be of class 'GR' \n"); return(NULL); } + if(!is.vector(Param)){ stop("Param must be a vector \n"); return(NULL); } + if(sum(!is.na(Param))!=NParam){ stop(paste("Param must be a vector of length ",NParam," and contain no NA \n",sep="")); return(NULL); } + Param <- as.double(Param); + + ##Input_data_preparation + if(identical(RunOptions$IndPeriod_WarmUp,as.integer(0))){ RunOptions$IndPeriod_WarmUp <- NULL; } + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run); + LInputSeries <- as.integer(length(IndPeriod1)) + if("all" %in% RunOptions$Outputs_Sim){ IndOutputs <- as.integer(1:length(FortranOutputs)); + } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim); } + + ##Use_of_IniResLevels + if("IniResLevels" %in% RunOptions){ + RunOptions$IniStates[1] <- RunOptions$IniResLevels[2]*Param[3]; ### routing store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[1]*Param[1]; ### production store level (mm) + } + + ##Call_fortan + RESULTS <- .Fortran("frun_gr6j",PACKAGE="airgr", + ##inputs + LInputs=LInputSeries, ### length of input and output series + InputsPrecip=InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/d] + InputsPE=InputsModel$PotEvap[IndPeriod1], ### input series potential evapotranspiration [mm/d] + NParam=as.integer(length(Param)), ### number of model parameter + Param=Param, ### parameter set + NStates=as.integer(length(RunOptions$IniStates)), ### number of state variables used for model initialising + StateStart=RunOptions$IniStates, ### state variables used when the model run starts + NOutputs=as.integer(length(IndOutputs)), ### number of output series + IndOutputs=IndOutputs, ### indices of output series + ##outputs + Outputs=matrix(as.double(-999.999),nrow=LInputSeries,ncol=length(IndOutputs)), ### output series [mm] + StateEnd=rep(as.double(-999.999),length(RunOptions$IniStates)) ### state variables at the end of the model run + ) + RESULTS$Outputs[ round(RESULTS$Outputs ,3)==(-999.999)] <- NA; + RESULTS$StateEnd[round(RESULTS$StateEnd,3)==(-999.999)] <- NA; + + ##Output_data_preparation + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries; + ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim; + ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim; + ##OutputsModel_only + if(ExportDatesR==FALSE & ExportStateEnd==FALSE){ + OutputsModel <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]); + names(OutputsModel) <- FortranOutputs[IndOutputs]; } + ##DatesR_and_OutputsModel_only + if(ExportDatesR==TRUE & ExportStateEnd==FALSE){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs]); } + ##OutputsModel_and_SateEnd_only + if(ExportDatesR==FALSE & ExportStateEnd==TRUE){ + OutputsModel <- c( lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c(FortranOutputs[IndOutputs],"StateEnd"); } + ##DatesR_and_OutputsModel_and_SateEnd + if((ExportDatesR==TRUE & ExportStateEnd==TRUE) | "all" %in% RunOptions$Outputs_Sim){ + OutputsModel <- c( list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2,i]), + list(RESULTS$StateEnd) ); + names(OutputsModel) <- c("DatesR",FortranOutputs[IndOutputs],"StateEnd"); } + + ##End + rm(RESULTS); + class(OutputsModel) <- c("OutputsModel","daily","GR"); + return(OutputsModel); + +} + diff --git a/R/TransfoParam.R b/R/TransfoParam.R new file mode 100644 index 00000000..ae0da09c --- /dev/null +++ b/R/TransfoParam.R @@ -0,0 +1,19 @@ +#************************************************************************************************** +#' Function which transforms model parameters (from real to transformed parameters and vice versa) using the provided function. +#************************************************************************************************** +#' @title Transformation of the parameters using the provided function +#' @author Laurent Coron (June 2014) +#' @seealso \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +#' @example tests/example_TransfoParam.R +#' @encoding UTF-8 +#' @export +#_FunctionInputsOutputs____________________________________________________________________________ +#' @param ParamIn [numeric] matrix of parameter sets (sets in line, parameter values in column) +#' @param Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real +#' @param FUN_TRANSFO [function] model parameters transformation function (e.g. TransfoParam_GR4J, TransfoParam_CemaNeigeGR4J) +#' @return \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +#**************************************************************************************************' +TransfoParam <- function(ParamIn,Direction,FUN_TRANSFO){ + return( FUN_TRANSFO(ParamIn,Direction) ) +} + diff --git a/R/TransfoParam_CemaNeige.R b/R/TransfoParam_CemaNeige.R new file mode 100644 index 00000000..73ba2134 --- /dev/null +++ b/R/TransfoParam_CemaNeige.R @@ -0,0 +1,37 @@ +#************************************************************************************************** +#' Function which transforms model parameters (from real to transformed parameters and vice versa). +#************************************************************************************************** +#' @title Transformation of the parameters from the CemaNeige module +#' @author Laurent Coron (December 2013) +#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}} +#' @example tests/example_TransfoParam_CemaNeige.R +#' @encoding UTF-8 +#' @export +#_FunctionInputsOutputs____________________________________________________________________________ +#' @param ParamIn [numeric] matrix of parameter sets (sets in line, parameter values in column) +#' @param Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real +#' @return \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +#************************************************************************************************** +TransfoParam_CemaNeige <- function(ParamIn,Direction){ + + NParam <- 2; + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + if(ncol(ParamIn)!=NParam){ stop(paste("the CemaNeige module requires ",NParam," parameters \n",sep="")); return(NULL); } + + if(Direction=="TR"){ + ParamOut <- ParamIn; + ParamOut[,1] <- (ParamIn[,1]+9.99)/19.98; ### CemaNeige X1 (weighting coefficient for snow pack thermal state) + ParamOut[,2] <- exp(ParamIn[,2]); ### CemaNeige X2 (degree-day melt coefficient) + } + if(Direction=="RT"){ + ParamOut <- ParamIn; + ParamOut[,1] <- ParamIn[,1]*19.98-9.99; ### CemaNeige X1 (weighting coefficient for snow pack thermal state) + ParamOut[,2] <- log(ParamIn[,2]); ### CemaNeige X2 (degree-day melt coefficient) + } + + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + +} + diff --git a/R/TransfoParam_GR4J.R b/R/TransfoParam_GR4J.R new file mode 100644 index 00000000..2613179d --- /dev/null +++ b/R/TransfoParam_GR4J.R @@ -0,0 +1,41 @@ +#************************************************************************************************** +#' Function which transforms model parameters (from real to transformed parameters and vice versa). +#************************************************************************************************** +#' @title Transformation of the parameters from the GR4J model +#' @author Laurent Coron (December 2013) +#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +#' @example tests/example_TransfoParam_GR4J.R +#' @encoding UTF-8 +#' @export +#_FunctionInputsOutputs____________________________________________________________________________ +#' @param ParamIn [numeric] matrix of parameter sets (sets in line, parameter values in column) +#' @param Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real +#' @return \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +#************************************************************************************************** +TransfoParam_GR4J <- function(ParamIn,Direction){ + + NParam <- 4; + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + if(ncol(ParamIn)!=NParam){ stop(paste("the GR4J model requires ",NParam," parameters \n",sep="")); return(NULL); } + + if(Direction=="TR"){ + ParamOut <- ParamIn; + ParamOut[,1] <- exp(1.5*ParamIn[,1]); ### GR4J X1 (production store capacity) + ParamOut[,2] <- sinh(ParamIn[,2]); ### GR4J X2 (groundwater exchange coefficient) + ParamOut[,3] <- exp(ParamIn[,3]); ### GR4J X3 (routing store capacity) + ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98; ### GR4J X4 (unit hydrograph time constant) + } + if(Direction=="RT"){ + ParamOut <- ParamIn; + ParamOut[,1] <- log(ParamIn[,1])/1.5; ### GR4J X1 (production store capacity) + ParamOut[,2] <- asinh(ParamIn[,2]); ### GR4J X2 (groundwater exchange coefficient) + ParamOut[,3] <- log(ParamIn[,3]); ### GR4J X3 (routing store capacity) + ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5; ### GR4J X4 (unit hydrograph time constant) + } + + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + +} + diff --git a/R/TransfoParam_GR5J.R b/R/TransfoParam_GR5J.R new file mode 100644 index 00000000..126d25ba --- /dev/null +++ b/R/TransfoParam_GR5J.R @@ -0,0 +1,45 @@ +#************************************************************************************************** +#' Function which transforms model parameters (from real to transformed parameters and vice versa). +#************************************************************************************************** +#' @title Transformation of the parameters from the GR5J model +#' @author Laurent Coron (December 2013) +#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +#' @example tests/example_TransfoParam_GR5J.R +#' @encoding UTF-8 +#' @export +#_FunctionInputsOutputs____________________________________________________________________________ +#' @param ParamIn [numeric] matrix of parameter sets (sets in line, parameter values in column) +#' @param Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real +#' @return \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +#************************************************************************************************** +TransfoParam_GR5J <- function(ParamIn,Direction){ + + NParam <- 5; + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + if(ncol(ParamIn)!=NParam){ stop(paste("the GR5J model requires ",NParam," parameters \n",sep="")); return(NULL); } + + if(Direction=="TR"){ + ParamOut <- ParamIn; + ParamOut[,1] <- exp(1.5*ParamIn[,1]); ### GR5J X1 (production store capacity) + ParamOut[,2] <- sinh(ParamIn[,2]); ### GR5J X2 (groundwater exchange coefficient 1) + ParamOut[,3] <- exp(ParamIn[,3]); ### GR5J X3 (routing store capacity) + ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98; ### GR5J X4 (unit hydrograph time constant) + ### ParamOut[,5] <- sinh(ParamIn[,5]); ### GR5J X5 (groundwater exchange coefficient 2) + ParamOut[,5] <- ParamIn[,5]/5; ### GR5J X5 (groundwater exchange coefficient 2) + } + if(Direction=="RT"){ + ParamOut <- ParamIn; + ParamOut[,1] <- log(ParamIn[,1]) / 1.5; ### GR5J X1 (production store capacity) + ParamOut[,2] <- asinh(ParamIn[,2]); ### GR5J X2 (groundwater exchange coefficient 1) + ParamOut[,3] <- log(ParamIn[,3]); ### GR5J X3 (routing store capacity) + ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5; ### GR5J X4 (unit hydrograph time constant) + ### ParamOut[,5] <- asinh(ParamIn[,5]); ### GR5J X5 (groundwater exchange coefficient 2) + ParamOut[,5] <- ParamIn[,5]*5; ### GR5J X5 (groundwater exchange coefficient 2) + } + + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + +} + diff --git a/R/TransfoParam_GR6J.R b/R/TransfoParam_GR6J.R new file mode 100644 index 00000000..9ae1ab65 --- /dev/null +++ b/R/TransfoParam_GR6J.R @@ -0,0 +1,47 @@ +#************************************************************************************************** +#' Function which transforms model parameters (from real to transformed parameters and vice versa). +#************************************************************************************************** +#' @title Transformation of the parameters from the GR6J model +#' @author Laurent Coron (December 2013) +#' @seealso \code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_CemaNeige}} +#' @example tests/example_TransfoParam_GR6J.R +#' @encoding UTF-8 +#' @export +#_FunctionInputsOutputs____________________________________________________________________________ +#' @param ParamIn [numeric] matrix of parameter sets (sets in line, parameter values in column) +#' @param Direction [character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real +#' @return \emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +#************************************************************************************************** +TransfoParam_GR6J <- function(ParamIn,Direction){ + + NParam <- 6; + Bool <- is.matrix(ParamIn); + if(Bool==FALSE){ ParamIn <- rbind(ParamIn); } + if(ncol(ParamIn)!=NParam){ stop(paste("the GR6J model requires ",NParam," parameters \n",sep="")); return(NULL); } + + if(Direction=="TR"){ + ParamOut <- ParamIn; + ParamOut[,1] <- exp(1.5*ParamIn[,1]); ### GR6J X1 (production store capacity) + ParamOut[,2] <- sinh(ParamIn[,2]); ### GR6J X2 (groundwater exchange coefficient 1) + ParamOut[,3] <- exp(ParamIn[,3]); ### GR6J X3 (routing store capacity) + ParamOut[,4] <- 20+19.5*(ParamIn[,4]-9.99)/19.98; ### GR6J X4 (unit hydrograph time constant) + ### ParamOut[,5] <- sinh(Xtran[,5]); ### GR6J X5 (groundwater exchange coefficient 2) + ParamOut[,5] <- ParamIn[,5]/5; ### GR6J X5 (groundwater exchange coefficient 2) + ParamOut[,6] <- exp(ParamIn[,6]); ### GR6J X6 (coefficient for emptying exponential store) + } + if(Direction=="RT"){ + ParamOut <- ParamIn; + ParamOut[,1] <- log(ParamIn[,1]) / 1.5; ### GR6J X1 (production store capacity) + ParamOut[,2] <- asinh(ParamIn[,2]); ### GR6J X2 (groundwater exchange coefficient 1) + ParamOut[,3] <- log(ParamIn[,3]); ### GR6J X3 (routing store capacity) + ParamOut[,4] <- 9.99+19.98*(ParamIn[,4]-20)/19.5; ### GR6J X4 (unit hydrograph time constant) + ### ParamOut[,5] <- asinh(ParamIn[,5]); ### GR6J X5 (groundwater exchange coefficient 2) + ParamOut[,5] <- ParamIn[,5]*5; ### GR6J X5 (groundwater exchange coefficient 2) + ParamOut[,6] <- log(ParamIn[,6]); ### GR6J X6 (coefficient for emptying exponential store) + } + + if(Bool==FALSE){ ParamOut <- ParamOut[1,]; } + return(ParamOut); + +} + diff --git a/R/plot_OutputsModel.R b/R/plot_OutputsModel.R new file mode 100644 index 00000000..1ef2b869 --- /dev/null +++ b/R/plot_OutputsModel.R @@ -0,0 +1,331 @@ +#***************************************************************************************************************** +#' Function which creates a screen plot giving an overview of the model outputs +#' +#' Dashboard of results including various graphs (depending on the model): +#' (1) time series of total precipitation and simulated flows (and observed flows if provided) +#' (2) interannual median monthly simulated flow (and observed flows if provided) +#' (3) correlation plot between simulated and observed flows (if observed flows provided) +#' (4) cumulative frequency plot for simulated flows (and observed flows if provided) +#***************************************************************************************************************** +#' @title Default preview of model outputs +#' @author Laurent Coron (June 2014) +## @example tests/example_plot_OutputsModel.R +#' @encoding UTF-8 +#' @export +#_FunctionInputs__________________________________________________________________________________________________ +#' @param OutputsModel [object of class \emph{OutputsModel}] list of model outputs (which must at least include DatesR, Precip and Qsim) [POSIXlt, mm, mm] +#' @param Qobs (optional) [numeric] time series of observed flow (for the same time-steps than simulated) [mm] +#' @param IndPeriod_Plot (optional) [numeric] indices of the time-steps to be plotted (among the OutputsModel series) +#' @param BasinArea (optional) [numeric] basin area [km2], used to plot flow axes in m3/s +#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE +#_FunctionOutputs_________________________________________________________________________________________________ +#' @return screen plot window +#*****************************************************************************************************************' +plot_OutputsModel <- function(OutputsModel,Qobs=NULL,IndPeriod_Plot=NULL,BasinArea=NULL,quiet=FALSE){ + + + if(!inherits(OutputsModel,"GR") & !inherits(OutputsModel,"CemaNeige")){ stop(paste("OutputsModel not in the correct format for default plotting \n",sep="")); return(NULL); } + + BOOL_Dates <- FALSE; + if("DatesR" %in% names(OutputsModel)){ BOOL_Dates <- TRUE; } + BOOL_Pobs <- FALSE; + if("Precip" %in% names(OutputsModel)){ BOOL_Pobs <- TRUE; } + BOOL_Qsim <- FALSE; + if("Qsim" %in% names(OutputsModel)){ BOOL_Qsim <- TRUE; } + BOOL_Qobs <- FALSE; + if(BOOL_Qsim & length(Qobs)==length(OutputsModel$Qsim)){ if(sum(is.na(Qobs))!=length(Qobs)){ BOOL_Qobs <- TRUE; } } + BOOL_Snow <- FALSE; + if("CemaNeigeLayers" %in% names(OutputsModel)){ if("SnowPack" %in% names(OutputsModel$CemaNeigeLayers[[1]])){ BOOL_Snow <- TRUE; } } + BOOL_Psol <- FALSE; + if("CemaNeigeLayers" %in% names(OutputsModel)){ if("Psol" %in% names(OutputsModel$CemaNeigeLayers[[1]])){ BOOL_Psol <- TRUE; } } + + if(!BOOL_Dates){ + stop(paste("OutputsModel must contain at least DatesR to allow plotting \n",sep="")); return(NULL); } + if(inherits(OutputsModel,"GR") & !BOOL_Qsim){ + stop(paste("OutputsModel must contain at least Qsim to allow plotting \n",sep="")); return(NULL); } + + if(BOOL_Dates){ + MyRollMean1 <- function(x,n){ + return(filter(x,rep(1/n,n),sides=2)); } + MyRollMean2 <- function(x,n){ + return(filter(c(tail(x,n%/%2),x,x[1:(n%/%2)]),rep(1/n,n),sides=2)[(n%/%2+1):(length(x)+n%/%2)]); } + BOOL_TS <- FALSE; + TimeStep <- difftime(tail(OutputsModel$DatesR,1),tail(OutputsModel$DatesR,2),units="secs")[[1]]; + if(inherits(OutputsModel,"hourly" ) & TimeStep == 60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/h]"; } + if(inherits(OutputsModel,"daily" ) & TimeStep == 24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/d]"; } + if(inherits(OutputsModel,"monthly") & TimeStep %in% c(28,29,30,31)*24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/month]"; } + if(inherits(OutputsModel,"yearly" ) & TimeStep %in% c(365,366)*24*60*60){ BOOL_TS <- TRUE; plotunit <- "[mm/y]"; } + if(!BOOL_TS){ stop(paste("the time step of the model inputs could not be found \n",sep="")); return(NULL); } + } + if(length(IndPeriod_Plot)==0){ IndPeriod_Plot <- 1:length(OutputsModel$DatesR); } + if(inherits(OutputsModel,"CemaNeige")){ NLayers <- length(OutputsModel$CemaNeigeLayers); } + BOOL_QobsZero <- FALSE; if(BOOL_Qobs){ SelectQobsNotZero <- (round(Qobs[IndPeriod_Plot] ,4)!=0); BOOL_QobsZero <- sum(!SelectQobsNotZero,na.rm=TRUE)>0; } + BOOL_QsimZero <- FALSE; if(BOOL_Qsim){ SelectQsimNotZero <- (round(OutputsModel$Qsim[IndPeriod_Plot],4)!=0); BOOL_QsimZero <- sum(!SelectQsimNotZero,na.rm=TRUE)>0; } + if(BOOL_QobsZero & !quiet){ warning("\t zeroes detected in Qobs -> some plots in the log space will not be created using all time-steps \n"); } + if(BOOL_QsimZero & !quiet){ warning("\t zeroes detected in Qsim -> some plots in the log space will not be created using all time-steps \n"); } + BOOL_FilterZero <- TRUE; + + ##Options + BLOC <- TRUE; if(BLOC){ + cexaxis <- 1.0; cexlab <- 0.9; cexleg=1.0; lwd=1.8; lineX=2.6; lineY=2.6; bgleg <- rgb(1,1,1,alpha=0.7); bgleg <- NA; + + matlayout <- NULL; iPlot <- 0; + if(BOOL_Pobs){ + matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; } + if(BOOL_Snow){ + matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1),c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; } + if(BOOL_Qsim | BOOL_Qobs){ + matlayout <- rbind(matlayout,c(iPlot+1,iPlot+1,iPlot+1),c(iPlot+1,iPlot+1,iPlot+1)); iPlot <- iPlot+1; } + if(BOOL_TS & BOOL_Qsim){ + matlayout <- rbind(matlayout,c(iPlot+1,iPlot+2,iPlot+3),c(iPlot+1,iPlot+2,iPlot+3)); iPlot <- iPlot+3; } + iPlotMax <- iPlot; + + isRStudio <- Sys.getenv("RSTUDIO") == "1"; + if(!isRStudio){ + if(iPlotMax==1){ dev.new(width=10,height=02); } + if(iPlotMax==2){ dev.new(width=10,height=05); } + if(iPlotMax==3){ dev.new(width=10,height=05); } + if(iPlotMax==5){ dev.new(width=10,height=07); } + if(iPlotMax==6){ dev.new(width=10,height=10); } + } + layout(matlayout); + + Xaxis <- 1:length(IndPeriod_Plot); + if(BOOL_Dates){ + Seq1 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday==1 & OutputsModel$DatesR[IndPeriod_Plot]$mon %in% c(0,3,6,9)); + Seq2 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday==1 & OutputsModel$DatesR[IndPeriod_Plot]$mon==0); + } + + if(!is.null(BasinArea)){ + Factor_MMH_M3S <- BasinArea/( 60*60/1000); + Factor_MMD_M3S <- BasinArea/( 24*60*60/1000); + Factor_MMM_M3S <- BasinArea/(365.25/12*24*60*60/1000); + Factor_MMY_M3S <- BasinArea/( 365.25*24*60*60/1000); + if(inherits(OutputsModel,"hourly" )){ Factor_UNIT_M3S <- Factor_MMH_M3S; } + if(inherits(OutputsModel,"daily" )){ Factor_UNIT_M3S <- Factor_MMD_M3S; } + if(inherits(OutputsModel,"monthly")){ Factor_UNIT_M3S <- Factor_MMM_M3S; } + if(inherits(OutputsModel,"yearly" )){ Factor_UNIT_M3S <- Factor_MMY_M3S; } + } + } + + kPlot <- 0; + + ##Precip + if(BOOL_Pobs){ + kPlot <- kPlot+1; mar <- c(3,5,1,5); + par(new=FALSE,mar=mar,las=0) + ylim1 <- range(OutputsModel$Precip[IndPeriod_Plot],na.rm=TRUE); ylim2 <- ylim1; ylim2 <- rev(ylim2); + plot(Xaxis,OutputsModel$Precip[IndPeriod_Plot],type="h",ylim=ylim2,col="royalblue",lwd=0.7,xaxt="n",yaxt="n",xlab="",ylab="",xaxs="i",yaxs="i"); + axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis) + par(las=0); mtext(side=2,paste("precip. ",plotunit,sep=""),line=lineY,cex=cexlab,adj=1); par(las=0); + if(BOOL_Psol){ + par(new=TRUE); + for(iLayer in 1:NLayers){ + if(iLayer==1){ PsolLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; + } else { PsolLayerMean <- PsolLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; } } + plot(Xaxis,PsolLayerMean[IndPeriod_Plot],type="h",ylim=ylim2,col="lightblue",lwd=0.7,xaxt="n",yaxt="n",xlab="",ylab="",xaxs="i",yaxs="i"); + } + if(BOOL_Dates){ + axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis); + axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis); + } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); } + } + + + ##SnowPack + if(BOOL_Snow){ + kPlot <- kPlot+1; mar <- c(3,5,1,5); + par(new=FALSE,mar=mar,las=0) + ylim1 <- c(+99999,-99999) + for(iLayer in 1:NLayers){ + ylim1[1] <- min(ylim1[1],OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack); + ylim1[2] <- max(ylim1[2],OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack); + if(iLayer==1){ SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; + } else { SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; } + } + plot(SnowPackLayerMean[IndPeriod_Plot],type="l",ylim=ylim1,lwd=lwd*1.2,col="royalblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i") + for(iLayer in 1:NLayers){ lines(OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack[IndPeriod_Plot],lty=3,col="royalblue",lwd=lwd*0.8); } + axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis) + par(las=0); mtext(side=2,paste("snow pack ","[mm]",sep=""),line=lineY,cex=cexlab); par(las=0); + legend("topright",c(paste("mean snow pack",sep=""),paste("snow pack for each layer",sep="")),col=c("royalblue","royalblue"),lty=c(1,3),lwd=c(lwd*1.2,lwd*0.8),bty="o",bg=bgleg,box.col=bgleg,cex=cexleg) + box() + if(BOOL_Dates){ + axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis); + axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis); + } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); } + } + + + ##Flows + if(BOOL_Qsim){ + kPlot <- kPlot+1; mar <- c(3,5,1,5); + par(new=FALSE,mar=mar,las=0) + ylim1 <- range(OutputsModel$Qsim[IndPeriod_Plot],na.rm=TRUE); + if(BOOL_Qobs){ ylim1 <- range(c(ylim1,Qobs[IndPeriod_Plot]),na.rm=TRUE); } + ylim2 <- c(ylim1[1],1.2*ylim1[2]); + plot(Xaxis,rep(NA,length(Xaxis)),type="n",ylim=ylim2,xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i"); + txtleg <- NULL; colleg <- NULL; + if(BOOL_Qobs){ lines(Xaxis,Qobs[IndPeriod_Plot],lwd=lwd,lty=1,col="black"); txtleg <- c(txtleg,"observed"); colleg <- c(colleg,"black"); } + if(BOOL_Qsim){ lines(Xaxis,OutputsModel$Qsim[IndPeriod_Plot],lwd=lwd,lty=1,col="orangered"); txtleg <- c(txtleg,"simulated"); colleg <- c(colleg,"orangered"); } + axis(side=2,at=pretty(ylim1),labels=pretty(ylim1),cex.axis=cexaxis) + par(las=0); mtext(side=2,paste("flow ",plotunit,sep=""),line=lineY,cex=cexlab); par(las=0); + if(!is.null(BasinArea)){ + Factor <- Factor_UNIT_M3S; + axis(side=4,at=pretty(ylim1*Factor)/Factor,labels=pretty(ylim1*Factor),cex.axis=cexaxis); + par(las=0); mtext(side=4,paste("flow ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); } + if(BOOL_Dates){ + axis(side=1,at=Seq1,labels=FALSE,cex.axis=cexaxis); + axis(side=1,at=Seq2,labels=format(OutputsModel$DatesR[IndPeriod_Plot],format="%m/%Y")[Seq2],lwd.ticks=1.5,cex.axis=cexaxis); + } else { axis(side=1,at=pretty(Xaxis),labels=pretty(Xaxis),cex.axis=cexaxis); } + legend("topright",txtleg,col=colleg,lty=1,lwd=lwd,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg) + box() + } + + + ##Regime + if(BOOL_TS & BOOL_Qsim & (inherits(OutputsModel,"hourly") | inherits(OutputsModel,"daily"))){ + kPlot <- kPlot+1; mar <- c(6,5,1,5); plotunitregime <- "[mm/month]"; + par(new=FALSE,mar=mar,las=0) + ModelData <- as.data.frame(matrix(as.numeric(NA),nrow=length(IndPeriod_Plot),ncol=5)); + ModelData[,1] <- as.numeric(format(OutputsModel$DatesR[IndPeriod_Plot],format="%Y%m%d%H")); + if(BOOL_Pobs){ ModelData[,2] <- OutputsModel$Precip[IndPeriod_Plot]; } + if(BOOL_Psol){ ModelData[,3] <- PsolLayerMean[IndPeriod_Plot]; } + if(BOOL_Qobs){ ModelData[,4] <- Qobs[IndPeriod_Plot]; } + if(BOOL_Qsim){ ModelData[,5] <- OutputsModel$Qsim[IndPeriod_Plot]; } + colnames(ModelData) <- c("DatesModel","Precip","Psol","Qobs","Qsim"); + TxtDatesModelData <- formatC(ModelData$DatesModel,format="d",width=8,flag="0"); + + if(inherits(OutputsModel,"hourly")){ + DailyData <- as.data.frame(aggregate(ModelData[,2:5],by=list(as.numeric(substr(TxtDatesModelData,1,8))),FUN=sum,na.rm=T)); } + if(inherits(OutputsModel,"daily")){ + DailyData <- ModelData; } + colnames(DailyData) <- c("DatesDaily","Precip","Psol","Qobs","Qsim"); + TxtDatesDailyData <- formatC(DailyData$DatesDaily,format="d",width=8,flag="0"); + MontlyData <- as.data.frame(aggregate(DailyData[,2:5],by=list(as.numeric(substr(TxtDatesDailyData,1,6))),FUN=sum,na.rm=T)); + colnames(MontlyData) <- c("DatesMontly","Precip","Psol","Qobs","Qsim"); + TxtDatesMontlyData <- formatC(MontlyData$DatesMontly,format="d",width=6,flag="0"); + + DailyDataAggregD <- as.data.frame(aggregate(DailyData[,2:5],by=list(as.numeric(substr(TxtDatesDailyData ,5,8))),FUN=mean,na.rm=T)); + colnames(DailyDataAggregD) <- c("DatesDailyAggregD","Precip","Psol","Qobs","Qsim"); + MonthlyDataAggregM <- as.data.frame(aggregate(MontlyData[,2:5],by=list(as.numeric(substr(TxtDatesMontlyData,5,6))),FUN=mean,na.rm=T)); + colnames(MonthlyDataAggregM) <- c("DatesMonthlyAggregM","Precip","Psol","Qobs","Qsim"); + Window <- 30; + DailyDataAggregD2 <- DailyDataAggregD; MonthlyDataAggregM2 <- MonthlyDataAggregM; + if(plotunitregime=="[mm/month]"){ DailyDataAggregD2[ 2:5] <- DailyDataAggregD2[ 2:5]*Window; } + if(plotunitregime=="[mm/d]" ){ MonthlyDataAggregM2[2:5] <- MonthlyDataAggregM2[2:5]/Window; } + DailyDataAggregD3 <- as.data.frame(cbind(DailyDataAggregD2$DatesDailyAggregD, + MyRollMean2(DailyDataAggregD2$Precip,Window), MyRollMean2(DailyDataAggregD2$Psol,Window), + MyRollMean2(DailyDataAggregD2$Qobs,Window) , MyRollMean2(DailyDataAggregD2$Qsim,Window))); + colnames(DailyDataAggregD3) <- colnames(DailyDataAggregD2); + TxtDatesDailyAggregD3 <- formatC(DailyDataAggregD3$DatesDailyAggregD,format="d",width=4,flag="0"); + + xLabels <- paste(substr(TxtDatesDailyAggregD3,3,4),"/",substr(TxtDatesDailyAggregD3,1,2),sep="") + Seq1 <- 1:nrow(DailyDataAggregD3); + SeqLab1 <- Seq1[substr(xLabels,1,2)=="01"]; SeqLab1 <- c(SeqLab1,length(xLabels)); xLabels1 <- xLabels[SeqLab1]; + Seq2 <- Seq1[substr(xLabels,1,2)=="15"]; + SeqLab2 <- Seq2; xLabels2 <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"); + ylimQ <- range(c(DailyDataAggregD3$Qobs[Seq1],DailyDataAggregD3$Qsim[Seq1]),na.rm=TRUE); + if(BOOL_Pobs){ ylimP <- c(max(MonthlyDataAggregM2$Precip,na.rm=TRUE),0); } + + txtleg <- NULL; colleg <- NULL; lwdleg <- NULL; + lwdP=10 + if(BOOL_Pobs){ + plot(Seq2,MonthlyDataAggregM2$Precip[1:12],type="h",xlim=range(Seq1),ylim=c(3*ylimP[1],ylimP[2]),lwd=lwdP,lend=1,lty=1,col="royalblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i",yaxs="i",bty="n") + txtleg <- c(txtleg,"Ptot" ); colleg <- c(colleg,"royalblue"); lwdleg <- c(lwdleg,lwdP/3); + axis(side=2,at=pretty(0.8*ylimP,n=3),labels=pretty(0.8*ylimP,n=3),cex.axis=cexaxis,col.axis="royalblue",col.ticks="royalblue"); + par(new=TRUE); } + + if(BOOL_Psol){ + plot(Seq2,MonthlyDataAggregM2$Psol[1:12],type="h",xlim=range(Seq1),ylim=c(3*ylimP[1],ylimP[2]),lwd=lwdP,lend=1,lty=1,col="lightblue",xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i",yaxs="i",bty="n"); + txtleg <- c(txtleg,"Psol" ); colleg <- c(colleg,"lightblue"); lwdleg <- c(lwdleg,lwdP/3); + par(new=TRUE); } + + plot(0,0,type="n",xlim=range(Seq1),ylim=c(ylimQ[1],2*ylimQ[2]),xlab="",ylab="",xaxt="n",yaxt="n",xaxs="i") + if(BOOL_Qobs){ lines(Seq1,DailyDataAggregD3$Qobs[Seq1],lwd=lwd,lty=1,col="black" ); txtleg <- c(txtleg,"Qobs" ); colleg <- c(colleg,"black" ); lwdleg <- c(lwdleg,lwd); } + if(BOOL_Qsim){ lines(Seq1,DailyDataAggregD3$Qsim[Seq1],lwd=lwd,lty=1,col="orangered"); txtleg <- c(txtleg,"Qsim"); colleg <- c(colleg,"orangered"); lwdleg <- c(lwdleg,lwd); } + + axis(side=1,at=SeqLab1,tick=TRUE ,labels=xLabels1,cex.axis=cexaxis) + ### axis(side=1,at=SeqLab2,tick=FALSE,labels=xLabels2,cex.axis=cexaxis) + axis(side=2,at=pretty(ylimQ),labels=pretty(ylimQ),cex.axis=cexaxis) + par(las=0); mtext(side=1,paste("30-days rolling mean",sep=""),line=lineX,cex=cexlab); par(las=0); + posleg <- "topright"; txtlab <- "flow regime"; + if(BOOL_Pobs){ posleg <- "right"; txtlab <- "precip. & flow regime"; } + par(las=0); mtext(side=2,paste(txtlab," ",plotunitregime,sep=""),line=lineY,cex=cexlab); par(las=0); + if(!is.null(BasinArea)){ + Factor <- Factor_MMM_M3S; + axis(side=4,at=pretty(ylimQ*Factor)/Factor,labels=pretty(ylimQ*Factor),cex.axis=cexaxis); + par(las=0); mtext(side=4,paste("flow ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); } + ### posleg <- "topright"; if(BOOL_Pobs){ posleg <- "right"; } + ### legend(posleg,txtleg,col=colleg,lty=1,lwd=lwdleg,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg) + box() + } + + + ##Cumulative_frequency + if((BOOL_Qsim | BOOL_Qobs) & BOOL_FilterZero){ + kPlot <- kPlot+1; mar <- c(6,5,1,5); + par(new=FALSE,mar=mar,las=0) + xlim <- c(0,1); + ylim <- range(log(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero],OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero])),na.rm=TRUE); + seqDATA1 <- log(c(0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000,2000,5000,10000)); seqDATA2 <- exp(seqDATA1); + plot(0,0,type="n",xlim=xlim,ylim=ylim,xaxt="n",yaxt="n",xlab="",ylab="",main=""); + ### abline(h=0,lty=2,col=grey(0.5)); + ### abline(h=1,lty=2,col=grey(0.5)); + axis(side=1,at=pretty(xlim),labels=pretty(xlim),cex.axis=cexaxis); + par(las=0); mtext(side=1,text="non-exceedance prob. [-]",line=lineY,cex=cexlab); par(las=0); + axis(side=2,at=seqDATA1,labels=seqDATA2,cex.axis=cexaxis); + par(las=0); mtext(side=2,text=paste("flow ",plotunit,"",sep=""),line=lineY,cex=cexlab); par(las=0); + txtleg <- NULL; colleg <- NULL; + if(BOOL_Qobs){ + DATA2 <- log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]); + SeqQuant <- seq(0,1,by=1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2,SeqQuant,na.rm=TRUE)); + Fn <- ecdf(DATA2); YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )]; + lines(XX,YY,lwd=1,col="black"); + txtleg <- c(txtleg,"observed"); colleg <- c(colleg,"black"); } + if(BOOL_Qsim){ + DATA2 <- log(OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]); + SeqQuant <- seq(0,1,by=1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2,SeqQuant,na.rm=TRUE)); + Fn <- ecdf(DATA2); YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )]; + lines(XX,YY,lwd=1,col="orangered"); + txtleg <- c(txtleg,"simulated"); colleg <- c(colleg,"orangered"); } + if(!is.null(BasinArea)){ + Factor <- Factor_UNIT_M3S; + axis(side=4,at=seqDATA1,labels=round(seqDATA2*Factor),cex.axis=cexaxis); + par(las=0); mtext(side=4,paste("flow ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); } + legend("topleft",title="log scale",txtleg,col=colleg,lty=1,lwd=lwd,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg) + box() + } + + + ##Correlation_QQ + if(BOOL_Qsim & BOOL_Qobs & BOOL_FilterZero){ + kPlot <- kPlot+1; mar <- c(6,5,1,5); + par(new=FALSE,mar=mar,las=0) + ylim <- log(range(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero],OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),na.rm=TRUE)); + plot(log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),log(OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]),type="p",pch=1,cex=0.9,col="black",xlim=ylim,ylim=ylim,xaxt="n",yaxt="n",xlab="",ylab="") + abline(a=0,b=1,col="royalblue"); + seqDATA1 <- log(c(0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000,2000,5000,10000)); seqDATA2 <- exp(seqDATA1); + axis(side=1,at=seqDATA1,labels=seqDATA2,cex=cexaxis); + axis(side=2,at=seqDATA1,labels=seqDATA2,cex=cexaxis); + par(las=0); mtext(side=1,paste("observed flow ",plotunit,"",sep=""),line=lineX,cex=cexlab); par(las=0); + par(las=0); mtext(side=2,paste("simulated flow ",plotunit,"",sep=""),line=lineY,cex=cexlab); par(las=0); + if(!is.null(BasinArea)){ + Factor <- Factor_UNIT_M3S; + axis(side=4,at=seqDATA1,labels=round(seqDATA2*Factor),cex.axis=cexaxis); + par(las=0); mtext(side=4,paste("flow ","m3/s",sep=""),line=lineY,cex=cexlab); par(las=0); } + legend("bottomright","log scale",lty=1,col=NA,bty="o",bg=bgleg,box.col=bgleg,cex=cexleg) + box() + } + + ##Empty_plots + while(kPlot < iPlotMax){ + kPlot <- kPlot+1; + par(new=FALSE) + plot(0,0,type="n",xlab="",ylab="",axes=FALSE) + } + + ##Restoring_layout_options + layout(1); + + +} diff --git a/airGR.Rproj b/airGR.Rproj new file mode 100644 index 00000000..21a4da08 --- /dev/null +++ b/airGR.Rproj @@ -0,0 +1,17 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source diff --git a/data/L0123001.rda b/data/L0123001.rda new file mode 100644 index 0000000000000000000000000000000000000000..ee66ca49217b0e709d4d76aba42589bb2d3dec1a GIT binary patch literal 83676 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 zΜ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 literal 0 HcmV?d00001 diff --git a/data/L0123002.rda b/data/L0123002.rda new file mode 100644 index 0000000000000000000000000000000000000000..21bc6db0876a4880d231f648fff979e41dd227f5 GIT binary patch literal 101200 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	JU}ntd$Ct@Iwqk% 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 literal 0 HcmV?d00001 diff --git a/data/L0123003.rda b/data/L0123003.rda new file mode 100644 index 0000000000000000000000000000000000000000..ad7bec92da57e835fe23f8082034446c54bbb51a GIT binary patch literal 291924 zcmV(jK=!}=H+ooF0004LBHlIv03iV!0000G&sfal++XkhT>vQ&2UJ%g<Ze>RpOV=H zqQog2CuDl~Bqn|DTf`q}g1Z)NwnIcI;&P@XXTi!eMgLSAHm`3tLQ5)Dh%M~INAye> z(bl~1)AH|+8JK4bCUvJY7Uop;PbP*uV_0-{@xysNxnHGnNi{g#NvtNdh~tK=RaX2* z-=wij9nnJoi@KzchyqPhilL2Rrp<xM?#maKKoK20c5QN>o5pX^GpmH3LVGn}XAF8f zFl{rKCOBLCo3Pn&iVD&=HK%ltFb4TxM2uFZI}JFH-cIX`<zdY%@=zA20hP89V-rP; zcR1H8<(G&*4fj#n-Ri;aiK=Tmf$WggY?6Nwhv$aKLhbnywPx`*xSh2EB%s|1*O~7Z z9ad9jSsx(*CJ!aL@xmz&QGU$ASq)sLcgOn#oXW77gWh7!!EMHBy246cQ0SI&As0MB z<;Uih25eech4jhWUV5XLF2oV`yxl8dtSjkv;lzB-?w118*bj|Lphjvu(?Db~TUR>z zo{5=_Px<;=X~*TQo!JzP(engKoQ0cvJN!+N+OXSVs56L!k9JnKg%<5~D07BGv!Jl1 zFVvla*Dc`d$-Oepq1br;=a^$i(9JNAYa%O}dkDF0eSlf9dd`_Ku|c;B91<_WIE2my zAiLstqur>G0w=a$;ONq`llRV8)^3O)BGdQ~zHEqoGA(JWi<=^x#WnuO$kA02C=rYP z8FV6GOLZKuN35G3g<xNWxoJKPS$okZvJ>vSAOH{OO6lfQIi*!98A_I{6o^)dS!(Wt zS$;ukY)5wY7-QLm+?;?uiF(5v3ckNsn1{BU(+4_pKg<PjJYBaitG;$LYl#_B3EcCo zi0a4P(z_TP{~s@~*tO7efzTPl_5~^cMApW|s-T@C{iqQi8f%{#wu$lo*nkJ7i11~U z*AChK0+GqtLAJXolS;h~tt#e}#A*cA+isT+C}L-O=R^8YxJt}IrTE&NrNf^AC<cEd zBjlgO(IAty22){-NUx;^V$MeDy<Q;6oNC+w60U;sII+%!6(#q*e#=OQPKzWjOWt&W z?{c~AaEY5!bwMO&>lEqzL~B%Pn6pgNgW?-?47Xs?fw4@Bzg3lkpPs}ITCj+9*Mo;S z{4NkW`Hgq!as?l4;|ll@{Ho%+HLQ<R<^O3-5jeOndauz2q9P?t3A+ej)K`Jy%7(gC zBGj;f`DgO>5E^X7`<Wtq`9s0yYR;-Smr;t%gRp%?hqkTbsG%l#<&E}?vUf%S;UaVp zMS7i9Gl!Hb3o5chnI`~Gp+As1&bv@gy?f_}i6ej3KI_88xE!ix7SM(#4)r-~{f;Ju zvm!bI*%=gN2Rl;)G$qnzIhO?ND;ag+y7LdMiPVC64TS;TlZP}YC&beSH?_Il3VFM( zaz#J0@7+wC=C~a!BB^}?3pCdFaQDc@M37yI>_c#D&4{0uH1SgP&-48^C_ani*n&eW z=Ifjpzl(R1UT@dHAUw4{-_L!NC#(D(BK9#D3BU(vwxD3{hP96wjk`eXAsN3m)^^YN z5Yx4cujXt_yY}PQygD5cqs${Gyc6gv4j8uG6NtNJe<jQ<{G*!inDG0zkBVFY<eyP` z)+%7NvV<VcdY<5+(f(RTP<#bPD(~lt+};yOisUQ^GP^U<%@O1$kv8OHwKl>Fe<n#q zPZ01D8=rdV#k`dG;Is%}?-1sBI-mNp-8E9S3qYNb`I>iieY*H($(dW*K0`$>)gkOp z1DpO8%-wL7{`psOo%(xqJ6rz8CIM&>RWA`xl6sWSGa@?_<tl8}c!c^Bough&R+ZSs zzDi{k>11|6mB#$knmYZ{F-(nnfY?=s-K|p7u4|Sj>Omq5UnnqPO)T;~H8yJ*tIUfL zV^a%bsllg02x%#4oCrSO9|_G4{CE1#jsCw1(oOfBP6fbQ0$iyEus!i9Jvi;}L&cP< zjaOghz7VVT2Ar!+1m*3iK_8jcmFP7HKc~4=aA!<hP-r=4V;r8UNdo`)z3G0Ty^w42 zMELu;KmFfDkX(A1#k?KVSL<~NYp=)Mku6LuvMIcl9+E@T$o$<NvnJ?(`zi7!bX{0P znBa(FB0G>jy0xrZm-Xn*#v|wRD&VM0YIh?zm=iLNU;IaqYG08c6H=B!b&d$e&{lD$ zO*QSv*;CdEdj)5uP3-BY_{*Ieas%shX3E3(h|q!T%ol57^%^&-&Fm6DalUMNgB)Cn zeu-<m?4%Q8@q7dDH~s?qz0*isGZ!O%p6C&#t05;<^1}sj0+EY=Sq*;*{M2;U^qSyU zJ+ZYJ*I*T9|AM|oNE@#awC+1GGdJ>L!q5_5T1u&y`|p_dif!j+a1_jkf;o?w%v!v1 zZb5JF$_Qq$*`+sduz*2>Dc&&=Dp`-KQsm^G22b$RQ_c41fUGGr{Y{67yIF9si8m&y zTVIDj)(mK&rU=9xB>)kZpS<0ELEtyo7K>hVGsSOKQ5MWinK0|VX1I$|mDqy2%NEYN zF3mV9s7~F=s)}<X{~M39R{Nw7*8T@06s#*fICX5Gom+B0^cR?16>f4s4(f*3+dH6g z%U_pPNN{h-_B@sngJ^tE;A6xct@?C4i8ll~t8YG3YM!vjQXx+A-$Q`|c&3s22tC)c zA_&P>rt+e82rj78iE^C5{dX9&W15Oy3TsQ&f0KE4n7>-7cumMVHm)jzxv5>bip}HH zI3zazm@a!@XJ^j=bKT6{oMM}!Xp3KHV&!!0sI^u?*6|e$zo#Rx2;Np&NX>C)pFh@L zUvfyK86RBUc_IN>C!Nth0vKc@B<2`iFEExtodt>-?En^eEk@Q0>3)eN%4IoBSZ!Am zwBP>@UhXE2EP0O_B$^W82Lq`-=C5RA$@Z*&<?hxnDj)DF0GWBZhLQ4`@OS1e$7au> z**W;Cl6+<Ypg=j(kW(^UQSv+-b5CZ@G^R{g(BHmi`W8Nv+%HSMU%ohc=z-9>e6tU7 z(2Q><1+j18+IbdXPM57nQ!O~oRHmZQ)Zl+eu(NH82RAQm(#(Y8jO+NT+K1brl#viG zKq1J<f=wOd+DCBTZ7`f|q=MXJivrZ{uo5$TcZcgNyjwlzGrd9I`MSF4REV~s^eDM1 zAi&fTTi06CYvz{=u&cg8)GXZk+3>=a2g<Re*OBzl+V#iZ&}crM@!bMSs4P_DY9q%D z9cfw@o2dUA>@3FnkBUS-*C-1&Q=Bg>(|EA)k_p2&p#bev99l34SSa=OhhdNRqV4<W zk@+fG>T~d8K>iU2e{O_Q8^MMu<i_WUycl$pGQ*DvKpY~CUtP?IcwYh~^$@yJ>1_#) z3WX{7$bq}X#RD%Z_ec~#Xi_F{gWlM5l<QM7gXGxCXf4byo%=#+auLC@#A0EA^5!QR zqa{AT|D~@Y=+^zgJKfc!iQQR0HmhHwLoJ%#^+08?`ntW*{5)(0Lt;MP1WyR#covIi zni@qOJYj(a_dw~?;Wa+97L8hxD|iJ{8w=fj^j1#q^eoFEzP;&EU#~TPdSzS4(0X36 z3htj$b=yxY-Sk~SEU-VgVN0IA9=)^oj|=Yla-W~lUN_uI7VUpCuN^wZg{L%n(7keC zRwWN!bOEo*w@I2}m?%hKy|=x25Fj;xoyjx$NlvK$?RAGtW_sEzkbWv>Hur#Y!8*QU zJeqq|RBj_rNtMsXEJ&-M$y`rJ{^MguxGLQgtKe-up0Mk%7J7xWv#~rzrG|0pKo9}p zpOLbZQ?Gd!tYrDM(jR@G;=_oJ$Ti@vq2T1p<o<)Jsk~Bo4M5{a><VdpP#&fey#18b zD^NCN!9D>D8Zt9Rnw>^eL~8p+FJk#w<)$jmcsnfxF!*1K=>S?yb!oSr=yk5ErEIT= zi{RgChPR=Dr3{VJg`<Gm=uL`=c~D*BX298<>!DJPBSEpoT0klh-^Mty@9fMbvNfYl zzbl2#r^q`)P3W1A`q@>kg}~St%Z}^en7L5?q(n&`K3%T`B(qX{siP7`1n2YZTbuc5 z&FJj*b-Tbm;t0;A3N!{7-lG(s6+1i8=_WD*z-$E&+>6kK)7GMs??5YNqC<=>BZ0ol ziDCZp0k5GcIvFo3K1zY5`jet=4nMg<;==_*$4210S!BZ6TmE(>?K#8?2o*M0DaLTY zvt77Yrahr5h$LxE+*RY_f4Be{;I}$bj+MErHh%fe_ju;h9A>ZW3^O2;x?*?X?BeHQ zx7;C`X<SOv<v4&av^p6V=E4+Mp@0=$X}#Zo$$2Q-@dO;0G&`%MQ#<s?yhcE8d<oYT zqv-xtmQ$~iR6#HpkM|R==dAH3OBDlTq>0gaM*I@v(dI=D0D^W#S$^<6j;~>mFRQQ# zxUGkr#}i@&^D1ILx~lTl*AJZz!(I?~r12tJhMV5?IN_ilk084gNbk&J9>~}x3iS@E z#e{qSVI>CED0KK}hA<&3-6k2+lnHzr=yGjr=O%}+>Yi~782XL{n~O~@ZlOw<wDAv# z*W!Y_djWANxSoUB^+ZsUC;A`rjLtf*AS?1BZ*3>`2wwpb$S0p7ZGTT_J*8e?`c0B= zj3reoeXn@Ozfr@y=(DyqRSx-C9UB`OtDB9ICV1zw7Xd;fMr9BeRxNII@Nd=^I8B*6 zgH=SeLh>_We%OJ#3q!sG&XrNaz;vyqecFTZHkqjCw9}Bw;ZbGZET+k=sS*N9zCqsW z_&HibXn6ml=3F?xuKDp<&0IP!3X~6)p_6`)Ou0fGzA<MpG-LYE*E89!rLpPd6-RMJ z{$WU??hz`dG!0z^$Y2Bo3}%2!R%93%C`u%?oHOx2&U5VhF9nS5i?q!MF7+JRG*jbB z<h1xFKJJaTVKDHP=}S0mh7=eLY)5f+uux(8W_Aes_+er8-osnU8rHRpiv5lUN{NeN z2dW3f`OL~AdC}_hm2~~SFjttC@VR;1@4Yp4%weE)DIyEmW51(rt;qbKhfyLtO_Jl` zd`19AD<tU&XLbmits%O}opQ4Qj4G2Nq6F8k=NxMM)o3EHeud%#K_iciIi8U)900C! zY<Ba9&!;`zGLmtqQGVOmT-7o?_hq*tRj?=!J(P~2b`YG;Lu%$gwO7Z-mbWodRV!v( z9Ytm^bT@?=jLmYecV)QUb@7*F?A~DgUYZEd4L{@%+a|2WZt4*L41j9!q8t`r;K7$% zCY4BYLd6E|c7)h#*Z?;VfaR~eck)nw-ttAL^^-zwV8y$VzI<&>u<f7pDys(H2eF`I zM0`*J0xl&#>B}-NlrhDD+>VPBZ7r?MJf!qjtf=ZKA{A<;F0zX-qO`igkfhGUWJqY< zuLWJ}3FG?1=#r@Pm3QC$8RS+A4sw>#ro;c!rMgTo5&l~pA8J9YTw8+|0<u0XNf{Si zuX#{53wnVuFecSqOaR%`_@0`;UmC3)JaiiFjEX%VbIMo6HJyejmtgks$_V;*-%Kj< z7UIB}G~}aMLEq#b4)~g^#YWLasiDYebyBsyG(ElqsJ;ZjQ+XpE*?dPmw!XQkTjo_w z!6KR~4X*(SIIQ~s`H^-v;kBNUPtH?^s71)<IbXQs|736c7h+Y1#SQ6C-g66XCl8Y+ zU-9(`{u%g)p9fQ^Ttwu`7W&GR$r+%xtnnKz|HmXj%2+{OF0#YX5I$PTu<rXDqP1z7 zqlqlW=JE#7N3>LyA=~iigOU)ZYYsHY=qpI{A%F9T*W#dqfi}37^SGddMmr?H^(%T_ zb<O(NH0b-RJm@G7Z^$Q&GwR{s2N1G($V+iAx&Y0x6{2nW_e8K+a}QeF4co^TV*(!3 z(Ko;@!#N}Jet7k?Qt%?8bH4<M`8mx3ppB^vt2s<QpY3Q{3p`aD?D<!{W>M1&klB8` z%tH=>K<E)!H9G2lTI9%%@p6C+-6*W7A>QZsu43(f)sJrl@l^ttfxOpzPG9!;n;LBU zctAJL!5=^0C*%EH{$d$WU-#!?sp39?`6NT$PO8$T{d2o97In#cPdCC@HSM@kKQqlW zx75<wDmJ{V%^4Cz<+o|#6?&{23xo9URuXoFrGr~Cd(+<y*r&IHxpBh;CsLw%1L}^g zA^t<Si~_R>LVTxst31Q~pu@QfWf;$`+vU34MpLT;^7zTT5<g0WjT%qa@_omJM~zUz zlOF>w`}WrjKUBawX{Ua<3gH;2Bd*lDNbrd-a}Q}gRg{BACn~0DzT&(#|GPZg!~KLn zyjWb^YwHz&rk{(-S;5Nt^Dx7rO_!gDBeSwtay_4DVS6;M6#rR_eFV^6hhl!oVUr5Y zhE$S_UPcPsDGOthD?vvG*Ak!$5(u)bU2bUD-t`zX9_@?O=-wmHe<neAZyk3>Ef*{P z!hkmlI%~Ob3f(`Nw{SN_hwX9zNRSj(^V;xq<IJM21lTeF@{PtTL6X9lyQq@3CGHw7 z!zTSom6z1nF*tsG`I#^mYA*d96QJ-BZRi2IecxToVNFnpXyq9|0cn|@M_nDebaP0< zB|D^eqG)fQoawTir;fB+^ULZWrEg3UCU6bfhvb>YoU;{CH?%weC5h@+kdki`K&vEi z5a<zCR7c%}$gCz#_3{#o_omD(k)yE&!C-Ch668)fXls%+PiJCpJBt5lCsrvnW{d}y z3tID=GJ?nST6R2|LfHlfGQe`c&V$o^pwol2dp9VWrBK<{&u_3$<ApD!^#!ET`@f(? zra;*iYX87iDCs?|R1%=}OYJMqw^Rj~h30QM>~&6a4RpztjbO&huSI>icmufqo9119 z!Gm+0!m9}2a@~cndXfTe8x?MnFaR9XQBTZ&efYK_p(J9T%^1o;OqVFieMm1(0i;PN zpEFta62Dc4FF9mrw=Pj_t2HlO&yp>5uX$z!mRwzJ5`RwdBrlX=vKfH)b|V=!>6E!l z2UP9Np~dTyss=_g{KhToyT%#(@|nw7F@d#OC5k25nxQXo2Lu@3nZdy$xvHPlSvP6@ zezZZpg4CNrEeM{F{4j`DRc6mW`{SR;2MH%}EWsZAI4n#x94!Xz7O7rbb#T1$Kf-Lk z-p1;jms>O_AnQ^U-7Xi`j<V<mCV!Byrqg~>2_L8^+lW!O&|;d=jL1;~D1j4daqAsR zOA+DK7ml@YwOQ_U1g#*wfM_Xj)f|iaU`-Z;syAt^s&TP5tGYtg!@@gmj5Gwx80D`m zPd3^advDLCH^>9sAwyWMk;c;a;pe1;3bc*r7-t+d&DbWLO|lfPKmTF(W98TzeSoib z;)og1r%ApjsB%yoy25YI?Px7QZN`pJenNg*EYf&G#mLA}OV3qN$29JID}1fslZj`k zCVi#!e9-*HgP_#|^mw=wRLaMn9sKXuVo37?nfP2sk2-+De#ww#97Ow$K$5#9gm1EL z+<Ef%R13s<{XIoF181=$W@ssBpHVpaWll)oYB>L}1Ke}rBr&smhZj*Ijm~NFn8a5f z{Un@h?=5ZAgN!XY)8L?mt!jG@!vAVce0aA<+Wfy;MYH*iM4UeEh-HOcf%iJQ=T_2F z$@#G3iDCtCHkY7qlZO=EduDt?7WLl1v$>!7Fhp76tzni<RL9#78S)wmnL@w6C??E) zx5l21vf@|F>W0oBBeC3m?m~#AkeIZx>ZEd0LYPRH`}zP*d5LmV!(J?`v5m)AQNZbk zHF2%<h7N&zfpYf*OJ1p-V`|_#3-~I7rhoqRp-+V!YDFO*`>!Rm<>F8vjFb#I#-zuq zh}W+=0U4U<<Fk4Q>3@$5)KJ8y5lo#N0>9r?mVirWlWK}m`u}PlydU6SNmv3gvzD~p zeG(gnoYN}yH%;GL{V1^N&uu}ri{tB!-}n5{a$(BHU4qzb?_!{E-^58;i~XPgZ$vp_ zj);i*QGTE#UWKXcR=Ne}?7^UB)8DY=y)~VL+O!5b<|M|Dxt$Rk@?b?X?Rq-F(QZxh z&V}pYKa0S?kibnG*N2Alzzi%j@aF)JpA`F+Ie&28YFpg!Biv!TjivEa$5O|Qs$oGJ zaE#Pvh@D6P2J0;@B7WcmaD%HRFTQ$V>?02JtM^CPR2_49$Zu8pEv!CFBH3yAuHY1C zbemg2MwkS7r$6{T=uJt=+L*-u#wYr>wd)LTWE_l7T_l%4d5z@}XZ4Jvw0LJF2paz8 zEt?HnzJ#JdG79lqy}k1X+2g28B5<Q6F^U@Fz%z^;^TNVV5e)mIT`KNQ`DBBi12#^h za&*}e+>sxcGc6_F0AAscgwUrXfIXqmmXHXn`yf}V3!kH+_m71uw2phEF#n|{%<4v7 zS&HrrAaTY2vdyMaKQS>^`*HG{U3;*uAp8a=%zKjMu`fQUIEOu8mEPasJAl}k9&@^Y zZW~-AHcTah4F%+oB2iqwh^m#R7%`*U@-1^OT25NBG%^pjI*uLDmf=!>5FO(_xsExi z_4j=M#}p+dxXI~=v!_Qu2V=2YSKs2oTFUdPRJ?=!Kf3BBMdl=`>H3}`7X{}B<B2<i z;VAS?WoND)=ZnRl%B5tNx#F0R;%}I&{L=Qcem(;7a~qe=TZmfZA)06uUidWvF|KO5 z%MmM|L&R<N9{`cxo{h2qZd4o{U|BI#>9c0+D4sf!fgLiyfM+}&Ke!|0appgZudJGL z_t*f=BZa&Df1#ga;aID;!G%N_@x^R~{9PC!Nc5Ylh{CF75<&NmM!aneI&!*H(fs!t znuzx3f;B9m<4%L7U>AL~VtTnmv!*SlzzjZmzWO2x^KezPUsHT?2n@C*D5`f93UWU= zKsZbvk5mr;5|#V=tHB!Y41BG72l9`;8o(J~=091@_v;X>Jh8fv=<gBSp^SI2WzP72 z&vWa3Ws_`q=A+QrSs^_30K!(+I)g`O2#*Z?Uw-bKXOrPj+p6hJ!8(y0i9Vk5bU|x! z8X!t(zp58VMnfev4)Eu2aNzxKi$mJmr#5Bi+1%*XYxp@uiR7H|ErBS!tz|05U(L5O zSksN9Xk|X!0X(uL4?8Z-tgZ_O6bWtLN>(4h==ju&ssnRpVtPcm>f_z+#hNOLs%0qM z1%v?wfO=SL8kPP*#&066Wa@1JqJMItapltUtA%FoPd#^j3~n6*{NWt{%Y6o<TYL*` zzX_6bC`>idZ(j5SW05Xd#c?<F9$x`F$ng6l@4HH~SzeLR3<_{+aZqX~4fS*L`Zo`k z$}1LE13<$#zS|EA>409AS8pd-dMh^mwB#NMpCtgcAhHtge6)vS2xb;RRG^RsUsp#$ z8?3HAt-!%b;wblt;lQM{mt$)(I-ay_g}Ig$+TWvup@O(OL%BaU_7nbH0o9e&Vs0;9 z%_=R!Dz3aXRIX1sh#|(}Dv*~<QE^V#vrFo6IctY<;ZKLX+_Ey*7`J7%xwn?`O;t`Q z)cLq)NFvu(3;)|=C-@vGblZ-Ej`C3zO3lY|r+@B=OtrBp%$}F?O7OPEd;;L230yN7 z?PNOPCC$kTKqRkj!*UmfrP&r{a%h-awnM`aRG-Db#5vLer@_A@fuup7yHKnXh!W>> zaZ+xuTP4>Sw|#B#Z>j-TmL)W(*xP}e&Vt7ANmo~UnQZi*L1c|!^Lg!>uLg{LLB7{< zE%~e9kyUlCS-{|fbs<2;Z!ro}&m{|+Z0RdkL#V07oPlPBRED!7DFecg;s<ayw)e-Z zK4dN4YFgZDy+r9jE#~rwN=ot*r+I=5wmk4W><2r0QzKf*W>k$!x0&(U@cW*9k6Vy1 z>B_ITSbbUb>N3J&yvzN^cO**UYaxP65xUCL&E6>)jT(#}<5<$8huhU#$^k@)j>j=d zHj5XaBXgJ6Y>*H1m~uq>?;ktgDwt`;dm*42LvHPI(=tQSw_jGq?jatW&GR7Vrj$>a zofBC_Z$gHIa0{wtz$?`Eyq!V?@rkRxXs^gGVPksnv0!<Sd!88Czq!?7=A+-6O`(8| z#XLmB!Wv4a73F+8P@qFo(+rMmXO{!OXVKZnJDpv<mRYwFkYK~mdabvXgSV{ML_4yG z`^YD!O#7Ez=BUKio8I6vWC1tF;32z$dK}bB`(7DTMv39B>z@f*DYj|uUV-q)YO#dr zDKVD04?r==)_GOgPXMoaAie&H&XRKt_7jgPLeb1OAw?+~64?0K0_}C>)0re6kfekM zWy)l8Yd8q=D)uoYGrG_igc)&4g)5eC1;%?={w;4F+U?0x^_aYkO%e&6Tr_$2`&977 zVLh4lcP-O6t7{Mu)H%Fu0V@E-mxjY#VHMI`BRW8~YYa3Xe2`ncplo4LMtd?QZ1_8j zz`2(DA71*1YP4aE<m#<gS(ymb74CFn?>d96w?bYhO<>z9YORF9bYcc)u)cJ3%goC% zHES07cKzRg1W0Q;HJIf9JdFHWKjSJCHGKE@Gu07Hr7x(V`o=mm1>B)HJMrj{H{$VW zu{sC=yaJNf@^yHz_xSW-c@d3hdwIT>jg>&LsX5IOuOyH-Q~5KM95aLjXidz@Ojv*7 z_$0&3G_2`4frh)gB@i}y1Yo0~K9&Z*&g77OVs|N`lK(>TvY%?ia0NNs@%zAR`nK;E zJZ>SmO+y$nHe}kA$?m+kILxNDo~)@r9sKv{$cbUtXb^sF=Cb3b)UqPs0OT^Bg>ibk z^Fpa<xaop@59XyNe;<=pOhJDWX7aZ6<Qf?Y5=NUr&D4pt+v3}`{L0?Q9Jc|e3s_J+ z20|iov4IAsGGIUDi`GU;oYg+-G>?614@IDZf2+d)H$Y2%>31<TDPImPS$X>Kg8`0M z`_>aC^{t)&VR_EPz$UEJRvNr0u7wDi7IG2iKdt%zN2%LV{wLozmxAT(<lBD4=V6() zo0%%Z_=yQ0+eSL)271NxqL3WE58c_;;t-7L(!Lb`6$AagtZGE&w7<^)5`*Lp8D0Wf zK8m7x(thjnGEu4dXD8E|Fc<bBY`p!Ec$2ydfYjeSM&(2CCe9zo>)_2d?;2(<LWFx% z0w}Hl(C=tio0y_1DS#;MWBXg7{lVl}f>{WEXTUx!)V<Qy)`>0yU@M5-sPlwjZbC)# zFCZ#mN#t8w7*+JNtvsk|^pc`JhO<0(N*Hxc4B&0n6GaEef3h~xm+eq6h_yd4=Dx7B z{$r+tBhxm+`>=wU9BnWi0znT4x6ogh66knFtoSqS>cTVmwMoldOv0KT{CNnz!8~iF z>pk`(@HA6fI9++NLLUn8xZfz;QEg__pg)dO;nxj#r#if?0?;8REMPZAyqJVCu`8b) zl;AFH;fCvPyksbBScaB(e&VmM_frD?0J~(<U}xIx8p{=yv^tdi{I=R7YUnqdg=f0$ zLdx3i#cbzZqQ`I`lk`W`^(qz+>c1V#t#)k^y32YX>kO5g@W`@QE53J~LJu^{F<TwN zd1;Lv<+PWhteNoYoA?<=rDSQ3P%foVCrSrNGHT=rTd~UcY{1OIyIlWF2a-X9vxNLg z&I#b^OjPhql(FudSRVs|&|}q$kkXaE@N#O>TH?VuFDM4I+x{`(VgigA&6WVXn~=;A zOx51KrB&?Lq8s_-qYixY5VESw#p-dad^l*AJWgD2`i^=iN0!-5W+Fhm6?n$^XtC^S zG1Gt$;_qo?trI~nHrtzrj6rVQapprfxo$W~O4rN{$0GlhQZ|9-Q^TX2F<$>~_k6gn zjBZb&J^^P6c?OX_>t3z}`9UkP9*30>EFHs|)rRsK=d6H%&g0k*1)NfifX|aagQXuH zB;9YIRj2&^RxT!q{*UG-%|yr(M(jt1<f(E1XlO%B$yr?xyyv>_)O}ko8(nS#K;Tmu z5CMVx>ij6GKdm|d>ZVw}AIlP_NCsv;%tY6Uu7m9Q+oRg?J57@>G#>5!lE<!(w_)TK zj*yn;P@>i?AdeGGT0gR2zh;pFy;6ayP>AXH^E8IZ5I!ZtRJNn4Q)!@KaK+$`>3|<_ zGa+&wMNWqz>r}IS@4V^UsflnogwlzUi=J{Ps`T<|rxn7aUSfhTkRu~!akpz!J#mOO zfv+9r`^EM-Y{{@(7Tjp)730%gE4Qd1Ij!goT#LaX_l!rn`Xb^lHD@j<oMwpd!tCq_ z_R;4obo%xUN-`FfVr%f}G_8(F^j64pyM$q+x55CEyp|d57Bc{=i}hnFe?<w}>Q&S` z$E;o6L*ams#fb{6V}?s1{QKN*3s(T^QP&>Dt@>@u6p&CwajE)9M|i&A43}Q6u8BJ7 zeeqS<xj{w5;Uo)f799r{J}|sqUD<#Pl4$)SHV^H`EszX;756RxE~8Ozx@aV90$H1~ zKKR3GI`eT!&BSxO?s^fRa4QabO>#KZ6!N@r`&kq3%Y2dXbBXr9Eq_E4W<x(PDL|2d zr$(Yx_UA2ji+~CHqCNg&IIrQmRtMtQqOrX!?qS|R@I|lQ`iD|l>qb-y$DrEwr*npq zwNou)=nioyH%JtNmF<HXKsr(xV!$3uWTV8M69zM+mx7V>G`H&jFkAQt<(Q=Dio4s1 ze`3a^U}Nxe>^>o96M{~;EOyQueCp-Q>lA7P@ki@d-&E9wC3fVYA8*b^PF`L9ZoDdB zSMSY3qQ|G}Em=67!5Eb-?1D`YpwRt-+Y=);ipI)7$^FYL>5f0ouuPKz=3Swb;S|cx zxvkQaY_1yV=kwkM1*S@D2w?68(c6gr88z;kT(<J)t3&JTEXYDy+K}F;se*bLG5w*W z=l9!Rx8{dIFbKiq-bWH6t8q!kX(vt-m~-$4tjE@4e&}a#M^P)&c1o<hQsn=3r{)HK zMBiSESkGv=&D^eQgac{{hW2bW#i&EQE3)U-eR(HiALR;RmIJ%-g2<HhYW0?%#DcCa zd>r&r=VN6wL=(Wv9%3ZzOm?>hM+^~!V26qF*dkjt`N0}Sc4ere6Wx6V)CKQhGDN~e zC<ci($4aI$$VenkS+rb;74iG;g<@Be-GWQdeMe<tMP4@J(fNra$Up!dEN#1CJaIHc zVf^tH(b>mqfu<&++cF24W%v|QF5hi~J4URdqP^HG>1bPB63*&}E1akEqbh-wZwde2 zP`fQ`+g)z4un^mAu^&hu2q9y)S<swOkaiU;`GCJAix4m%Fz+%wU@&D(R{1h&dY-T~ z<Gh@CG(-5ro<i4x957kW{Cn-8WG%fFvsI@?260_1wd12N_%<NJoATi--;o8H9_404 zQT?Tv(U1-Yl7&y;5y~Go^CSo<--2&}Qwv4{8&nGi%P)2Sk?tyLE=A+&{baBElst~$ zV!x@jLDQH7T!vtrWH3n86~4OP4Jr@X%B8%2H7HX94$2HD8uJQjt8k?)3TOtWhsNPj z{oeqCre6H-(nk`r;f%_q8zWr1hBVm~yLzG!fUSc68j%Ta1r+c+)?cFD040w}D(6*% z>KMBjUL3b#%?kU?x@Dk#_Wc`{0meef1GBvMlhp$|YbioGH*ho9!{sCUgc0!Q6w#$* zq0?<J1SWXarW-jI6YUuZx@S9c!uHRaZG1m^4fR#kk56cx1V8|FH0s-lx)jzE<q2{k zGw}1#+LfwkelU2*BxJO)566kR(kV8EkWr&a!X%~FQa4riTNy&BWyt_D>(q&Yl3WnM z_TgZ$=Zml&8TLL5E%{N;j45=d`pkiQ4ca84U#rqEhhQG~A~U8jHNrP3mo;z`%|NY$ z1=$=J(DnAf=D<<S{NbU)6&3YM8357k@|;5RJ#{qzPP&CO*XWQdWnIZAu~tc%PF<SU zwHKExn~i5v_8`omCD7d97;&o+`M?V-!Fs#lL|$IoUI@d^L%@^9Df$xzIi4h<=q<7{ zzXd9UEr=FJv?4d|lXOnqt^B8ZYOiQ-I>rj6(YAZ}0n-+{O)^^s$qy-d+n{4WRYNZs zD8**bwpar?FWKsZXjbGYL!c&iWe#?fZC#|U<etv3n6PRf|InU<vvA`Kwn+?+LxHEP zSBUsQ!n-l!lNx$a>RnE$*zZ)T78L?FO;dIHvTOw;I@>@}XnVr_3xNQt!%XiB#NPW= zQOXIwkA-|8DX^b%tnb{xHf_@~4%EzA=bx#;f>TLMYk;8YaFdD2nD*6x*d?IWW&;H3 zSl4AS?ZqE+V8!=5n)AC&s!6`pgyueHy&+uOZ%QS;GeBiLvlA$xNLr&S9R(PpA_iQc z2s}{g>qGTXu~iKo3dq$I7ws6O5~;jw|7<R@eYEc?kd!CNb}glzRBF9L;8jTFiZG4d z1L#9f4uztil%CqQW&~C0VT*b#Ho5xdZZVw0|5R!i&iFa6`y=Zw&V@`<l$~53$ic&? z_<k<Pw|3!HixPt;6zdai@eL%Sc7Z3272&|6sy#az+*@?tj+{QXZt6@ip;(8jc-f;I z8;jK{?iWNy!?<zwmMHLE;g((Q!Np0VFGTk&l)RcDcF^81v>Fa4h}3;`#E5$7##BWq z`1`GKv&cf=tL9+kqb18c0PV&c8^W16N-G|tbOE1oXB$_`pNXLEgGNO&;$fqPODlY| ztL3^jeQ&_)ww2^^BuOPPAU&r`@X~#dmsbZ5ut}AaL>hxLB%hiZ)YnEw2ma#9$2UIR zyc0$KSe3|QbpJL}XDi13J4P}jHFBYjGnM=QQpHw{KuwU+LBiqteml>tru_1@J1VkL zk+rq(YYm`F2t%*Bgl&;4^bQkxM^dKt@UP4kLZyt4N;$*Rhn({X0d@k<eU_;(072Fi zqVyvG3trZoPe?`<NUPcuI+wQca(j{-#z#EuBcBFw`~j}k8*QZQ>>R;FMQ3a<T<sSw zL(#+-lCHHB61ui36V49Qf#fgrg%0TyfX>@X!}!6sTH(eHDN*Bf4}i3}_1V;AT$x|j zwp$yc<Kfz=YPC%lz-FT*1jn`}{%BBRH5~5hs6gAUNe*fk&`oC$DBqiZ=S8HTjc}=` zxYono5!-kR*8xC57a26gFLZFgtO`la@IcHl>X36>7c?SbCUQfn#q%}!WqWSY9R6xU zvlO8xKp)@XOzzp_Ayj$LmT_6_L_`ryGjDIl6J7!2EN)TXLL$w;(oLv0oEiy@wt`@h zb_f0*5du6x<K?E=QDS12O)SI$a1hF{kUh;5W7!y0ncJUZRjuEtn8Lf4MxNcqo*S=Q zUd(!U2S`Z<nluy{`<JY477}FSSY)94?4VH>?{_BHlmAs;EgJ9TMM>b{%{oeAWP?qv zkr*ei%?K5>;oDXpr^J9*ekhZQWy7L93CDZ$#Dp-4edx6<$roy+vRq894g;0`R=~JE zuk@eD^AL2ytRfK!YK~PEWNN{~?kEU1qyC0Bcm0C!t_#6R1_e_h<Ec8PKVutQ(>I20 zMk_=Gks2H4G+`kV3a%w(t^YN|lN2~vNiDVXy8Co2Ce2m4%>$AV%fh4$0XzHpDu_H% zt9hnLWW*4Guv-$iKmZk8rMypr4i^g$g&HT?oNo_i)5g$DCvs;fDu0X%Pxuw_rw#`o z7_WUYgKX`&smnw$obS!Fr8r(!5QKdyRGe&We8@T2guurgoV!M9&n*qKFzPe(l-q$+ zpYFKKr~_*bOcilH%ca27IS~^3Dgwyk_0-x#BnZ(tKv)2Q$~reKB?0?>erC9`tRkI` zooVxZW%3;x{C^}UcJoB&i8~k!l8PdUVKj<B2sW1M!mWUfWA`{<{ER-av<tyK?y;u* zA_k?QxtTBn)Jca76y8lZbdWWuCa%PS+cEPbxPteeIayZEwWhNyZM*<^%!}HAD}0R6 z138XgnF-R>Kh=G+4&U&U{66GE<J?g3s-x1LsL8%q2PSby0LU}TSAl^NvsV8m36Z9H zVhQ55TEQdGoIDkEi^?L_zPTBb;&wcvU)uF<cL+}HCorTKZFdJlMdd?8YR!pzd7+_t zD6wqSmb4{1gNaMblC;vO%jV@zVN-o&LNi_aA9remokq@BA7>EofXrH=dx6Vk<ct!X zA;M>aFyNFR4x~mp(TrZCwe7w6-kOr6;v0WoUFGV~M^qxF*Sb7eiEv#Yyxo(F(`N8} z#zZ%b*KEc-c>yaKc-OMy$A2sz&*uF-7%OG^q_oxaG}!Ry^XtG8z$x$Tcv!9e_tldp zlR=b4^0B0+Mk+3Sz~Tk-NT#BLeRIMRJ=C+~z9EmurYd2wxYXUd*fCa|D&+(;+!H41 zrFKnfIUVG>GBO`<JpZ1Bb(2=>UAhzJSoPb}w2MOgx@7_volQe5(}7Ic1E<49epG7} z5a6zW=s>Vc8jns^A}Tr=$-tmgCY%o-41SbJ1lvLgd-~=KHAtJ`A`&?)G28ADJf;?H zwC|<(wZv3xdb&b^GYV0%6%!LbFDwcU?m6-OM?Oszx8JPN2K3hev^>n{^_^rxaGYTx zb_$4q8MPpZrXf+@TN;ItxJ?-;(o#{n;D(ZyX=e$=GxA#lLB}pQk<VXgUy}o_XxwKo zQi<dv4JQe~ga3KuX0Fy#Yk2@>s`OLA=3RS^J<Uh>Nl<e$6TnXop;uZKc4`*Z>mk?7 zy4u2hP*NLLeQu`|LRT$n^e@d`)nD1(7#RN<`2Ude7Kt(vj?EBf^y+~h$3VQ*WC&wK zbrAhGyxdZ$o-6q;k9Xe%?Cxv#1DUhMqDg%3@3&w2OXhVw0on3tXS3G9Ap$N4IG@?a z+_Dfgp3sLEz74Ir9Rb7Y*aI<I%zC1Q?7%1*9K8_Um7{xHa;inV!Le)l&w}izHhAw| zTVH{9$6odWDJf@46R_B17WhSTMx|NT!B+2=E2Gh4+fLh0y<R61vz4RMMm-$0i$fKY zg6a<De6%9Bn-|2^dQQkwz@TD2&6;l%AQ2NPiQf3_TuG3Q-@1>_MWnhGi*K8*<AGaC zpw|-o2n!8nR_pBP$q5J%z&cH=9cqM<WD!`0UWI%56wJAy$$UJqqnjJNNq}2}Y7DAl zhl&sDbUtphN<ik?Q=lY1JJQQG(yi5<>v(dD6EyxO^syDv4;a#y<CG`s(7j&CBOocR zD-$P?c{$d|nMy)C3=6KrYuHq3W`)Zr_g-T|48j>8KtNa8g2*@GGr=tx1)PoxpW~sD zVQwPEC~w7jnQisK?o%-ZF<fv(Bsr+(m?<R<DfHl?Rw^PM*46IHEFO^#sW;grqF1aQ z-z;bn(uLQ&*CeZ&rUh;z0V4<_k*#_Nm9`2CJ7rq_z3YKwr2AET=<(UNY-jGj1%Vow zNhCF!tWZ1bgin|09^@Qyb)(E$!PXHAxfk}?tRw$2>b9XHkC2~@wQ{ZCAEsD!Zby_1 z*Q!WtRBu66K{&BJQ$H=+N{xI;dQ?=`MSJbOkox;p_MDuYnU*(fD1)(;T0=wLt3rWw z8F(6!D5}mz6PHv0D8_c3W2V2<vLQ;vlHry82E-uH^)7Y?^!e+?Kak!~I*8H|$~2Oo zH<^cztSn<%VY?dvBYJN)cbXdz12M=yIPv|103R%<&nC@nC=46Ow?h!$bwo)YI&aHV zsL+_F(*!PPx5w3Ozj?c2hNw_7%v481Nr^#f^$TlXTdBuj4OXJBqW($_PIEEhy9Fy~ z&~3vP8>P^O6^X!@yx&~TOPsT4P*{m>O)|Im-NQ>ujnvE-RSvins6TFu+3d*^@Bz&- zn*BgEOXnf<TJvk6UA+0`H|t$^LaApsU5>YJj;^<%WZN#M5)qPc3IPeQQr2dC&Q+<N z9pqyCRGU{_t23%_L0{_Iuo70N5pKn$Ba0_M)%9+_QfY`%{o3`aZ3&IdO=aN!7*aqo zSvr6T*r~yJ=}1ptpR2SYV%uc8@Gj~9gc=31yIr#@gq<>RS(Jy#cP0O5C%&PAr2eYt zj7*L)H8=_=<{n#j!e4-1_#>+(|6v2whvGspVC=6rTvqxll$f0%WwDm33%m|i?dwGQ zB{oLsq;i8q*J07PG#<J!aGH;+%|{Q8D4h7|0e*>c88(h7Fyrv8e@3dBQ^itGL;C#G zck?Gj!ZjEu=kORn;0WTVA<3mx@7oSWBzqM;$JqiLwZ8RaV(*(<5&l!rJW6bPrQ=0@ z#nB*u-(sz1mCytWxSTb2%ax3R50SWm&C<Q<Dg-F}kQtw^1%tUFuY%CFGPR4^Z>R<m zof#1+<8^iHEJqe+kNU#Zjkwx~`%?5sbO*l4vy0gw@c23wp<|4)P;YETlh_C6qoM-% ztTyq_p{H{5`^h>GerNYpE2Y4NUm+c3@%QGQlMs(7b4=dk!`2QQ9p$YNNErc6$E)1$ zH>f(6U<|7I!0?mEZ!arVg$)O4R+XJ=q(*_rU%bd-Gy%6#;%NCU+h2fFgE1hGYO3%R z!*+w%)8Jr-h@n}{*&Z8Bl`BZ*qU*i!FMci<yC(Y<)|5O)&<oK5F6M0kq8exlfKFi^ zq+^(K%Bt*@v{fljHM8iSXD6ann+}r6Dm)DXld~ee5UDfZ5C_oEgS@dvy=}xB>JMcO zMn&%?a_plOt6fh_7nM(MrV7}JFv9Srn;UzK(526rQATB|Fmi_?oK_c1KP+8sWmy<1 zJeY>eiN|zmhQcdifll(LneREKnU^GL7ShlV_ARDYWr3b<Zf66*7#KA-{uLSC=#UJZ z9dR07a(Y$D8i`$itnJnw#>L)R8Iks3Tnrgg`b?nATj%{{w_<GD7u}QxCjTc6Qm;9S z<Q;d$nuQ*O3a{+b<(Prg?rf?s9Ei=u{zfbA@@Ca3qT->iprmkV;)$!aQOIsl!Ku$y z62Z|W*j@F+0X>9XW1t&+X&-gVlV$$h0$zDrAwyXl8}2^lWx~NTrp!9Cj;L#U=n(X; zHS&aNOMVC04{Tw|v!p6B04(nZm}{%Cm*bE9v4G&!VB)XltSx84pez|u<amc>TYK<) z8b!K6bWk2_sBBoAnkd_oT;}&sS{n}Jv4}?l?)4=r`E(ivqF1UlGCd;7u{fF{=%Bj- ze@i$EI|%caU=qaH31OxjjYyT4*CKOgOWN#l_ZiL;3~t(UZ8{ei<>rD98`3>f5kw!e zJ+z=a(`(^#C2FumH6$<t+kworztz^GXJsLYlUcJbCtj{a4#?Rcq)jAjIPhd7VNP_t zv3uqWAr3&fML_s^C8{~di!~lgi%kDZ2%+s~USs2^+M_2Fo@<vOD0v(>KKw;F=)-AU zeD|(Og7~Nu18y>--yjVOJHJi2%=7*ub)tj6fVYFmO-K`Pwh*)3rbVpzJ9C1|5v|~q z%tCq3498eCQAY*{)kxS$Ep}=n7q0rknHk>=0RyO>C|?(rcFOFR%iJB*-A}B+Y>lTP zzu(89UZuVK;(;->q8i55fnPdsViziG&@DwXu+-`10VPQPg+Hvtm;u{wd*SeDy%kz! zF)kdBdH=;VLY*uZ1mv#q^#^0fXMl+mvsqSd^sm0jT^Yq;WYL1_Q}kMNDxOYTTeh_y zIMRth(g&4Ne~So>E{$|fs}Svz`Y5yyyyi#@N3)wLY_wc0s_?E=ByBUFF?Bek*VH_! zI>msUv1DoJ3Q6oEkr=dH&oFdM3`gOt*C%(CHDl#*n^-1^BBznXx3<ytJf~4oe)z(k zH6)r$ZMe)Wb_~fr;}`p%*p<Fgy+r712;wm`hd3HaXE({W@yN0~7>u7j1dwV?uA;NI zEiixxW{oPLpBEviT?G~o;u&bClNI{MgbkqU(y2L?IO1jIMKn7S2L)r9YRTD+j_~Hx zFLg_jbREPVsw8&47mmOJV35o1-5Ua#UQ?axjVrN*CWErLVOsz??B}^PqhZ0|lUK61 zaw8W1ubOIC7%5V}3wfPLUe%Qu8^iL?P)^nXjPY-6MU`NN&bvsDtP138)nzLMoHDq& z!_WMVQe=Vlkvw*(YKaCxW7Rpa5}4mWMxV1Z<YI?O7-yan<Dh+N)iLhp`DHobE>&np zT>nKbVoApI6o)|}MuFDVxoDXEa;e`hbkahX!Q(C5df0?#Qp}!4NJFnM!0cTQCQgs% z$Bc92!u&IjKgxCYFBuY@TP3_P_~f`yi$)|ME0rsnPDPzDd*EyxuK-Mbc@^vUKIX$X zXcKh*MO!C*_u)l%wV>qX)B#Fk8a*FWpWm{|Jt<`BF;%xX!hQa6Mf>zK2aHMasrl~( zbT8N@$Rwc9a1uN-bov^1!$x4Xl5;Z_h(T2tJ%ot0zYd4fuNe%}Q3NlrrVsih&vz*} zI($9QdNL|Reev<!JqpLF-<Z|~P$+nSeXb;h=V1nfTP?=^3rvbwN=TyOv4SQj)LgA$ z9raL$iOoSN9j${pgjzj4-Jw!fplI^WF}Hvvt-zS+Z$8+w*6ZXvA*d#hxrdfepwAJy z5dKCVq4E<^o-DxeYm81pALbuTFx=R#MLMWE)>Oqvs|F|>^eNf$;)3p^3wt^1?|kE{ zn(N?@sDmO@M(2`kWQ!+}9%xgAz+Qb#7il%6MLeLvP~^`LC$0&*xtoW#-RNdgUwe>~ zdt#>)!9rdcp>XOB|F?v^N7>VnLx6LvX@u<Ps1U04!Z{?t$^?-BSF=Qk&i0e>YX&cZ zOTFeV!JetX$VvCvP2_ckyB_`<G9x>6ao~x%(M!nK7B5tR$Or(t9^&aYtST9MLuL|f zOgz33r&1^d;Uc(W$pzk!puy~|GmcmbQ&<cDMatTYG^ORhHH6Wi6UU(DL#ueMsReQR z0}L%c6F9bAD35#Y@j_>@8tb|izThzy0OuRmca2w-j(c^fQ;r)+qAEwN3KNkdHyZ`r z2?sd<0TjCkw3?STvfEiB$Vj<M0@hw{MhmUe&@mHaM?JP6K`DRXpDlfxcQtr8<||ZR z`k)J!cDAd6QtogbL#{&?m}o%{Z+Jh&H&^r@S9_0{)HfAb{{bwhPRTbkVPo<2GViak zqV;q+O=Dq+(-MAyT{|kYv7K#X?V)lj-JvGbs=uU3s81nu*AK-niMkBNmqJhj?2`8N zY~!W7j0e9o8#XkU!WgElJOb!=kKUW{s)^-`+2ut-&Gd@NLh#N2=zI;+i*tb5u^jWq zYu{yX<^=Ae`lW56)Spa=*sh#(rHcVkMjGB)vNX=7SnX8GUz*-rQq}60!_hoiSYwa9 z<EiTOt_o#?Wo}C)JwoZ<(==v6Fgk}n%JgL+0%T$4Zdp}}{eC*JbSn@*91m+-+}IN$ z;RQ4<i&<k+w7KA(7Kf24_O~=s)b0QBmr)~&6o5xw)`=lJ%X}EYzWpN>tdzUF-oev- zxA!-N61-31Jd%C}DoQCiSZBOx@8hC;8VNF%rMKH!KgZL^au)$!((Njy`5she=MG>5 zx}|GN!t9>+%Ojd=MzO01RZg51zV0KX4-x4{VF~7iuTAB9Ac57M9)}9`67ze^tNAOP zN0ND49LG<+`{-y|KI#gb$JvT+l0n-_WBSB`<gOTChLEy+IR|)9h>vl|^t5GJ=s;8f z)L0+I|B|*Vm%wKWRr|zx#DwvWCGDN~?q*M7n?>cF8`6>Jz`9?te0gD*Imfv0S7mwR zc!M-EmY7Db>*o67?T5`Sx`Bf+|7Nbp;mS$zxlFHzOb|}CIEYF^Ix!)`a-1@g9z?7c z>6dqs(9Fb6d%SW*-Zqg!q1x{w`EP-M5v&pOeI0Onj6)oe(YGVBOf3jen+QUt%`lmw zwZ0dR6vTcf{iJS3Qs$^pQA?x=iwfrne;X+W5|rI_$ON58Gm!J|;z#4FMJum?bkRH8 zyhqX;LWgLyHwvFv(+*R2dz5h405d?$zj}`h&qFoYp8Nn+01?A4`CNcJvNQW7Z!@1g zQB3eRdz{oocQsAZ2${0#ZH_kHCi&0RRZ?poJK}Hm;j_;K=kCCm2;XYIJ5G{tM!@GO znwP@!viWo&9@IN$TSc^#ttA(4Zo?0+rJPiPuDBVk@0}-^ccP9b3jq`i+{aJrCeA(D zs0At4VCp1xO}?TFUs%mY&_Zff1&ar@oA2Yk5Hsawf=YYBP;)@oZQ!a*?B%^lF`&Jx zcG+af<c|I;N?0%2>?0Z$rx7L!eRyeUFX_dhnuK;u1e1R2FxGco5IefA*X8oLm-8k< zaEBtPDcUHWK@;ypK!w6H)NSPySnFI3QC+YV=>_?kC7+Z^uqNMA@wu&4TgHv8B9s@M zMPq5{3P5}uH^9Xzb2kM9FZhqQ_VRezjd1ca2<7O!U6SryrU(ST)LXjKN`e{VSji)( zF<P9}WSWDwS~3T)zSn*>t9nqUt3yG`A$@W7{uQz`-fIBBQRKTw+ZQ6Y_$>e?G@96? z_-^cQr5i<5c?7qqGq6eUzX$SUK?>PJd^HTa(fzyIZg0THk_Uq8SzQE;YL;MED62$W zu%G@Gyk`DU3eE8hrGcgkb#wyGmBNw0-foy(xmbG8BELZ(?J|MMV#9>VBJQmjA%jZN z!ilwDB6WbB-v6}wF{D?7*ig^+AItGxPG8l}V7C?VZr!m+vr_z?{Gk+80~icCx3HM4 zIp}gNwF!Q~_)$0T62EyaV)Fzw!DGyM_8!mbx<V@BKBM0VDw(fkK<d;+V6>YpbcHUc zK|w8CP}?Y<i!7N(Oqyli+l<}9aJ!5S;lD5036|Z_Ya^07>WyP^5|%Q`X<C+EH(<7Z zO78!`wZ5DknZD0lHfmr7qH%=|!#>jppQ(RbGu5OKlD4Lb=$B<LbNxc<P^7<J@^P1* z{AVrcwm|zg0Cgp_SYxF+!#<zOC2n3LCG4o@q9`P?`DIp#23>mPtgsWF<KhhL=dBUx z^^F_u9Ft>$c8AvK{H$rqfwW5jn|>e=fTqMdV{9~BqjMX5`b@M9+7?<Qh|=!{WGXDs zG{js<nCfiW$YzX#UWfHr#Z-e`B83v7spIfpP@Rey=g#Z~NASe&Ix;4Zbpm-sq$-}Y zgg5C)V`NvGot&ZDj-laDdO*UUFdq%F*Fuc|kxY?ttn?ZYX*>PQKHl25J0*1nS$sY8 zGaVh(T~k-N{auv7nc?c6<Gu)Ek{+!fW8-F=>NACrctp^a>uL2sf7}a9_-MG8bM7hA zC(@lsRP*&HlUO>);Hqq*q!ahWeYiPF&Y2||Oun>I`KbE*kVu4PfV^gK1ipXn8>hs# z3j{kKknZ9|>#q)z^9oMAol<G$V~sTC5(0ZC)@O57yvq!X^Ly%#-olS-*r<mfv{$>; zQ_}@DGUFN$@e+T#M)@`I_Z%Ma2DsoY-rB$&fKM+e=L70GkOb?6=!V~b3Q)<%UfjNR zF~_ZNihpv4K;LEHJskS%+SI>nOYFzbBjz}IxqH*HWf`>1$8sTQ|3b9PnSBy~4_@$2 zs|R*fppVr>qFa3)lbzs)>SqDbfwj#K?;c&qI!-Ix%}sIeu2mf|=fikAH?cd+r(F=a zw%!z(ph~T#5lF~bsMblr7A91(y_(d-Cyv*C{LI0a0xq}!xh5ln+L%TG8U1R>97Ant zdXYcmUTi*_*mINA%d9e#%{_#jG?YjEdF}~F*~vvxh~5%mMe#<)Os(`Vf3)FEcsoAx z_fM6v!S+NduZs)8M0@(SvXph{ShGPyZ6SsfwMgzbEpsu~!l&=L&ULJiCAHuHI11P^ zS%y=xK6ak3#2I(-IehgetX1NUdu>_7Wc@79Ad%`HQ|F-2@hl=~k0jbDDBp8<WZNE6 z`xI+WhO;v(1M68XHHCL$1%-)0ecE+$hym0Rvz5xV=NPEZ!&3NdigJYV?2$HYTe6Ld zJ7NZ-RpexC?$#>0;bWu-*(B6Z@#c)Q-$5+OK?=g|M(_<)9LYK9Swa{zd?Dma3M_yu zKw3(J@CFNpa3)39S4+}n#&7otV+|DhGg|9Zu)}L-XpF61G!IqFq=i&*B7jCV#QM<` zSc)O>gZ>`S9det`=v)$)Y*2Hmg5J4=d0>3Zm5BWbVX|bCv7rk7-YgRNMRFp_^mzsh z>*86<Fl#mq@G^c#0aIAgy{p>^usyAeoAmK*E>w~Tvz$iZz0y(4MqPMuVSwV>Md}91 z%TA-i1!{0Mp06~xaw*(|3lS5(Al|5MTnjzLmH79SIM1|rCWSd<Q%at7Vh8XCO30(~ zB4X>!=)6`f(C|Su3vt5tH-VEJ>Z>fY5>6JR+_T5yrH#|@fLD*6ddzZKZR9(Y5%*)+ z6n>6ip_H<_YOZ<07p2gvVCp<&*1{0oSTZq0tZa5=c*J~7DYhpzphGP>8RBFM$%X=F z=sZr_Q2bS8+<=5n#X3pvQ(@v@0hCJfQ9QCt^9<_Ez<AM>_O2Yz<zr5>V>rNqj~yeK z1-BfowC@T)=<OViV`VcmBShWtOrA3SBP*Igm{aDjc{YREUvtVJIKU@YXp}e>xuxO@ zn#4lDS4lde3(8v{q+Age%8X%sa~k&VgCc5H<LX`0wH}3yW^T`;q$#{Xk5kj{LIdPT z9DG|KX4|s|)Rm?Yhmwmp2#e?XcN#_sH_1sQ2I4W(6uP5IZUuN@SI(%ZL#NdvwcZX+ z9?V%(g6_EPg?)gwmYvuVCm{_dMf}B&ZpJEv)NQ#_8lHMnKKbq+Dn)0pGZ##bp7uzE zQaB4290tYgMZ}<y&D)}9jyAv_HfCUF0;CZpJ<92Ob7X_`KyY4YuuuVF^3WI7%w|LK zY(Ox<N@WOpPn{|*13)*i`1V9WDGOgh6mTEG>ge|cUBOIu39OeqP32>nlvtIz@=K6V z{=xnhQvehbUI+1YmE*H?`1ryxM^8U84emS8z_h4yp?E-BiSWmxd=Er-zT19ZHgN;) zrhQ5@e`$%49IRBi@dR1JkRdx`^f@;uM2Fj(nh?d7FKteadecHyo)m2PU*}%EWAM&) zFSSC0q!5#{N(AIY?VlXgPOqNnni?ouB0F)xYs%Ymw8lSAs~ih8BXIhNh-bQs{wqM9 zqHP%lpTZF{L`I&YZIgb$*5U4GEvjF-(OpQJ%(J!U7FzvjR1dMNx<#e-NO0{Lz&FKG zZtuB^z3?_V!dmMuHp`H)Nt<Mhhvpr>pYT28dr|X9M+W}Fi;1vIC9ot(doaJ9Lp3(C zJw%2C`SE;&iw@l*dBHV#i(-ThRxyIs00-l^pnK3T$r1qn8H;>2cHo!3>Dhga1I1Nq z-v~#Zvj+igz~-jAJwBdfb@o(Yvu|T|s-#q%1V;8kJXH9$(h*+$rgCO^R}nXaW~ZT= z{i@(OmC`(9o7%%e2xhwmglY{`+5iCs0RK{coO?O+xCkg^=vdmEcs>Z;I*~=#!OX-e zrd72ptWPN}Yhs>Bjc#L^kc(b<74JT5>3zYnJSDk*bxY=XnwfH~nCJQ6Lr5-fE{weX zFX5Rr;)UvvZQSFg2OvcsgA2`b8LhG$);&0NyNvk*)(XjObm}XfMcA44S{O6J%rz$V zQHJTzi4hS2mj)pWdV!!`I?Df5{rAT}NeX_*`vuewMsx1j;<>b2;Z;SfqA|Lbc97U< zsqA+!6E{q4d(H4PfcU|u_=k$o-zrt&ZT#+7&}#Ff!&6IW!@AOiOU=KLINAi|i1JSD z>d>^~1fo=m1|ZFalfgTtCTH3{RaZ&Qu8{x(To=bgU1B39fj!gP$4~j+7MoT^7rbP2 zCoake3f4GJ0e)tq7Er*JY+k2gPKl>+{5!N6Kk7#UMiTZwN#3W<$}59z+yWi4WQ!{| zr1E5>lM(${iw1+`ZFHg#UQYCGLQf5jeamWKV#NC4aorc93@SDuCW&wDsyfxmoWzeR zZyq4?$uJs3SceE=Ri`VCf+T<buJFT@1CipjnY&M?Et!Nsw7wddp5Iam2o0M1e71DJ ziZ9$!%!FZ~9_boSy?1(?fN;@c(cP?v-IZ5{XZ7Zs$0Ozu5bWxl#x|<e%xG>JEP|}n zvvo(|>=Nj05f+u==YPfk)FYg<?3YjV%QqOY0C+%ZnjSyoqmW1I;qkR!&x!llbaM~_ zqV^UwY%_fZ2{Z}H#}lXp-}Fwlq<@%ICsMxkyTWRiYUqT33MGc{Z3IK-V&F(^NUbVk zHBg+4P$n=np=%`&->Xut8%VFVQaRiS%UF8*fnB-5SN8EIcLHzUBk(lFOPRNj&<)eX zl<&cIAt@TTWnvM%8h+BRv%6A{Uc`nB_$&%8{Vm|&Uv7aF?py@k>slJ~+q5U#Y*fF* zhZZpGZ_lY-Vb?6@!bnwL+bqE``sR{a$0ipPJA+{X=%;$R^wSms^0ZbH<UxJrF3H@p z(FoRn0pA0BbNgqbL^3%onL3%N)<dt=)VoudBOHIDu6h=4HfUy&OvBK7ZFpW`E<NIE zDS$fo+d#NLI)a|^d+M3_k}E6~K=*M{%i;aTIuYo((m#YN1<T2-DvI~fq|#K|mTsq% z)u)6v{EuKSBtKwv$SX<u^w%IZ$fiYa8!RLl_;((Fx6{}8^2sXkhf0FE@%gFb25Bl< z&w`sl<JcPu@VdHE0%%*`;QaSpqwYr~c!LXJ3E@1cpJZJ_q=lZMg7V#eaS2U0vrwOl zj#qkL5p`%6^v{FyCCftJ1`+~yUG~%+Gz`u9-iMG-&!NF_ocindcFurp)5Qdansaf= z7K<<U4ZAIemtRPJvS#22BPYKZqa&>}6cHU2aeYi_@$F7W;Pnx#s~~?(0K>aF9a)JS zkFi3LAg9x_p!yMTgSi3k^v8p+ZVt;6VRu6yF}=qWlcV||Es~yN3`h=~!xARA8nu=X zyE}t3*KYNRGvy^AGFr$&g>N7vfRZ7Fd>IUE9`vLl%#=)^v7{ao(c5*gsGf)v8xVV{ z>3xv{T!QyO=xt2N8D7}whaXC`4@>V~hQto1i)W#k#VHxCjriFl)`5CO6IeZFjMBZ| z;!IMS0G{*M@(IQt#*?Kfl*XLh)|`VMQI-xJyp;<|>iz6cSk`Nogo?o_Nm?nqPt=e6 zjDvwYmVCCTN1IFg`DjhL=8q+j<ON-@jO%`$n$sE|n9Mk5mKJ_WEtz?U`cJ(8M(y6} zvp_CvX<g|1s?Xg~(yw9x5@>^zfMWdItYa)fGR}o=(RrYA)cJ!GG3NqHpdZHq(>o+G zD22iXL0G>kK5UN4#_)6&?jVV+AWs4TU}Dt3ABjij+s7XaO5c{to;ZG@K%Nmx;UUe4 zf<eDlAg9N8g}n-#S(PN{C#PE;8N<2ysrJ)^2;bTeOFDs$DWE*qXO{;M4!5?}@<PRe zc@1t*s)lEr1vnJe`5}X%4y;sE=5B`@n9PYGP#<;qM$8>Zv$~cO)pH)MOtqyn5y}@6 z1L$>tK|}R0>P3MQ9|P`|Uff$N$RwvFoPEfqX7sZ!UzzVPtukm6Hru51L_|R#1oh2Q zmFEOT_%gT$8B7G|vI8waQ#h_33N9m~2we}`ITHVXQ<?D2){`|$NmUROaZftg>#4uv zO<uqmG1|e$lZqf3wYnn_|FNLDz-N*Ogg41N>YsaJY!yfW7dSS<x#8Pb!%7QrCwSeZ zQjf@F!c&IPmNz|3h*gUi7vSze>>v9)1u^J(KmbQ-x$Up#^1JKcolGqSM%L)A4-~0& zOUal_sMD3OK>*BLmNMKsgYoQGzUw@c3%`6xH_e?l)UxmBiEohOb;3^W!C#g;<2&4& z54_5ZeYaSFU`-QBZrPE~=4_b}NKd$s)QLWnq=N=Ed{4?_B|c{d@Vmo8Da=wB8(o_* zR6_0Od}`WbvP9q5d8TNBZ;)^G9!fsyse#fVnHj>5+%C__GVv6wfu$BB$asxYu6dAc zrlYCV_$&;=AKi61kP3q-r`tS^<f@>{&P4s0rh<bnYp2_prjy;c5BmA8Azsfq>-@lV zY;<+D^$rGx7q{B9x*ZYbcQL9+6O7G4LZpw%1>N?Pjz0m533ryfGzxtIQy!xh*~T2{ z-%&&PZdU3TbGNp2Ok=^zngH>MM(7EODugR~x`rTe1M&=8Pn~~vI0Q0NgMo|j9}c0C z($LIXGMk-ts)e<D!qP{y*}6p6(QinR#0%GL$iKy@Wu6Ile(9)vmTqoA7Ql_g+@Aj* z5$|%C_wuD&+c~qQ1=m%2Au@Bw6Se}U6Y4SgC1qedQDm#%h}dv3Q=!<e8_Y}{21KkR zKgQFTd;}ab?cW+f74Tl-i#Go(zKO_ULwOejWP=Xtxlsn$(~=Sz@3jd(H>jC0tkk-p zSV(4QUxYH>3a#d4L0w?TornzAuBHi_GWC4sl+1`7Qt9TRTE15=ZoFSnCsH^>OVd$2 zka%kln!sXKrSXgcHO9uqA;v>WWTNwbI)4ub5RaZmo}Mf#SbdW}+nPF!+E$=W=pjxQ z-JU$k^Dlp9jkB#~GN}2?LCk2UyT=WaFcRF$hPK``zPR;c@xBPACr=@w&=-pza%#A5 z2ZSCG3AF-)C9B4TtV?^V?(-491-yC~)FUdtzvyKuCV!Jo9m6GBlFc9*CP}_waXp@T zqjD2K{eDU~9%|dpxSqgO;Ej~Wj&VTYik<nY+%xEN?{b#RyF7uocVQf2hW*qpMN<54 z6BqoCr+D+>Qh2AArGfQ&8=9yGWbXP{0S;^f;o5m?>IE?o?X(#t@UtTi<dc+i8>>*D zBk}4B0lyA@aljP!<evL_Pz{~Cn9E?seVe)!1kUxnHHZ`=g5`&dM)2L^K3fl-(!ubq z0$5gN^wIJe&<3ansn;~eQ!wPBShZ30kj8sVV@p~ys+|%D#=d~C#ZJOiLIx8A)Z7Wv zB2ybuF<GdY!kz&wvvd30JIYQ-3AVUWy}@dvKUyEv3B&EI)R*LG3^<@D%s~c?UA4lO z*z(^05{C_q#!o>=$BxllBy6VB!d<v}Er}V}hilXFf``rEUh9^)1F&ZF5cpblvV9yR zevIs-n^{|Ia1`{E!6XnV*J=x3MPBCk!RZo?zb^zjNrElSwbW8+gzE4VA<dJ*L^NYs zAx(d|yNzPW9$)gw+qADY7iIiizV2|ZI=o)2L!YMXoTvKfx6nUo44pn0g7id+K_94s z<%*5cj>z#fCUy3%gmPSvgbqwvD}MPv@QE#N#4VAUCK+@NEXLzs^i8d6KL&cNs`S_e zkC#d-C;y22LM_<_c&&kKcs@YONp@%+fcryIGUAP18<P6gW{{L{I8|5k-AjG|4pQtF zMj!&*Pdb#d7{FF{U&3~N6Gw>&g>~c#=vKeYu+CP`Nb6B*Zf<lKI7hEjAk9qM|NrTU zsQ#*cD+ZyEC?HG=C-<~#J_RdrT$vo8_->znYxX;PO8z100|C=@3BUz;0M@>OW*q$O z!mJu=TVpj1Uz2?{36o0g4s}JD$yw%)zaxZ<x2O;Zxx8WKOE9JRH5d}W=PPe!`6FCF z>Toe%ktUar!>QmA?MR|Z3f6l;dhNL}OLZ&2tzw!SaZR)TZ5Y_tX&DX@^ZyD5Mstuu zGaGT0Sd}9ediUoQ9b1ERk@DP+he!WM&10Lb({`2*UOR9Dne)(ez5`_*qy(itsL7Ia zqS9@4x~HcM0#g80>1HqK^e~Ed2bHj-B++*xWBtx)V^u0Y6;^99c&nHZhyA%6aMc^` zQmg@4-o=nutAsWu-P?$^Kp4pNoXcx^b$q_Wj^@gaJla;M(CjEtS`*}aFd%2tVyP&^ zONcC<XwA}?B39o5<}Y-MAjJCn1CY0;PI{p3-HVt9CKtEcB9cjoNA1miVE{ziSc2ZJ zJ!a_msq~mRABHB_?h7PJ5YUSiFB9#=FITQ&P3i4r0F3nc-2~l;uhX7CC8gn*Sk}<! zTux597QB(ZjpThirkB)_^3HCe9_#804|M+lZZW!*I^z@=2q2M+g*LuTaL@N04BUh! zJ}u0tsQLfl;JE*dccP4nZV!c!Pz<HDba4Q;Md&r2{%VTg`DSZHgEs9_y7bVp;tfh= z8Sdl-S|U#KmfRAxZHEtpXQ<bIM#8;TqZ_QtzrwyMffPWGk98{Y9X+f+*Ul{gzs<)A zlBIeV$R<m1j3<F`FkAa&Dh?QH-f>l;_&c*(1`8Kx!t+`Q`e{9TVx~hV>3U@|aqWuP zMV!URM{`yM;4m-SuI_})BTMd`p&v#9D$#Mos6L&25@Bm3#tWMHm+jzHW;NgDfBsO2 zM%;_T*adQA@lfn?^*WP=tsLe4nZ`eM;Q!wPa6GYjMbs0F+J^^yn7X6H`oKQXzx_|Q z`Ek<02E_&KG&3xYvv>O6UpO8TVU1oej?_o1keYcpizXAi<N{%Ld~r-Zctp53E`gQd zuNgzNhy`ZAric>yh*;10{>EEY&+Oe`diM8AsB%^+M5A;W<m*sfIl362;*3`6CUK`w z#{k1a=zNCRM5>G&gR0l#utsG^(6i|>t6$(E+1u>4dz7LS%bi33kK^!r-~4DkrxYe1 z_*iDkhI5MNU5ly7+%%qSe36U<et+!4$sB}ritej8ltJTkdZ{u+5?DX<22l^>X{RZC z+{Ej+<WP4lTl^q6x9<1*809V=fw_&M-te&q>_Uw<f5rEMKqH7cf=W2|7^*#45Ak5} zois!T$=4&%RWEL>NEJ-}HsFpU`1xO$YYOBbSXz|gP8We(g6&`OV2vLPTw$rWuEQ*& z3EDt;w0~saTnqi|rmvJ77ly8`iCV1?*YT?!9#U%5XgO-{&U{IUL%EaO=0RLFmcU;L zbFiO4_QR160vo4qsT)%@WWmsh2Tm0Q1~FYjilkXph7LAxfSkh9sLhU&cIDjxplQ81 zY6&eAoy51m+n*N-AnHIg8zqi_7(L4-JLd+NmnS0S6gJpBwY)UBu#|gJxZ8hc|GO~| zj|;Y=iIgFsb4T~0C}r2JefMF&x^>?FsYN}7djG2PjGS@c3JHDFiCjJYwobuoa4Coc zKP2*JP1EU43!ERDH+{t`sLi#pi%?J60A6pXKzON@$9C%`aXa+U4i%w=I1TS@a&UrX zU}>--NtvyTNKuRIL|v5qV85nxJn%K|E63>y;%pD%UrdZDjV18ZwlQ4yXr$<(z~PZn z>*~gbW=d2H^A|~DEZvfrrIO>-6S{`b$bjB#NEKKu<T;l~9Jy3M_he7;Y+~k&TNJdX ziS~XU6n>0JM-Q!<?s%HPqur1c=QTB#YsRJ?{(DZ3plXz*(<ei42C#6S84a~QD{`IA z4xt*Flvs9la}A2%99G<m`lLQ{aN<v=iDx@Li&hx)oA!;ya+vb&=5+QHxe=s}$s&S2 z3^gyXfX@I}8!|*hXiVh-+_<LFqv$aS7JcRniqpp<30LC0(YfNMgjkVqAaTW@+B@60 z!=YKvLx9Lhx9N<S*=q8wo~9_7RijU;+G;VOko&jMX#B*i?X!E;1=Kt7?L?|*Y7aA_ zq1_TRFVrE{TL2MYWJ)oE8kaydR;FW~ml?nukg{02<Ii@}PYTOqs?Sy<M9a_%TuVtP zgHn)JcBCbr=D=o&+3{E=f9`i09A4~6Gx%SU3by>Ea{hkfGcf@zUuX=A&Zq1yY2To7 zJ*ihn6w+<2)zac<Ee<H>B}|7<-578TR^uX~1XzT*0Arrm<aHODn-KcUE#DNfuFGz! zRX(ZiZ5@vIt=CC;LPHC?sq)URfQR!$gaN3@J<o&>Q0;}$+w~xc^JDNk2T<D1uSUj1 zPLQf(8UARPB>QZz)jE04P_S>0MSVpgKW5$#R~<|M&uYrIYFl4dKr)!UOr&>Kf09bA z{OvXD!sTm!Fi*nM8bP3<8EDRb$x|dFJWE>8v77>Nddxb+FGN0VTg?$?q+l#n!UDAg zoJp%2OXzikVCRfd;42PHnz;=%CyzId7s;47A*BJEFK<F5L7c^b1`fapO$%%GZsK@& zOXZ)c=WNPqEym%v-8Yu21{!zwBtFZ}1n+!Fk(KiECW+svzc3xE2USch57;&~`O&%j z?}eNM-*V1YBtxSt$YhwK;QT{+kNd`2NEiV1?_3so+@BZL_Y*OSWg8b7L{R+Nxb=vj zr~yvuy3)0<f*Gy!dY|fpHT?>iKGa&#=-XxPe!?VwvBW#$6B36&LQQEJB^Og3zM{Cv zZU`bNio$dyIG!d)Rgi+p{z6wsE)GSgq{hlY9~~?l?oe;f1$Q&2aCnPJqrw#z2zGVP z$-#yWC_*uFZby-Th|wT=ePa!V5yv-bJNo&-0y<ubJJ0t|@BXQFT0~~U-hs~5zo@uj zUblG7oM^197MS@IUU%@v<<u<Cm4B0!tMrS*R>5=i&D2{chW?T0b`v+X^_jB=wPB=` z;9)|whaW)9$2!S5n8n(z{$S+m=`dFoK^Il;LVc)%mnKG3CHncRou85>rFH<{R}+4k zm>v6@OJ^W#n|lC4L(x561pU{9601p-QgP*?@u~?J*4QB8X^hTgg~@G*IcrxJv<-~N z-+8wMC6QmcXx?%{-Nw-^*xF&Keka8pX3Xh2r6jyh5N|zd-WQnG{8&)e*)g}|*;@Z4 z_>fV9LAy-C05<%B#DrI~!qGz;u{c-X|H+C8f*&6_$-rA6t!(gOFQe^8Bq`lx`KAIS z+v<;|`^KUFQnm`ukLF}->=2O~AA_e@a?;7s+E%>~=N*C<d}_JWh(CElpH%w0p=$LT z7C`#hs`Ll538yG7{0TzJ#;z%!6!5^v*tCx!J5W>v#yIKaDL?PDsRhY@2{~&jW&p@l zBC<#V%AcygVgo6^P6LEO=tNm24NujnNwU|#g4@?w86?XzDw|Ll!lF$x8H}|4NRsI% z#0OsLpzcRhpKog}?27@i)mo%HSv?`KVN{zu`=lwx%eb9*h^^|Og|yl59{7^(b=f2} zxcH!%8BPn|$-b!<9bXM6)PkfSVoVqlIEFk`>eD{&vETP%pq6`XyoQbGk`2};eFdw6 zexBR(86$;W)<rc9p5ByeARD<X!6*Hq$~wV6AN7N6#7oLoa<{DN6DQw4VL>GY(FzX> z%z^gt&Yduja1|*$+U3)Zri9D$`PRFdhyuqNRzq`E2)Hi<WIa?}Z&?X8I|maw7xFHg z`j6syp3fwb9G;Bq)4b9sh1b=lsP|RVOz!F|a1erqC#}w%qO?I<Xa0bKR4;F_;n?+n zOvQ=3F#_2}Zbal#!)a$zAz`N~6W<}wW5mZ`j|^L_&g=|(?9r>SV*gyM0vLJGLh?~v z!I%j0lk}%^fbhM6yTx67BWPx@ZikUTuzXn(+znNsrK}Py7yfZIe|fZ|F#ZO%w>I|S z*Dj>Yb?;Il<f!Ak%OyG5I-?5fWKuRWWU#B|-l#5Onv=`8e?)MaD*#rVb%pWa&-?us z6l3?xGsdvwE2P==cP>3(zZb*Vxf^h}z3T^Mf=PA<Lu3RKYW5^r4Z)SfU|349N9lOL zguNPDs5te)zQj6N!ahcnCZ3M5a%UijrY|m7iIPF=-k7>%@@S+d^5v)t&1SZTWIt{b zJLQ;B{YI$NMs1*k;qaSX%!Hg9mApsKw!QBnVS&~G79`-{)yt+mzNMyGF006an0dOG zWME!Y3bCe2hd>}<aI2t6Z7Eg(U(MX8Bp2!4-Tn|k?AQZZ(l&y3C@JmEpS-wuf?)xc z2vty>v7&-t2Q;Cm6$`itj)t*lLQUwWljq~2-}fh%<M?0Jmbf}afySG|%MSZQo3KLR zH>|2tUc64>uAfwb_&MuXj1XUd+QjD>qLyW^pnh0~V=)$6oU`@m-jJGncg|T~zea<o zufQQt#aD_|W4SQ(yc<Y*aHA-R3acqvl2|>;wHlM0WO)Wk8}*wij__pyI_{86QBiDD zsP5A${J#A*JK7_e#5dz<1}K!gxC6*p7PtH%fQ+T%HLL`9;vn!li7_x)5T~*zsGx;= zP6mkmW|I2eeu7b7EFv@d@kPSlN#<DyMz`@b*!^#)EaWS#M~8(68FpN8{qs?TD3vt> zQ{2#IkhXr~n1x@!z#mDFD~H@$66ciq$qKk>GwVwEwbIX_9Si-4IMz${>#O{Ov2lFv zjLeOi`FmVO%74@tGPBq;pV}!uK!)3xt}Mz9`K>ykkCx3O1Lr4DSSep*A5TJ`*ux~_ z;bN&}J6xsql%<g`*~;EYIFTO?=H&!g#Y(15fB9mB4Lcj*)!d-6Ecu#+JC6(+3d7lq zp9bvxf+lg=s&&|U1vcRI<gAQf%y8BK53xNpbMfkwxOG4W0<}oEtbn`wzkCgeP`8JP zA!Gp`7Aj8Fi1nz>dj4-)@7fj%;cK&0WBpq`(CD*kt>Hv_jIQL<R&Uloj76Y?G#Hrc z5GKPS>F9y(%&bGq0PAZb?B;5wm_QGXXINy2=#?9>0>@0gc?2r)Bmy5^h&B%5`Ipl) z#kHr`aU+?HX;CodbG;E|o%ZONUXCPf+>sW7c9`z<Hxos`BpsKr{&c;(w*+GD9dZj3 zd@ba8Z%BHIm{(Gr`SKufo|xB8S1qNj7rf(lCHbP5>Z=T%MW5}pfa4zm=@(xz#i`8i zz{)h8UI>vOPHa)H^z$Qny~^fW(A!&xxhfaQgF`e?Fr8dG!W$X@Uh`*rW?-n%5IFfc zo^ZlD_iV(e72CnAt#Lb=^23&EC`LW}vI8r>lI0$7zW6LC5ycsT@I`*Zh~i{xPKvVT zn8b!xF{_oOSb7aiM_!g}XoyA8G4V*rSJ-eD2L254Y3us*En%G`B<cOX+RN?wkDWRf z#~BNn_i-^!p~K7jbo0$c&VvQq8drD;T?TA3&I0=gS%kZKd8vyw3q0Ps*D0x{LAWIU z7s|rTi~f%rrqQWORflDMH2DP;M2TxUoGtxSaaNU-X3he8_bgbpy>C71N3*cHPV3I? zmQd8UH=h$N=c|d@tP!m<igG1h`j6j@IaT&38-p~Kgfdo(>I_Mh7fRj>1e7(hk&4_+ zfuyPV-Is4>$sLxL)_PTQZF4dSI{+tZA#WPyUcgWlsJ1~17Lcx-xmt##4u}Q`g*A)2 z#CGleu^t0^kbeFf`6!n(f#<(&N?B`G#(&&#;u{`84F0Uke|*QJ9g;|7sK>n$h%w<a z8T1OWt`@C0B}F2>Dji>2Xk3nK5tIbh(|X*BQ?JTRIgs#{tMZS0<uYjf3Ycg}Q*Y*V z0^P@dE<1}z`N0(rPZII{ljGMhQmwW>)ZThU<3RUQuat^69GLa83A+!uRfksNC)6pd zr2`h9i;W^>E6ucGve=SGqvZq|Zov!nfpUL5Dguk${zT<-w<b^v4|q2V1>ybivN^M> zrBQNtwp{hOXd`2AN0O{#O;GAuIB4u#_i1rWtK-k(`ncv;y|p`#A49+I+iP?{>7z1o z>Lke#^y`nx&~nK<7S{uKx4WT6#XjYwIg+;<Fhu&id1&?x>kt%-aACr!1zy_y{-nj6 zv~qRZTJ+2d9iAo?W|r|UV#M3FY{t~XPG4FMw*|aeHJYW$gAZR@ZO(m_PUJ+79czkF zfmTiC7!W$sX)Q6qsEZGCtpf3JVAO`+z=^w3VrU9-nMfD{&>a7yei?!meUwO~9x<*! zCct>-?nRO*Zm0y@2?~9JQgj;m<8Q$yQ56b$q^ds5d85>3Z}N*K=-03NnL9g)LnxDy zdcR-5=cq=|*U;gskUZE3I@r=E-8zzaIL$S=!>F+?AiJWP(J$39tFa~RY~!6KG#5nS z^6SWFoagnF$9#`>aNBkhC)>YtB<F4Zj?vL_tSXb)N{?Q|P(bDj(#YGluW|zp6!V|2 zZi|+AmkFfPX!Py*{5i;?>L`p13b#NAdsjC|!@wk~Q-IPO1oc8BHRZNnb(12mL<8;h zM!+BeZ^W4^iwJb2jJGMH!x67uYQ)EKM{lJqHqX4;tl-@_m<FRNB~*r|r%pIz?RcVx zb;Q<l%^T&lZ0nt*C!M2oWF9Ve_veQ1V~PGSmyqGiE{R!B1ksrIOySPF-w~Maw7L=~ zeC>Hu9Qr&e9ZI~7aMnWsb*%tg$h_FI(@@>=MbAXD&|KGb2i<pZ6c`-Q0TctK(aQs+ z>YL7v4j98`{bco7jadDV!^I)UaGa(O=>RF$Yf;zu6)u!gLG_`4+c!iDeVP^rvV`k* z!lPM2BFHQqquYYKTj$<mE3)o)n)rK<6)yK<O6e6xeM-G7NC%5$^72t7>Xueup&7o5 zloYcubC@ud7Q1RRI29WI){^#ENMZq)TG(=jAD9z>U2&cja$y1pceR;6urtMq%~_aS zhJI(AZZF}0r*iX{2jyw0ni(b3p?5>#iRYetl<v>}8!Ry26Cox|hc#f}I<K#)xn{)q z%L@5VEPJjfUsut{k@8vxe8H)X8%Z&kMRlY}bsoS3I8ELdud||VrB;1~C|0PgDtX`s z$On_ErAN*PEWQvkmSF7DvH(fyYxg9!b}8N?Z}hU=kLOJ3<ckGUK`3IAE*R;##hwCb z9fxz95eY|AL_)vdFn5RLU4(1iO~JpYLxzr;MeMD#4hwE}DjvnwuPLIUB5L+xQo)`) zQH!b}#cYewIq=ic0s4cyr8}%v(27#p#<rzY`h^~r;HFZeM8EgB5r&7jza&C@TKji> zkAZjo^!Fgot@)AOAen)uA6;lkr_lBbLC+l(U><f+`VFNaLg5<H7xeTeNL(vY7ar>@ zr=fLpQlxb-$Ua1GG8clFB(^DgLZqW%;Sb;Qne-4W2V>28;Wy#4tmWB~crH;nt~14- z?V#sc3YVdrweM$A(#9!}KSm*`g!yrIb%We(L!)}i3~pAhJIlrdZyX;aA&fgWMkZ-r zKmy*!WusKt20C2C(aTRhCA}ho7V2^cIu|nGt_(1jV3m3F_P0x%vt}8%z96*n#f3$4 zt*onmT8v=n4+^CFLVKv%BNR7gG>U`c*ki-&r6+dOwBL^MavIxzDGW>pJiNaDm>3b} zj!<HPv7vrQn#(QcaG-Y%FD{cdW!`JC21WtYM5oMOK!OkA;((q}d+*A6oe@jgh$5Lu z8sRwq;1%!f_K;$1%)?WnVlSHL1<F4)67^h{|7ksxb61fmY82QMt1f<cC}=xvY?8aL z|2A_(S;BU6FPS9=dz?ujeLR*?c*V{Gz073i#5Wq4vMwgvv~2TK?hoYrcYK~5tV<D2 zhV=Q3BdzOAA8f(V$S8FnCZ<AFb@nV^>-e@r0Wj63W*4-qZ+^$sZDtRH;26=ht1i`6 zs^rXa)aoCI-!)e$CEy#wLpyR0Z{tFzUcCvw&n4VwfYNo2*F}a>LCQXd^TcyZdXXv% zsv*v8?mp;8CE8SrP$>z$<F?yTE29kgx3U+y=#p18Om?e`3<C&F{j9P^F1{(W6vuUL zV5zBS`5a9x<vW|f$xE^WXZJO}f{emh^unkr%T-X)anbZAVdNz*D3mUgaFdw9Thmh~ zrS3PHMltbmkoV=0`FBnz?x7EPVX5<Ol!GqHjW7rqwLpYPiMPFiy1!$nq#O{{wRSs_ zHNNboY+}mzGXY)7#a$CP5cX@qIPBi`)3K(nYk%o;^;uRVR0kxp-H>p?zpon1rbS~i zEBpjU1@(raq>9|Mf1b;o(#)3(Ik?}LRLZq4!d^O4GBI}1OR|`gt1nL2tkfW2yA9&e zg%A4(vgQ*eX#u+hJGZp;H4)LXk=2QOr2OWAV>(BghGCO*P4V;Tk~C7)|8OKfXHh6G z5K#@F9z^EHuEO#lmBOnblm4@a9{jAEn&t^;u)_`_xL}2O&}*Nk7>~6||6A$)<QRHv zP~sgFIU;{Lh2;_*?AR6uw0Os&BZ#5Aid0zCLuv0|0MPIr8_Zqo#g8FtzTJ>(K=LFo z9T1|8@;2vls7`A?uqOa8+bgGCA6L5uI@T!w$7Z*=xa-dckytpWd$y?Ee=t9*`q$P# zE2s(vEoMpV8F@;{(d2w;dJ&(B@bHud!nS|?^7CM~M(THgJ)JjXS!wEG?J)rC@EGvi zO9BMQFMulM6wom*oqxV4dRgUIqeD>~Y5eDzU7|tO$CUE}jh9GQxT_&Dj#G@C<`ypB zKGAn#%S`mvUs`j{aK^HB^BLJf@n<K@_z@+@q4lw26YF$f)%iS4NCMCp&NBG3YsS-} z4i0n}yNGy`E5R<=7;f02Xr)_4JNzx=%iFamn4E}XIqLGnXpR5HshpfZkmVaOyvu5h ztDHctaZ|@wp#M30f*8yp$lT*YdwY;c-Ld8F-a@&Pj<D9LEwV8hy-S)Ji|wZRd!{75 zJC_JX_ck%W;QVxJqK3nndvwC?dY{U;)-aw2s*1sVral<hnOHaQIFGInKIkA9x00XK z6k#iwZ)PJ$bCvs;6<Xd0BK8hByHJQCW6$;Q#CAg~QQ~cMGr1h)f*{>8nf4{HP|zg@ zL%Z|53eTNKju+Yp_Da@+%QKk<prE-Y^JJwyXMFdtmGb-~bg>$qjB{C#ivHJ2;4!C@ z|5DBqBvzJY-Iz{VBYCE49bz-+)~D9|*1I7>2Uk<pSFkFr(+9akIi_L%-83){=P;V) zPPw~Z)llE9B-;|}_q!BCg;7=$qimM>4^!##Z2g@e<@C;^7HbT+=^u?~-%AW*@Z7`P zJAT)vANb`!v_gng8l-2@TbA9K1&}}60PQAGWCQ+}h#<fu9znKKr?6UP%k>bRDYx$b z0-xZVg74cpEplGlX6@hJPv-^fwl@F#jR|Bb^&*N%E=ff9=Vl-G1NUxKhXcA1kVr1^ z)F*4qv1MR4G#VRDH=SRt{({({Ykv)uaj|>iKE#4W-+HoatjBC9(A)$l-9!P30<{_^ zu?#HIB}#*xqm!ial><{HMFjYCov!`-JF}r<HYaj6V~ejKun%i)V1=`mvIqq}^-d90 zd20p~gEQN0w*7yeUHuOA65_7QK2*>erBT#}Q#~e85!P-so6*JCV?|_RP%zs1fLUzw zp7kP&CN37x0#Z$>yEFel^=6Ytng_xz<_ZHs&Sf)qm|$>zp)C$qBKM8~1prS2{AM0@ zT<%GUvz)8%e%1@|XUqRYlyP2x=w;_Enu{=E7+Rh<LI6`YvA)1)axmF%TLEb$Y{7hB zXKi~cli2~1EDZdGS<yd(^i6}v-IKE|b<<*Bs5K|=H6?A;V4kmD8>PCBpP|WeRPaZ% zRYtIk;&&*kjcVsQx6Ux3H9J@MRCRRxw^?pam?yR!ls_m}`iYEx)i7Z>Hs8rBUe{{% zh<|x;pV7oS#z(>yvb36BhJMg2A0XcY2b5!NMgLS0cL$Z29QN22%@x`il&a;<VKbwx zT(pBKmN52+4P4*p7-sqP8l10ColO@ZMMR1N9xF+uEsY__g@#w}45Tq5s(P5S8v~?B z13+w>^DS!x6oR?z?fC5dsH~mFih`+%Y_Xln<*mUJsyi(#V`Ie&VknsaJi#Qpk+(Q< z3JCm0!Mz@VX7`T}hsx;d)NQgoUjdUYd03+=^EEQOUvf(ms=oqTs@_s`)|D!kzhZIH zDVoGwCi%KBNZ)9{8#)i-SFOqEXbL1bFuYkqdoUCzT{6PGJwZx(%q@tiOAK)5Bk+tm z;zbu$4PF&wk+2C=nTeB$%>;Y2BRi*mf$TTbo))_-c`R(||2O@$QZ)@evsthA{$rmA zveq)4xSY=!<pvIvxiwu8x-{t}H=lNIBET0Rvu)kYnNPxCCr~)=UxBX&3?W6x8z#)1 zny{Jh{@Naic8kvwzTpg~TyBi)C)qt?s-v6c0i8q}hPyf9Gt(il`yYO4h7?gQs>zFg zt-=U;FfE=j(PJq}#^~uTu`#`m)ajTIfI9D1KIZV<h}tj$d2{$etH$BhooLg!6pCm* zY|}R+4+z2gP^si)05wndVGJ2o_boWIY08~XfJ;Ns8>Qr8YzST*_~Ux*11(Myp-g_V za@XzNbCQ?%MOy}^uOiLSX~sqC(~7Sp0VIyhav&O1WKv<+qUJYxtw5k@X!^WX=extu zn-R<j<@a5wp5MQ<ajgKSTK4&|xFPT5BX^v+lrckR)D8?5w>SqM{cp^}wfyP$e&JW6 zKSfuW_X=}t;}^YsG36Jc>ORSEcRHLK<F{}#<}5rE7d`i7EhSAk2H9`>bt*l;Huo_R zwJ~4K=esltMNxtO^p0YH%z0yJ?WD%{rIio*7yh5OQ@_xT5;cCJH>+6yd|R~q;m_^d zM|%yX>ae@j3W5&_=w9OafKfR31QVmZ(w`dv{sW^6pngF4QG-$*AfWvJFLoG^2a-yE z=Dw#W0n5y$r!Ex7wNiRV*o_{7*NaBZf}JnWwWwBko+C5UTMt1dKxf&5C!9*Eg=-U& zAjP*!v?hs8Aupl@g^=bfHYI_WY9TQ+Ridel+5&`v6g?kyOA8m(>k6`?ytwaNj5iJ; z-$w*Bl1=ql1B}9o@Zm7h3OpSuot#L@Ucw;QM%5U4SBJf%0aU5pgl>;{S%{Hv4%lwK zp(Qv6i=Z#WM+^|PZMo2Fl*swOwKnjBCfY%@Kbi!rB){S~IERNOFhdRmYwmh{lO|$P z6IY0Rjdj<6*g(^*?qekLDCJCFj(IZVPcggi%?3~6)@lTk@N$gdR^F<yo>ug!xAsZd zMnl??3+PUo-_Cu+s5yf(-@SSYQ^p(ZJ&O$aZZc%b=T>22m#M-}TJ+0jbF4hoY!hD< zqk`OG_>A;=<h2^CPWPBUZ71HA;R1k;1>SbjH37nVCJ)hWbSl_Hba41#8SK>fHXlba zdwU@sJ3Q8yKqWINcljn>**?!OCknBFK@l^~KZCGZ7o&mIOnt$C1S`AQp;a0Tqj^TF z#=LpVD;A>89c<;RFn2N#P3|=o9^*W4yO}X0Whkn0l@_{uDBWvOuMJXK&y~?1#mV?I zltqXmAMQ{f#P(i&;LK*KgxDeSsddgUxrx9T8KY#@o<Oac(aXiC;D{S6_c2gJ)5N() zj1;u@GpHeL&H3QZh={$Q>Y?1Ty~*@A8l^741n~NPWwV`=_nrt*O#$Ty_y0OqW6FNf zcK>x11y286sV_?Z*g<@G^OyFEk51<y5lg<H#Kh5Y(sh>(#5F|{ifRtndalFWmOXn| z>iI_IZsq4f_26g_76KQrWokcSE6ODp(~Os;#+@3!XM4^@y{z#B%DS>(Mj#cjm84#c z^|pbK@!UPpaK?dyW6S7qpFVgVZ#Q}DJh`wtcoOZBhCed4AZl<z@eR@51d;nPLm=Oo z#;)!x>uuH3(PF$27s-fjU-9&5yED|25(bqFJP6eODC2i{l5(CRCG2>wTr{K_pduTO z@@NBL6TEgHH?hEusqOIDqJo9ms4S0|)SDnKnZlc%k;D@duu8J9uD7zK1<}5e1R|PC zpfncCv}S{{20DO9Dd#zJfd@y0etpr+-GaI&JgdhM;9$T)6Td=oEa;%KuVKyKM7om~ zl+mkBMX@@jhlM@1DcvC_h~NwbdYyX!fJJcmI<U+BvXB+VxpF-kTb--iO9d7~K`;+w z>`|WCzPqYGwD&Ku6sQND^sx|n&wB+0FYasvFEhO6b6$~ZlVBDmZp*n{xJ82dt465O zCt{(I*~FV3wr?MQE8A;Z08EOap5br(Kmp0Qx|vdi$@2}X4UYMO9H2_tH%k;PT00oG zG9S?N0~?s$APEqZvYYxwp2l9lUXIw(7C%keXfyeA<EWe6*!@I=RK0q&aB~eDhOrg` zOe!x^Qi%DK;G<@*F~|Ki2tWgJtwoogK&tL?I)3z4`i7EICMG-{77O0{X5W!WY3WII zNhkBkTxUXqzZ>Qzm@MUr-AW};nuCTq1p4hybRc5HvbYJ1E_M5vjYEh*lvO=+Wp~aA zHdOm8OjMtsWs+vJBeYluxg!B54i3v-{_fvl1Qqk?{AhZ51HuZ}7%)-idr2mpB&;y~ z(>^RdXvrf>=u<GNqf<?!6k4vKZ*`@nM=GY??N;4{tWs+w{;LTd4>137_h5X<IA`OH zFS=Dn=*XikNV&k2^C!rJ>A~MfBmwCYa;A!d&au&tJ)0&yXr5psIaSH%tZe%}9X)>5 zfvev~{;(!aQrmSI%j{K<nch<-1x-J*FK5`kHa}cXmCXKfS$=<8-$)HZyiV<psr}Xv zNIEAp)!l)HaW2*|S#xZN29?FjGWgeG8;w3+GqJ>@0LOk&&!!_*f@49r1WB*Fryc!Y zSrA^#I;edr{&fsm9vFJr+VBI2#E+TYtH*V-yYGu`)yV#up;zkz?F3l8u@}(~$XJ6Y z*QEgFsP|eoJItjMDd896V>Fh53BnUoUyZy?uwT?N5l-?ZrLmJnisZ^a=v)ZL`Jk#m z2l+Z`sovX$!`d5AQ(^<P33JUk8jw7biS|V4B0|&o#7}zZalq8hw3YT(mt7#(g#Eh< z@1u&KBC{&{v1=GVG{iCyNr!UVWWpd9p%80q7CDiUIQ66oJ$u4kI+gV^BFQL7KmwbD z9Sv8Z`Y`eW8RPzL2?WS~Ium2}HD%4Tbs%V(OfB*R&5Z;Aduq<$!MA+O>b`9|fR$$A z41UqK_H#_rSPA?2K2RDqlK{th9`dYaQFuaQoKUO!G*wBCaXYYR^TwYAK=4;@V%ita z@xhad++EPap>&|6a&?nOP$)Du2{_>vW7$uo)2d=6v}RIBv4$oM`iZx{^2Zk1LVJ1O zhkq%ya!?`m6z*O>UC0RWwztn;D;LtZ8w27U8aSR&blfH@FWEJsNO_$bE@}}~WBo)G zfY%k(!dHV<$^8D2ppOCj5^y|P7Lh}q&15Vy*lOBwL-JNB43ai00@BS~04=?=KyH@Q zNZdwK2CLxwpxhb;Ean!jwMI!dr`0J%Z>-#O*_6A<>1d?8-cmtY^(RoFet^3Kl3UVw zG4oo|%AVT}%}-{eXLyWQF~}<<DnW@<Tu?3Rc^xr3R_`!#)OCGiw=_))OL2NY=X{`v z(G;?;_GK2)yDfU)oNc)RKiO?Pr+;tOt(Ajru9d?P)VzeBI_1_zgB**zA+!Y;qJ|7R zlum^NJ+|Oy2w<aIOwEyOzZDMvUnZcxRjuTCR=I%Ju?2ff5umGXlHmYl#Yo=BaQkTp z!ANs~T{)!bd0X{m9J*3MDYX?ls<0)L=eI0-$2-<RY-&L!BL2ME=NKv+Y87#ZOY{Bi zT;;V^FO7A}WmX7%pDqbKqpOt4hhu?GM(x-L7bHxuDJ*^9Z=G>^Q-?T_i1(#NiIeXl z9U?cp2Vg<`3=9BOlifP)kjQ@80enKY9FlelJ!5XSQAf$b@8=Od<nyX&5PHKz#wPT1 zhLNgv36{-k1~b6R<(yIQUGk1jRyfK5s$+$C0@S^uQ0dYRs|pf{HKdXIBT@MaeAt=b z(=?$kEMa=rKzwQ7u8@DEd(1vv#}_k{OjnJ{V*hA^Gl!!cA#YU2b-%%-u4a!jEX~4c zV!i^CZsF{{v_|MQX>}f@cHtbn)ra{fL#!CGBb3K_QU3~k?V$x>Zt)Gsd}E{Sd?1e1 zG#3&@9U#!7Wdv$t6}7l_2)0sLWfCGq{2-M`tJ~njO)<AHXU6d#nR{{l>uL(t<M2qp z^lIJe-=`}|i9Nhub_11k$ct!K`$t$Od>Vn_YWQ!IN7rSRFuM?w!O~)Gk7*j&-FVd7 za8I`DMswygaJ?U}r>U<UN3EB(tJ&&JcPDDq06{>$zx7is&<y(6{c%l52QyYIUYmJB z_yBD11uw5cB_o`4G2Q9?;ycDl>VgdNv}=!+fyr#@wG!V8FpG}#8Cq)NKNVE*^OEB~ zq;X)g9XoXmqHnNKNCX~_ug3g}!#81%ER4GDbK`0~5&>YyDy=&(vOuXJzOB9v!Pe=! zQdxt<5%ZR^=jN`Z5(+zQ-=_i-f=ry5>2CXhmBO{Y%{#QcyTT*Xs-7<nd#_t(abVl7 zfP-12H7H_?B9^G2A8TDk0%Vn}K$lY#&qqZB9F-DOT}I;);_uG`u*rG8;NV}<U3aW+ zI9;)f4^jABPfcE=WGkqqS5VUo#i`oRJIylVdYcQKHd4N?7kPTLwas<juD3ZL%%k<A zb-d0y&r?YfjM-2|<{Y<0@*<TO-m`F7zP=xDdCk8A{n>s7H%ezVzt)HoSz!g)TIQwF zGEy_>xS|6S6&~eZV2<9F6=QM33UH-YZn2L$W8y)Mq4`-te^^AlO?xi14G|;CgpgVg z|KsLh&L$oXwFrTn(zrm1uE#K{;LQmuHk`PVGK-NNwl#gZSS)v_>Ef=IVquNN3nJ?` zvgk3TL^=v>TnNZ!RaWw@C0czVe>+D!^t-5to6VC#fWAfvX6&{;N`0ggNc9@0#@<p1 z*9h|>{W*`mw2NID9?cIs!8$~{k;g?}{{V@f<>@i^Fqoa1_dE+5d3z+{1caHoGaj|W zP*OaTRvmH!lneA`C%_WdBpEI{IF&&sSxu7UZ)8i)e1w0eSVDAoQB~`rcoy(acfa?u zk-a7%$gbT3Ttf43>UY+N+2Ay`<2yl+gP@8LSJN9r13~)amjZ5uT#WC1e?94w^`?-` zv4N_XU?=ccgILf38UnRwt8_dFjgeg_NkAaVTz))^b6M$1MIQX0)c{^l5YG7Pymzr@ z(H%vFFPJiy{gYG3Z~0qpsD=4&%ROmULFPQe$n5vzP^=e_j<c$=KbVE|@~r%uQ^TN? z9xUpvAe|4LfvEQ?U+CP`u-Y}Vp7yFg=)46(9K7QRP!WHa-cv$o9~6l+lRCMQG<!G3 z>W#x=#=W`#d7#n*p$4A|U&HZN56OLM7l2(M0YvP(KFw>1o_%IdXCS`J7{B*}?3m_; zk<x5mwp3h;dyoE#?jUC~QDMQP(2GCUW};Zz&n%lILu{%yTmD5chH`=SO-7YX2xxpM z0YfBUVPZ+ccTtaxfZO@LI!Bd_@MZm!yJ`fD&|<3=-OC-ox_FDuF}<<5gLuEdTd%M7 zDPKEv;WO<=Wm=W|J^P&?gL=@|lWW@y7h|VAlN?hbV<W+K*0{NBlMIcAj33~$BZ!|N z8&bm9LoH<YOLNJI$r1GzdfI@f9?pp$f8be&+byfW0wnQAU$&2WT4<)V4~P?WvFs5v z#b-#_atzKT^Rx@i5N;(oErnZ{+;W6Bs#C)Z(}z`t(~sQJoe@hUl8;3`o>ul;Vjmc^ zp@n70kt5vTC|X+$p}(O!lk2GA)mg$vhnq(bLGdI_uXZkD*gb)dyu~pV2~2BR9Jv@j zuObS^r{2Mb<ZKpvKHazm2F_JO7CqBf?-ZjEsJ7F6>18QynQ}cgMqCB2Q1JDH>G~{+ z%};|hVqlyMe%==99AQ_NPV%__Uh@CDqtDLW@Eyq{y;g@^@Up(yjD@6h&%;!bRulAB z@@(b^vymlsK0!r)Kj1{!dcq}ARg>oJrlN7O(K}hE@gh@W!NkeRhTe5Q_0za)0o|cZ z22o^+l=y#u<?U21ltf)$KXVO-HW2b+-xzHI-;cj-ddKiATsCUS6*8Q^10UuLDQC*A z?=V=Up&eoC)H-Rh_A_5p?S2964mM?5GLvX*Yu2CHEm0tMQy7`xV*_`A`yh9a8#KgW zB$YTYFnk0*1&lb*i>T5=L?xFg%p2#3cm641J}Fh*(Wp9`9@<YYxjDD`lOoL>eW{*Q z`$_+eR{JP}6auLHyt-hPBTEZ*sK`$x#ssjas9@O6iC^&YdS_Q4%RM*7@BJPb)4H=_ zFsycsU;xl?8rduE>ebedc`f;?!cUhRPN8+&H&mmFfO?WhaEg!9n4#mO=xPWK3A?(v zcx)s?3r@j(DH_<>^zp;i>1!XsyuQNj+<H>?zqww~iu5BR+n41;{E5&or3?d34J;w3 z0ty=tz=pd<;m}dYk#6ytLvN>CZUo!46qCL4mj|n{aixAM4Bm}a%|h0gZV)`wbw)f< zkP%$uA^p5a(0JRBnRkracH2f!@Q9=n{Cmb<M#$R|Z7K$Z94WEei(WZl0`mdWR!So> zpTOvqb=$g3xx9c6xG#@adGuM7lQ2l*I`6*jsPk}R`Y{@c!F9mLSOlkvB8{A5RMB+R z5ONZKc4D^;97afz{1^n`zY3Xgx~_UkE9{nk{f;=WJraQq2eJ8%vg-wZjg}hNE$6;; zj>MC{%3oc2Hmt|oL}*O8fTdCCJz@lxE$qXT`(kC9D-OAx?vOEstPkbUYBlu^{{D(> zCaCS`KeQO9sBF%_7uyjiG7LVjs|AIa+bL^>YlD_jzN(^Bj6GVGtUG~Vi{M_3JP1SB zS#*pI>5SwfSOC_H0v*NfZsyJ|fLj#igANsB%xwJJK1bl5Y9rZg9i}UmrkP%G<--Tg zirM{2)Gf<i-Wx6drs)~z@Z!?PazbXEu;V;Vg?4q#!aURp<ZwH-;>|pN*7V#~bW<Or zfe9J9OpGI>-<s|rm_3|uiJRe}ybETt?2S%}Q#$0)g6KUB8BeuH&W<4spS8q#EAqg& zItK6NiZ%j!tqKu4aq=%*<#<`|GoA~z<BfC@Y?YTa&I_#vb8CKXgPxtTXONaI-EhLU zeWY6%NGQ#d3V7IndM9WM9oV{Z$6MMPj)~J}>=Mq=_q&X!&-UHIHBYYbrLI1ZLO94V zh;%FXXNv;i3?>X*NEke~J3fG9E=gBjnuQ6fLIn}X1B073TEiuL(;XyY-pzQMdB;cO z->J(jZNUgjYs&yeqz^-6!+$v}&MS(0IATcH^&)rIOa;e%3;r;r8zNB<Jp$%Zc6d^L zqXW_FfOjjO!s|fY>+f1thEiN8LMX=1=)^q9{;x;{3b-d$SYckSeoKnSA56#j%XTQ8 z)QARQ`Uq^AtIv$F<$#ID-(KHYhC6q+6Pt05EhAmf+DtjNMJuE3SCjj<+4kYlXiEv0 zc_~G^>QR~U)g*HpCX)5S+M}r%EZ>N#;S&HMnmu=uJC)(UQurZ+C%^jGI4GDS(T@J( zb^p(Zywg6AY`}l@H9O@dnF6kS#{)@)+-Wiqu-Awmzw`oJq#<Rw8h($d3*^*<S`40$ z1CtPWYjBDM;$m@G&d7Yh)$gyIH{p1?8KMELH(i<lUXR1yU~#b{*`f{XSb8_4WC!7s zJB=g@ovH{-o#g5;Iaii*zWXOr;mTqzBE@8y?){=);?)Izf2^F>6m=Lm6k>H&tWh2A z?adcf&@txiL}@I${CVB?bwFU4i*J<uiqu(3=dPgc#Fv|P9ab;Wp4|d8=jwT(A>T7n zPl;>gb$t%B{-gov5ho>XEjfBCYk~FmJA5GrX(#`!`-X(#PzkgwIP|zHP{%y&ansYI z{h5qvN&X5UBxI^XiRFdN)6XCVZX5QbKtZS(hyky}aEd=}J_qtm4>q&k$#;22G!$^_ z?64`zRJe}bfad(_EG~%A#o|TJ#ZIxk-3imSpBsa)c(~u6^=*%6LiUM;xAT1-Q>B_g znAZcFKP)U?RuU^WFpRkFB{?(AsZDp;GRh*;{IdSzbo@V%Gal*2ea<O%^!t2SwI~#G zrquuX=$xrT&0Y7}{^W_icociTcz)7&jNZ5|`)jzK@@Efz*>W`?XEUIPoSJa)f|c)r zbFr3Y&Qj0u<BLzD(joA~>~Cf@=z}U1oSwrq8D*_cTT<GkEPL;gW&xKLw3|eP`OZF! zK?)(T>ihhfr~(}hB0eu-Rd-I5cJ&owgaJNwQcha=BCOm|__{tA`mh#;UC9&))*?S= zsJ4Oi{s$@<&&t>=gzKX~vg<bJzbA{u&ak>srxQO0k+yCqF+<c?Muz}I9bHnWnGaLP zgIqY4rHV49qOWa70XC24zY!mD>AelR5yUFhO<<W+S`%?vfE>N|AYx=RTxk7>V_i#6 zz@T06&*)E1>}(xz7pDffN!o_sQIiQc!0;8OS>9=_6ouBY&>Ea8W~@vJC+Jz8Ws}h_ zoS`2?ZxijrG>sP+6`%4}=~TEG_y+YzsFr|U?ja8UXi&RRvG9&Ta64_N_Tw{O!R2z` z8hyOY{fszqP`>H$Kn+0Kw>4Y<fl>u}+A#SSuKX`d)(2zEb<h>dV(VWm$uS6E>%edk zZbzYXphx{C-pc>|m*N2~J-y$MF!$Os@@zFmV)m9x6W($T!{ipV;Ne9u76B&_VC2P! z4#f*hBKB0s?9S!Om6hGsz90zcT=M1nC%(}v^9X_7QBs_Rgb)HffbeSFsn;)TRNhc@ zET&8&-3VM?DaU(!baz-n+7dc#b$K&k9-LVN&wL}n=4#9CtAb5;piDQ)Sh`decOhP* z2;PV91*j~y%fvWp9(8$9A$VnGBn=oTqFQc{>?t;0{K=k(BklqQe}{PyAN72H)?JGI zt45h9WX15IMjpx1z}<*RrlwLCqW7#|g;ZYYSTyD5f%JBwjiNpczGb%7h}mbop5|3D z_esNaxQ$}&CeL1~Pp_im869vx+e?F2B&B;VvMb2oO0|~ub;Sj|E|iI?`=*kUz9SKh z_P8vm18!tG@^(I9%2Mtz{RJN4c=Q=p<3Yo1*Vzei#H8HIQil526m0c`ujb2>g(grr zWWB?8LrZCl$C56fj4M6DnsV1GV(ACHT+L}ejq+wVzxK#4nsfX1*12?gK~P~c^Rhbk zf(T+6Q@(J_cuO!bCqqVl-PO#D1CGyw`lX4EQ!7&!w=D4b4u$gc<TcR^1&308Jx|&R z-={jrn=52~VNovoVhy+s3s0)TN#BxG9m(4o<3Xx?Nb7uSKT0mS<>WBuyGS8+^SDeT ztcau<Jch4xwk+&+<L8MZ0aH$H^<k*3j`^NJe(<I(M?xrRhN%Nj(lb(M>rs{ol}!}+ zC+-&pm9W)r^W4CX?b?uwhtAu)5ncz9Zj}n5CekHjcv3;ofK6%b8k!-wvhe%YQyDzm zPp1c=UqC~C5TJe;lQ}Y~Mw-F*WCx9y8aU_wlyrw(sKz7iDgi1*&M)#*n4S4lpadm? zG1CovWBl5=JqVa%w>Sucvl(Ed6U@kxxWo25+Qb>V2#^gLuCj6G4w@U=F4kDd_k-gm zcP(#tL%PtA24cqf9n2oLoBEIe=s}7j5SWJ2ezligUv6-!V0oVe7-;pUi*-Y38!Q;8 zfLzF#xS&PX6!*K0tdzS27n8Gc@w1JbqoHI59x*m8%Nc=9r1aylm~`Q;#pokGlm~Y= zF6p!pof)4_j8IW7!ck1u%%2(tqq;day=J_invO3PE5MA?`4D1U?_s+K5sofm$jN0} zCW3(fA0)B-Amdz3nre2EVv`$`k!DO4wLADR)A0>??j{tX)E$mjW0C;YoW~(&spR~o zwhnLlkS(pv@*AJ9AOlqZH9a70KZr-Rp>kGRi4#H2i1OA&(jWv4pZbSu>d_-DbHXwD zx@-?0zzB8RDL}$3Ix_7su_BOWBaY(4&LI6$QaMfH^>~sqZcLC;J6dys-0<2k;bdvB zR<_G6CMbvPm;Q6-uoDdd{LA3sh!b8~u%jbzAh-R~L0=##hv5INTPb-%4=q~j!NN&u z1j{PY$h`q!bw;<1FrdWunxQ$k$xlh@ztYyxxzjjptm!pUWKw>CS@g<;#Bbd<#R7%S z3Kp3htq(7|#=&`~AUjvRc>mV4{L?BoqLXy*_Yf7woF9$o^46VK40U9Ugo^AmL##42 z6{^Tx)6YH3NNSPfIARC=iHc3AV2E$Ckg$R{63KE}Vt1pjy4ejA;uu0OMb}zs=AFJ% zVnvAw1nU@SoYNJvtHz3gAr48rCNedh{eTA4CH$QkZvgg_k5BGVFM$3v!_*Sc%gagx zonf}scrqg?%c9D7&<D&ntBh$Ukv`^C9D`K;D^#W3)B!28lpq$|RLNHrKXofzpm_8@ z7Z2vMuc>h~q)I8|e+Je+ptBLL6Wg}uM|x*5ZQ)_}YW)ZE1&$+YiI~$_f>tS56D)%O zORr;`-<(2*weX(l1GiR=e>np{3}{8F2o^3ZNmMlTH21ncqZk+a{hHXN`eXQ=e>f{k zzwR%Ms{A%j_MuD+sK&zn`@!DO8ZZdDjG5LCFiowCz!5)~8g$aipNN;d`F<{t3a#bF zTk!9$cqWK;x<mk++AULKFU$A#$6y1hs98zm&u!<{+djKndZRv<ItCSVD^&kcpGW0E zQkCq*(#cbxXOb0!-^1o|{et8>R9u+zZk=w!p9=0_66mE6cDp%zoBi*69>HsqpB6^f zw^dj|_YaXM-`J+-!W#lMq^fJMWodJ|Gm9$eMRcbAA1n9;jyA^DQSzhmAbK&g7f*;% zrE<?Um6V;<<_4rn!MgvStN&yCIvl6F3^B|J6P!pQrr??C_H#@Ikqa=G<khb;@Js-G zfa4(^+=Y?g8kB`}4so;3_vHi>HhRj&n<wbU<v{l~D00lJE=@af<$!p-R`U)Dwk=z{ zL1qs--HV|A5i$RmB7`IN?jpk@9$?fVE)T?5@B64T`!_=Yf14uf*h^ENqRw6|+fb9U z-|KSjuxec}@y6Z_tACv6lh+S46yy|yLW-zsJRKBUD0ojC9@;#)YOR=tBmkw01F8H6 z145!pL*35IFU+}Xei_u~AOtxc(>Z0{^oInhiv>H1tG2VFNpG?0o$AXUWN%WPf0&}# z4p;xB+_r!lg7YZ7<xV^euH^pAL&x#O-Yk>gthqAtZSGd(CEN?NgnaYyw`%_8zbC5& zaUl+FBJY8$5IG*+ml}bx^bed0-DO<+QrP}h!AZ`C`j0@{#Kl7PW1>~Y1A7b{I!(hO z0^p<&G$LWjdx3`}jn6W%{jiT#g=@Z5ske96O8!*TB#dJd`h~X(E2;`Svq~L;hD{g- zPxqCmmtSQJ;CiQLVx|_wqP72R>#W}-BG1zq(*Jw`g46y~eHGn~#0O^Gl#+i4Ad{6^ z-#2$vwMuDW>`Zzz4&ry~igDYo1BCJHB_eXMK}8`t#DOuhPpC1RFr(_BppbYWWq@xH zj0Dn*alh5VR%x#bn8td*`~)d?{{+QSvNK^;FeI-Cg<vHG)t{?$vo%(OXmZ`Q9%fs> zvb-&BP|^5CY7;}n373A$%aF?(L$G}QEUDKQ0AKoLEkP?UK?US0_(xO4&JZq$VkVE9 z8M63(R@*Be8YS2;!z)6{$)k2+{fuq*DaRDc#WEY!byK!B`n~`ayMOpR&fYqG;)70c zbPO@oGy)*v+|?B)t8-$Q08@da)cY7(R1p~riJ5u_d{@pK2sx4Xv%Rr)`lU{`6pd6+ zpGgR}?#$V)Ibh>|Tp$<F)R#PFHfiX}4rOa|9)Ol#6J|w@qiI>-JFBz+1VwDG>}On0 z?a{o@bLXq#mA08@P<y+-sXZOJW_eqn#a~^O&j}HUp~&}8ZwiV=@blxrftQYBpV@PA zWOL5ja3<{|UEwJJaF0b9Z^jx#I%)`40MB&aCN!|d)dbyWT-Ks-mn9Z=0@-<!tHJ*u zxr7@T{)u@Kbx&u2_=196WRg0R{~zV>F}FY)3>9WB$LVnr3C^H@Jv$!um!Qb(Y|O7R zsji_Is>j)cQJkE0?o8m6&{8W2bfhF_3GL~z3HJ?$>|x?&X;|1CGeF-?*okPx=<yWJ zehp$0jjvk0w9@383Gg@?lp~Jm)|9sVq(K-t(xY#pw#m@92(}k6WYK;W#uBj#@+BZ> zJ@(Z2Y%nCSWih52pn=mUz-fG3D|Kyo0m$B}L*#}4eZn=|8Z8##+u>vDsQN?Pt?C>( z0Zu&ie%TMi;<XL@RiS7Nck5C5aV|2EBt|aJV1gk7S)YmAw0g|G6N%@*A=F#?qf3Ny z5EI>qwvSPzQooBvh`*YIbm(s7n#@CeCq?O6bm@fUa%4i11K7K}3%o@(q4~j9jjlb# zMw;WSPO!OQSzrQ`cb#Hq2vj=xcNcpa^u)Wp<Rd=@K8x#gajb;wYX^4P2g5ZvJR>TR zGAat#4;v0}V}x5j_R>H&qTI1a@I{LToM(S!k0oK0MD2-i#245_-}@28k@L{P<K1+4 zZr2C#9S*$9F;#M)Qj1bXCD9}YRe9t`J4&>bF0_wiA=rZ;(#q_d7;YA^Hn=1etL#yh zK6ccya-;k&$y@Trr2$lWZDWjhA%L(jt?@&EB^AX%MRMA@u91MO6Gjd@k*6ev0oG(L z8<i!X`9U5Aa#PcIhwFnfA;TEdhSN6TF}m$_<=#o!>KQgM33m-aT{gnc0Jow2q`YFb z34{BH7CU0{V;pl&yqG5?BsNi_B&0hc)tr2ehc-_KmzC=h3gUcfR>}BfcpS_u*wfYC zc@P500n+=c)csM9fJxrFuwKafD0n~3f()v<NLp9-@W~^s!i(c=kA$Pq?A;<zUva|C zPxnu4#Vlc9I#5q6N)87_GLASiVJ*qw02NEQkt6Z(T_5VpoS(te2YK8{v-x02@PjE{ zta9D21J$b7UfVPtxX8~=n?#w<?>Z6yWeM-O0ZX&|$%z?GKTXA<P^<8+-c^q+9_%D- zw1aGSMSOO)jB5$i`;)S#FbN>D7qM#>$^oJbeKwhl()UiN%xmDqTcgZ+aOz%zIZh5w z59rmG`Mvx`5D!(o$3C22tGuzCB2f%U9bJKI><&68Z#Gj3{Ww^HsNlnl^w^1ssZC5k z@i@H*knr7Z#GC$qaN!SjbuOx#fVi!q=#v{PIz!benk)$O2a7kRid&z}Pq$041P!qU zLytL9be7Tfs&7}Ahp^IkaF`;PC^Nx&M@z<*fQ!iT!_p_MDIoUAk)~AN)A$b*E-}C0 z!Odi7SwWM=YQ~j+Hr=4+akd+xMp9W#seG!C`PkW{Hrnl&%L}ZV`1*Ei2jjMnI-l?a zJF|V(U^_F<`r3)_q`H!UbNY+qc`x+OTQLVdkG_^%h(*&0xpZa!y4FeGHTh+w*Z>xt zeRt%o1qtX%(%Vzrg8KpZy47->x2{uW>HNJ$Yoozyd)&v62gkBDq4MGK9G*uOqQzp3 zSid~-pF=ri<*Qz`R($}&u9MQ-c#&Ch5I@mB&mdNe{{a%mQd&KGOIKR$5+1x@IJ~9c zDNRq~N-pQ1qKcqrQaxf>!l7>^SMF_xkcWA7@mG}Z(~}#%hK-P1_sm75z^@J2VjeKq zR=kav`k6?*7F@5T7GLbBRqz2CNJ@=TuOl*I@#R?@vcbT3&%5C!5;3g}2q#d$zruP_ zrE~}KQkS8qJ#y{oA^jO_K5+f$#36O_L~Mgqtq3rZg9M_CMw#T@MGvtKIm7l}57kAX zu>qGi<`xOe`Z|%1Z!PlraYl(k@QN^@{6+44{c`lEZXk|7>~G>O<@}*-V!1*5jdm7I z*iy&h?ewn9WqUYQe#7y83>~hTvmI5e!yR${2a4*(2dMDv`@{r66>VtnfdAYw<o@fh zFvKOcM2XL44Bspnjruyr*$eT6T@6t+Lg=+vmI8b-VuQW1J85iAJPXNC3|p<hM+Par zDW21bicMHieH+3E!cMyRi49sEqplQZaXInhM-UeNiK4JTyNDJr_L;6-K9SJYR8Yw{ z<x<sg3~=L17r1W`6cvu0x~!(J{PL0q>f7U~OQX*oOL{9wbM%6i#jX}xa+#{-u_a=r zqO`!Y1q$=rMD}A~N$3k`bTBZS?0a{9X`c$9kj<z<i)!n3;+gk&3C|gWd{hxua-_cJ zs1(ab04c=4V%1b)csVqV3b{sKN|Mq&6Hu3RN2~i_r&-frp$X92S|kcg8n$Ki%gTX3 zmVQ+hfNZ_%X@baM=I4F{8w48(tZC_?#8Q!`&D}QCyqDND(VAW?fs%w$YxD0&go3Pu ztaI_XLmXi(Rm<{OQ-P?<+l!S4lR!`Ap?SLlX}mLr2IIxWqxhsBzF!r10s8puXOp}` zVgHqn{zV+{5Kjx^z1WZx+se6w7mbe_@60UE=4XPv<{c|doC0YDhh!d0KEWlMZXr4T zbBw*2H(&JczEq@-1hd|W!uHE#Tn11xe9|0iykSOq<$d>>%GMQ9Us0nhheQ>|r=tW* zJenT!fUaXPw!yTUIs@UTO3!d$7p!lg?^Gs&7DRg{L&(plZx1MXbQ^ljhH_u%i;e2l zx|!V;SEJTAkCu1#EQIRcoTvMBM#m2HaRWI95u}UjD73EXel&LKC|Ie&za4$(x7o`o zN!TWW6r;DT5a&fD(!F7?t@NZH20U%oS(5!BiiQM-iiO4>n#k#1<9D^uBiq(HlPW+c z+WZQ-iPxxE#9%wR{$!mTT3pxxSo1S(109-RrN6B}9Q~<>&frKNY{TtS#ab8J;TC;S z$4!xlLy2x!LW5R~zwp41^k@3Gn_{`0jiFDQXL**0r!tGrSJ^>+m!j0aBbUDuKJ5bW z#(vAWmN3kk>h4kbf|m)tfcE@>AI$cOj6q8R5QQoJHB=(ba3fI;(GU0l{AdP9sFslq z!JRJlf+5A<>lxQ+M~rbCNJ_Wrw9@14&74~GQboWf{ip^swdCW=%cV51%yO)b?Lw5% z&HD_9=z!|l)Jjm%Y@Bp|^zV*Nj#e40UUA~wIkV;&5CorG{&u?QHgZ@0B53pl$nKxc z_2wf4g3#KP<0<xn@j%e?hZTfi1=Zw35^<#Ct2(z*-<7wr7CczP#vUNr?!HC-suhDg zb=xL-mUFMv$W9R?RlcN-7MN+XO<+yuu#!}Cl1+(0UvXX!L)_}^SS#$@&|Dsw4XC}M zLz!`7RO37yWrJ65Q?HERy}$0B;3dNgQskTR7mZ#pajmzO6`RZl@PBI?zHUnnGUcv$ zX}z=7+tVpA+`Cc5t^fj{qPU%|XtI6}m|H{9x^*Y4NEpvDV5r;7&b!q3hMZ-gKR5>{ zYp|*7Qw7CI()wGmDUtAvv~i?|muyAXqY(R%N=|1(eCG<+Q#-IQ6<EDejVK}hTJQhr z_rWN(XX^d{fNU^38`X@@>4B(rojH84Rqx6{{#oy6-%SID^2<JfLd&_*iA3A5GR}Gl zTk;6oy9z3q4Rfd}x8h4WlxmyHnR+F6s+?zpd6lgRwNwZc{x)sQeVx#l{zGY_Co+Ke ze}k~18SV}z;^BOhyu2S{6ZxTq8K-HonFtgTYHU}ooID~@f2^)Hr$G;X0)6u!4Z_~| zNN7pA1Pr%x(2x_-xQ{UGWL%foF1mn{(Tx$Heyq3TEuJ)SuQ1=AUMJOq`-+-66Rlk% z!?oDt!K?o*a}44F4sy)2oo_potKgXsfh0Wycd8QrT*hWAPE?!t?qQ_Xy}V^a!XwqT zd68Z^LCAHj6pY>>ED%g>>Q)uDva95|A12cr?ay-J`2(>lQZ-6$nM72i31sl$p;Rp} zEB7pF<<cx4nQIie%ubk_kjD|=e}4!mWimA+B5{P9EI?3C<jH`D3E`fDfrtsA`e$NT z#SdQ(D^xDmX=j!k2GJ2Z$)x-)@7Gd$ia!Bfp~gM@$uB8iYp;%msAQETxk;;u{4r`C zvyx{|sU_~xML>GO){Z<#<dUm}njE6D6Eb4%M51a`9QC@e&A}bZr6o%;v0_|~cLh#J za5(%H5>GKR<Xuc?Q;lwx|7%JvGJl$#aIs>>MVgz0utCnMYZ`~X+5!jDEa9_eRls2p z<>g3^w!glBLfazeC!E$@q&<aUL%<OD%s4)OQ>m@Ru2F0h9VaE*mzi^uXtumo35G(c zw{+X`Rh?Nz>wUb8UJzq<PWEI$D+3}kG}rCZqk*;<EvY_a(k4;kW_AaB9~&m9a5?SY z!cj0b5(H6angv_9J+lBqj0@)iCYGhTKbY3Zf9GHJYw!(rVcX;$lFZ1D%3He(gbaGU zXtV$4sDl4v2~Lmp>L7ey&{Cq5^uS4;Ax+Jgs@__(K9pc?6LvC6HgJBHOS^h?M98qQ zaHQpztTB(3ed*?0Qpu#|%ZEk0u=YWN+Aph-b(z*%p>{Lfk8d4$PR)Vxtcqrj0S;#) zw#&!O*_=&~hZ<aY@~^x@Lsa(DfCU>T)0Zr}L6Jdva40A<D--E)<t&a6m%S4}q1Zj* z!(dO?Cdkvg_DkO=^TfEkDYIQW*_#6p?){@CAFmH4dzp83@v@&NJcOIk*-~2A<6+<7 z<19VOp<ep43Uvi><k;u?uHF?PX%(U4DyFAq=3TS!GbLS0!OYy#hUxE34p(G<Z+}C2 zfMLBi@psX}CY4do{=5YX1S1bSA49%7@|FadG$aebgL(0InfbGh9OaV<c%u8Z#7*pn zz1GnYWfc-LE2&vq@$0xN`8^aVWskHA7#g`@J?LfW`If=q;wL7K3f~nf74e%p!dXTy z@IE+h@_VjeUaNoafow3007=na1$#kE9<%wPOQ4UIuQxBEbLb2~H5}$3lh`R@MFY73 zD+tX^m?2doP(0N}Y?*n6B+efu-2W&hvavdfL;jMDq3#>4tO;H@WM2l1SA=F4x9Lj& z$lo2`YYyl0TI!zPnyylnM)PQ7Qo%@QIoNuDufXfuTRXP4aOKhQR_Z(Od+j((*n-n) zbY$4RleOK3Yfk|mZgn38M)p+~dw^2l77fSg=3Nfgg{hxw$eG8Xetbst3;qLo?*$qr zcH<lN)#o-kz<Vk;W{rDNsZX;CIJKzrjKtUbkW)Lu8KD#eBiB`@4An1BZ8^jurzOwk zpc4cGh~>WG*mWirg66v#ZVUQNcs+JY;Y|GFi$$2lsi|!YT#FKP<XMe;5j;3$p(H)s z*lGCEtu?=!RLpvj?hyeRed;<6UA_ijisD}ehb!oxRC0~lEY7F=be<q>l%Pg&Vk#Kc z4uo=~1?C)|bHh|U+Efm(aok0Ggyx=39~d8_#DuKuT`tIw`VHLBN6RPA=3hhN>;#@b zPp97-L_fR;CoJyFI~yzCu~Ou9I2UIATVwp?$fpw>8|6Gn_GL6-y1<RU{#da4P0`|U znZp0bQx@hZ`Amn=6tXw`>swj?TdpP$o}RG6W7qBRk6DF(5XHWi=8EHY*M9WCyCAW^ z74qqHu$9`|2?TmCi(UT*e>WVh%Nfp|RC5fno<-@Lk&eXH0th`4!<NIEx-9<4;uE_E zMgdaP>B9ChBA=#Tg{0I#pjpd-Lw6R&3|lJ4yh6E`Hxe%*#fu(AKUIKV!GP+1!b_P4 z)oyEYJh6Lc7I{x`EUk2^ebW_T5jP0!+4oLMe%H#Z&Z`|qd#H!x5s1p23|<eUG>AkX z;Z>V+35Izs*9KmW20WUya%OkaSy0}M2w`3eC>)PEugI+U_5}m7TZTham<wn8S?Q3U zWB5fC8X2r_TYx=aZ{ZTcZvv=od!;=k^^=N|5)P2T5$ho{v#vHWSFLvKxTaHBhPi_V z9%O78s*qy-<~Ub_;CEaiXQ(%zc~vlDJb)>Es|SLh8}K@LUuCKFzwRbv9$XHm7QmEE z>zSees8H#gKL7zvltRExr60uBE_HAsUxaY@)Ykw=F?wMacZ6h3vU2FYjBp;imp(Eq z)dhAeOctSY5=c(iVFqS+fB8+u6m>T63thWnz({Yddo4U{+<4Ifv-T0)^*4R<v!Jf) zU2>0oGf4`_tjC21_K0aX#(eZL&sU$)<GKrp@-<QAUM~!`Ck&5SUBPH9ASAU?SnP&0 z&@W>++kV@@2;jACs_P|isSWyX3X%HVvM4$1sA9I%vo1`e;}ke?jRNy4;gD7KgFO!z z8aTrV7WXH~{3Jmwd$&xS!`}Iqtorrxl?(Zydbbtr$@LeWp$%0De?KwQ$?L83>IM{< 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 literal 0 HcmV?d00001 diff --git a/man/BasinInfo.Rd b/man/BasinInfo.Rd new file mode 100644 index 00000000..918ae1dc --- /dev/null +++ b/man/BasinInfo.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\docType{data} +\encoding{UTF-8} +\name{BasinInfo} +\alias{BasinInfo} +\title{Data sample: characteristics of a fictional catchment (L0123001, L0123002 or L0123003)} +\format{List named 'BasinInfo' containing +\itemize{ +\item two strings: catchment's code and station's name +\item one float: catchment's area in km2 +\item one numeric vector: catchment's hypsometric curve (min, quantiles 01 to 99 and max) in metres +}} +\description{ +R-object containing the code, station's name, area and hypsometric curve of the catchment. +} +\examples{ +require(airGR) + data(L0123001) + str(BasinInfo) +} + diff --git a/man/BasinObs.Rd b/man/BasinObs.Rd new file mode 100644 index 00000000..57b3de56 --- /dev/null +++ b/man/BasinObs.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\docType{data} +\encoding{UTF-8} +\name{BasinObs} +\alias{BasinObs} +\title{Data sample: time series of observations of a fictional catchment (L0123001, L0123002 or L0123003)} +\format{Data frame named 'BasinObs' containing +\itemize{ +\item one POSIXlt vector: time series dates in the POSIXlt format +\item five numeric vectors: time series of catchment average precipitation [mm], catchment average air temperature [degC], catchment average potential evapotranspiration [mm], outlet discharge [l/s], outlet discharge [mm] +}} +\description{ +R-object containing the times series of precipitation, temperature, potential evapotranspiration and discharges. \cr +Times series for L0123001 or L0123002 are at the daily time-step for use with daily models such as GR4J, GR5J, GR6J, CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J. +Times series for L0123003 are at the hourly time-step for use with hourly models such as GR4H. +} +\examples{ +require(airGR) + data(L0123001) + str(BasinObs) +} + diff --git a/man/Calibration.Rd b/man/Calibration.Rd new file mode 100644 index 00000000..2df07d6d --- /dev/null +++ b/man/Calibration.Rd @@ -0,0 +1,94 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{Calibration} +\alias{Calibration} +\title{Calibration algorithm which minimises an error criterion on the model outputs using the provided functions} +\usage{ +Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD, + FUN_CRIT, FUN_CALIB = Calibration_HBAN, FUN_TRANSFO = NULL, + quiet = FALSE) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details} + +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)} + +\item{FUN_CALIB}{(optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN} + +\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] see \code{\link{Calibration_HBAN}} or \code{\link{Calibration_optim}} +} +\description{ +Calibration algorithm which minimises the error criterion using the provided functions. \cr +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN) + +## calibration +OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit, + CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE, + FUN_CALIB=Calibration_HBAN) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{Calibration_HBAN}}, \code{\link{Calibration_optim}}, + \code{\link{RunModel}}, \code{\link{ErrorCrit}}, \code{\link{TransfoParam}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, + \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +} + diff --git a/man/Calibration_HBAN.Rd b/man/Calibration_HBAN.Rd new file mode 100644 index 00000000..de3650a0 --- /dev/null +++ b/man/Calibration_HBAN.Rd @@ -0,0 +1,127 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{Calibration_HBAN} +\alias{Calibration_HBAN} +\title{Calibration algorithm which minimises the error criterion using the Irstea-HBAN procedure} +\usage{ +Calibration_HBAN(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD, + FUN_CRIT, FUN_TRANSFO = NULL, quiet = FALSE) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details} + +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)} + +\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$ParamFinalR } \tab [numeric] parameter set obtained at the end of the calibration \cr + \emph{$CritFinal } \tab [numeric] error criterion obtained at the end of the calibration \cr + \emph{$NIter } \tab [numeric] number of iterations during the calibration \cr + \emph{$NRuns } \tab [numeric] number of model runs done during the calibration \cr + \emph{$HistParamR } \tab [numeric] table showing the progression steps in the search for optimal set: parameter values \cr + \emph{$HistCrit } \tab [numeric] table showing the progression steps in the search for optimal set: criterion values \cr + \emph{$MatBoolCrit } \tab [boolean] table giving the requested and actual time steps when the model is calibrated \cr + \emph{$CritName } \tab [character] name of the calibration criterion \cr + \emph{$CritBestValue} \tab [numeric] theoretical best criterion value \cr + } +} +\description{ +Calibration algorithm which minimises the error criterion. \cr +\cr +The algorithm is based on a local search procedure. +First, a screening is performed using either a rough predefined grid or a list of parameter sets +and then a simple steepest descent local search algorithm is performed. +} +\details{ +A screening is first performed either from a rough predefined grid (considering various initial +values for each paramete) or from a list of initial parameter sets. \cr +The best set identified in this screening is then used as a starting point for the steepest +descent local search algorithm. \cr +For this search, the parameters are used in a transformed version, to obtain uniform +variation ranges (and thus a similar pace), while the true ranges might be quite different. \cr +At each iteration, we start from a parameter set of NParam values (NParam being the number of +free parameters of the chosen hydrological model) and we determine the 2*NParam-1 new candidates +by changing one by one the different parameters (+/- pace). \cr +All these candidates are tested and the best one kept to be the starting point for the next +iteration. At the end of each iteration, the pace is either increased or decreased to adapt +the progression speed. A diagonal progress can occasionally be done. \cr +The calibration algorithm stops when the pace becomes too small. \cr + +To optimise the exploration of the parameter space, transformation functions are used to convert +the model parameters. This is done using the TransfoParam functions. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN) + +## calibration +OutputsCalib <- Calibration_HBAN(InputsModel=InputsModel,RunOptions=RunOptions, + InputsCrit=InputsCrit,CalibOptions=CalibOptions, + FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (August 2013) +} +\references{ +Michel, C. (1991), + Hydrologie appliquée aux petits bassins ruraux, Hydrology handout (in French), Cemagref, Antony, France. +} +\seealso{ +\code{\link{Calibration}}, \code{\link{Calibration_optim}}, + \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, + \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +} + diff --git a/man/Calibration_optim.Rd b/man/Calibration_optim.Rd new file mode 100644 index 00000000..a32d0063 --- /dev/null +++ b/man/Calibration_optim.Rd @@ -0,0 +1,103 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{Calibration_optim} +\alias{Calibration_optim} +\title{Calibration algorithm which minimises the error criterion using the stats::optim function} +\usage{ +Calibration_optim(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD, + FUN_CRIT, FUN_TRANSFO = NULL, quiet = FALSE) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{CalibOptions}{[object of class \emph{CalibOptions}] see \code{\link{CreateCalibOptions}} for details} + +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)} + +\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$ParamFinalR } \tab [numeric] parameter set obtained at the end of the calibration \cr + \emph{$CritFinal } \tab [numeric] error criterion obtained at the end of the calibration \cr + \emph{$Nruns } \tab [numeric] number of model runs done during the calibration \cr + \emph{$CritName } \tab [character] name of the calibration criterion \cr + \emph{$CritBestValue} \tab [numeric] theoretical best criterion value \cr + } +} +\description{ +Calibration algorithm which minimises the error criterion. \cr +\cr +The algorithm is based on the "optim" function from the "stats" R-package +(using method="L-BFGS-B", i.e. a local optimization quasi-Newton method). +} +\details{ +To optimise the exploration of the parameter space, transformation functions are used to convert +the model parameters. This is done using the TransfoParam functions. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_optim) + +## calibration +OutputsCalib <- Calibration_optim(InputsModel=InputsModel,RunOptions=RunOptions, + InputsCrit=InputsCrit,CalibOptions=CalibOptions, + FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) +} +\author{ +Laurent Coron (August 2013) +} +\seealso{ +\code{\link{Calibration}}, \code{\link{Calibration_HBAN}}, + \code{\link{RunModel_GR4J}}, \code{\link{TransfoParam_GR4J}}, \code{\link{ErrorCrit_RMSE}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, + \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. +} + diff --git a/man/CreateCalibOptions.Rd b/man/CreateCalibOptions.Rd new file mode 100644 index 00000000..4efc8cb5 --- /dev/null +++ b/man/CreateCalibOptions.Rd @@ -0,0 +1,128 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{CreateCalibOptions} +\alias{CreateCalibOptions} +\title{Creation of the CalibOptions object required to the Calibration functions} +\usage{ +CreateCalibOptions(FUN_MOD, FUN_CALIB = Calibration_HBAN, + FUN_TRANSFO = NULL, RunOptions = NULL, OptimParam = NULL, + FixedParam = NULL, SearchRanges = NULL, StartParam = NULL, + StartParamList = NULL, StartParamDistrib = NULL) +} +\arguments{ +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{FUN_CALIB}{(optional) [function] calibration algorithm function (e.g. Calibration_HBAN, Calibration_optim), default=Calibration_HBAN} + +\item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the FUN_MOD used is native in the package FUN_TRANSFO is automatically defined} + +\item{RunOptions}{(optional) [object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{OptimParam}{(optional) [boolean] vector of booleans indicating which parameters must be optimised (NParam columns, 1 line)} + +\item{FixedParam}{(optional) [numeric] vector giving the values to allocate to non-optimised parameter values (NParam columns, 1 line)} + +\item{SearchRanges}{(optional) [numeric] matrix giving the ranges of real parameters (NParam columns, 2 lines) +\tabular{llllll}{ + \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr + [1,] \tab 0 \tab -1 \tab 0 \tab ... \tab 0.0 \cr + [2,] \tab 3000 \tab +1 \tab 100 \tab ... \tab 3.0 \cr +}} + +\item{StartParam}{(optional) [numeric] vector of parameter values used to start global search calibration procedure (e.g. Calibration_optim) +\tabular{llllll}{ + \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr + \tab 1000 \tab -0.5 \tab 22 \tab ... \tab 1.1 \cr +}} + +\item{StartParamList}{(optional) [numeric] matrix of parameter sets used for grid-screening calibration procedure (values in columns, sets in line) +\tabular{llllll}{ + \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr + [set1] \tab 800 \tab -0.7 \tab 25 \tab ... \tab 1.0 \cr + [set2] \tab 1000 \tab -0.5 \tab 22 \tab ... \tab 1.1 \cr + [...] \tab ... \tab ... \tab ... \tab ... \tab ... \cr + [set n] \tab 200 \tab -0.3 \tab 17 \tab ... \tab 1.0 \cr +}} + +\item{StartParamDistrib}{(optional) [numeric] matrix of parameter values used for grid-screening calibration procedure (values in columns, percentiles in line) \cr +\tabular{llllll}{ + \tab [X1] \tab [X2] \tab [X3] \tab [...] \tab [Xi] \cr + [value1] \tab 800 \tab -0.7 \tab 25 \tab ... \tab 1.0 \cr + [value2] \tab 1000 \tab NA \tab 50 \tab ... \tab 1.2 \cr + [value3] \tab 1200 \tab NA \tab NA \tab ... \tab 1.6 \cr +}} +} +\value{ +[list] object of class \emph{CalibOptions} containing the data required to evaluate the model outputs; it can include the following: + \tabular{ll}{ + \emph{$OptimParam } \tab [boolean] vector of booleans indicating which parameters must be optimised \cr + \emph{$FixedParam } \tab [numeric] vector giving the values to allocate to non-optimised parameter values \cr + \emph{$SearchRanges } \tab [numeric] matrix giving the ranges of real parameters \cr + \emph{$StartParam } \tab [numeric] vector of parameter values used to start global search calibration procedure \cr + \emph{$StartParamList } \tab [numeric] matrix of parameter sets used for grid-screening calibration procedure \cr + \emph{$StartParamDistrib} \tab [numeric] matrix of parameter values used for grid-screening calibration procedure \cr + } +} +\description{ +Creation of the CalibOptions object required to the Calibration functions. +} +\details{ +Users wanting to use FUN_MOD, FUN_CALIB or FUN_TRANSFO functions that are not included in +the package must create their own CalibOptions object accordingly. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN) + +## calibration +OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit, + CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE, + FUN_CALIB=Calibration_HBAN) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}} +} + diff --git a/man/CreateInputsCrit.Rd b/man/CreateInputsCrit.Rd new file mode 100644 index 00000000..413c4455 --- /dev/null +++ b/man/CreateInputsCrit.Rd @@ -0,0 +1,112 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{CreateInputsCrit} +\alias{CreateInputsCrit} +\title{Creation of the InputsCrit object required to the ErrorCrit functions} +\usage{ +CreateInputsCrit(FUN_CRIT, InputsModel, RunOptions, Qobs, BoolCrit = NULL, + transfo = "", Ind_zeroes = NULL, epsilon = NULL) +} +\arguments{ +\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)} + +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Qobs}{[numeric] series of observed discharges [mm]} + +\item{BoolCrit}{(optional) [boolean] boolean giving the time steps to consider in the computation (all time steps are consider by default)} + +\item{transfo}{(optional) [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort")} + +\item{Ind_zeroes}{(optional) [numeric] indices of the time-steps where zeroes are observed} + +\item{epsilon}{(optional) [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty} +} +\value{ +[list] object of class \emph{InputsCrit} containing the data required to evaluate the model outputs; it can include the following: + \tabular{ll}{ + \emph{$BoolCrit } \tab [boolean] boolean giving the time steps to consider in the computation \cr + \emph{$Qobs } \tab [numeric] series of observed discharges [mm] \cr + \emph{$transfo } \tab [character] name of the transformation (e.g. "", "sqrt", "log", "inv", "sort") \cr + \emph{$Ind_zeroes} \tab [numeric] indices of the time-steps where zeroes are observed \cr + \emph{$epsilon } \tab [numeric] epsilon to add to all Qobs and Qsim if \emph{$Ind_zeroes} is not empty \cr + } +} +\description{ +Creation of the InputsCrit object required to the ErrorCrit functions. +} +\details{ +Users wanting to use FUN_CRIT functions that are not included in +the package must create their own InputsCrit object accordingly. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows +transfo <- "log" +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75\%) +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10\%) on log-trqansformed flows +transfo <- "log" +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions, + Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\\n",sep="")) + + + + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateCalibOptions}} +} + diff --git a/man/CreateInputsModel.Rd b/man/CreateInputsModel.Rd new file mode 100644 index 00000000..3a2695d8 --- /dev/null +++ b/man/CreateInputsModel.Rd @@ -0,0 +1,89 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{CreateInputsModel} +\alias{CreateInputsModel} +\title{Creation of the InputsModel object required to the RunModel functions} +\usage{ +CreateInputsModel(FUN_MOD, DatesR, Precip, PotEvap = NULL, TempMean = NULL, + TempMin = NULL, TempMax = NULL, ZInputs = NULL, HypsoData = NULL, + NLayers = 5, quiet = FALSE) +} +\arguments{ +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{DatesR}{[POSIXlt] vector of dates required to create the GR model and CemaNeige module inputs} + +\item{Precip}{[numeric] time series of daily total precipitation (catchment average) [mm], required to create the GR model and CemaNeige module inputs} + +\item{PotEvap}{[numeric] time series of daily potential evapotranspiration (catchment average) [mm], required to create the GR model inputs} + +\item{TempMean}{[numeric] time series of daily mean air temperature [degC], required to create the CemaNeige module inputs} + +\item{TempMin}{(optional) [numeric] time series of daily min air temperature [degC], possibly used to create the CemaNeige module inputs} + +\item{TempMax}{(optional) [numeric] time series of daily max air temperature [degC], possibly used to create the CemaNeige module inputs} + +\item{ZInputs}{(optional) [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]} + +\item{HypsoData}{(optional) [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m], required to create the GR model inputs, if not defined a single elevation is used for CemaNeige} + +\item{NLayers}{(optional) [numeric] integer giving the number of elevation layers requested [-], required to create the GR model inputs, default=5} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] object of class \emph{InputsModel} containing the data required to evaluate the model outputs; it can include the following: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] vector of dates \cr + \emph{$Precip } \tab [numeric] time series of daily total precipitation (catchment average) [mm] \cr + \emph{$PotEvap } \tab [numeric] time series of daily potential evapotranspiration (catchment average) [mm], \cr\tab defined if FUN_MOD includes GR4J, GR5J or GR6J \cr \cr + \emph{$LayerPrecip } \tab [list] list of time series of daily precipitation (layer average) [mm], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr + \emph{$LayerTempMean } \tab [list] list of time series of daily mean air temperature (layer average) [degC], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr + \emph{$LayerFracSolidPrecip} \tab [list] list of time series of daily solid precip. fract. (layer average) [-], \cr\tab defined if FUN_MOD includes CemaNeige \cr \cr + } +} +\description{ +Creation of the InputsModel object required to the RunModel functions. +} +\details{ +Users wanting to use FUN_MOD functions that are not included in +the package must create their own InputsModel object accordingly. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{RunModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}, \code{\link{DataAltiExtrapolation_HBAN}} +} + diff --git a/man/CreateRunOptions.Rd b/man/CreateRunOptions.Rd new file mode 100644 index 00000000..e4dd9216 --- /dev/null +++ b/man/CreateRunOptions.Rd @@ -0,0 +1,121 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{CreateRunOptions} +\alias{CreateRunOptions} +\title{Creation of the RunOptions object required to the RunModel functions} +\usage{ +CreateRunOptions(FUN_MOD, InputsModel, IndPeriod_WarmUp = NULL, IndPeriod_Run, + IniStates = NULL, IniResLevels = NULL, Outputs_Cal = NULL, + Outputs_Sim = "all", RunSnowModule = TRUE, MeanAnSolidPrecip = NULL, + quiet = FALSE) +} +\arguments{ +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} + +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{IndPeriod_WarmUp}{(optional) [numeric] index of period to be used for the model warm-up [-]} + +\item{IndPeriod_Run}{[numeric] index of period to be used for the model run [-]} + +\item{IniStates}{(optional) [numeric] vector of initial model states [mm]} + +\item{IniResLevels}{(optional) [numeric] vector of initial filling rates for production and routing stores (2 values between 0 and 1) [-]} + +\item{Outputs_Cal}{(optional) [character] vector giving the outputs needed for the calibration \cr (e.g. c("Qsim")), the least outputs the fastest the calibration} + +\item{Outputs_Sim}{(optional) [character] vector giving the requested outputs \cr (e.g. c("DatesR","Qsim","SnowPack")), default="all"} + +\item{RunSnowModule}{(optional) [boolean] option indicating whether CemaNeige should be activated, default=TRUE} + +\item{MeanAnSolidPrecip}{(optional) [numeric] vector giving the annual mean of average solid precipitation for each layer (computed from InputsModel if not defined) [mm/y]} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] object of class \emph{RunOptions} containing the data required to evaluate the model outputs; it can include the following: + \tabular{ll}{ + \emph{IndPeriod_WarmUp } \tab [numeric] index of period to be used for the model warm-up [-] \cr + \emph{IndPeriod_Run } \tab [numeric] index of period to be used for the model run [-] \cr + \emph{IniStates } \tab [numeric] vector of initial model states [mm] \cr + \emph{IniResLevels } \tab [numeric] vector of initial filling rates for production and routing stores [-] \cr + \emph{Outputs_Cal } \tab [character] character vector giving only the outputs needed for the calibration \cr + \emph{Outputs_Sim } \tab [character] character vector giving the requested outputs \cr + \emph{RunSnowModule } \tab [boolean] option indicating whether CemaNeige should be activated \cr + \emph{MeanAnSolidPrecip} \tab [numeric] vector giving the annual mean of average solid precipitation for each layer [mm/y] \cr + } +} +\description{ +Creation of the RunOptions object required to the RunModel functions. +} +\details{ +Users wanting to use FUN_MOD functions that are not included in +the package must create their own RunOptions object accordingly. + +##### Initialisation options ##### + +The model initialisation options can either be set to a default configuration or be defined by the user. + +This is done via three vectors: \cr \emph{IndPeriod_WarmUp}, \emph{IniStates}, \emph{IniResLevels}. \cr +A default configuration is used for initialisation if these vectors are not defined. + +(1) Default initialisation options: + +\itemize{ +\item \emph{IndPeriod_WarmUp} default setting ensures a one-year warm-up using the time-steps preceding the \emph{IndPeriod_Run}. +The actual length of this warm-up might be shorter depending on data availability (no missing value being allowed on model input series). + +\item \emph{IniStates} and \emph{IniResLevels} are automatically set to initialise all the model states at 0, except for the production and routing stores which are initialised at 50\% of their capacity. This initialisation is made at the very beginning of the model call (i.e. at the beginning of \emph{IndPeriod_WarmUp} or at the beginning of IndPeriod_Run if the warm-up period is disabled). +} + +(2) Customisation of initialisation options: + +\itemize{ +\item \emph{IndPeriod_WarmUp} can be used to specify the indices of the warm-up period (within the time-series prepared in InputsModel). \cr +- remark 1: for most common cases, indices corresponding to one or several years preceding \emph{IndPeriod_Run} are used (e.g. \emph{IndPeriod_WarmUp <- 1000:1365} and \emph{IndPeriod_Run <- 1366:5000)}. \cr +However, it is also possible to perform a long-term initialisation if other indices than the warm-up ones are set in \emph{IndPeriod_WarmUp} (e.g. \emph{IndPeriod_WarmUp <- c( 1:5000 , 1:5000 , 1:5000 ,1000:1365 )}). \cr +- remark 2: it is also possible to completely disable the warm-up period when using \emph{IndPeriod_WarmUp <- 0}. + +\item \emph{IniStates} and \emph{IniResLevels} can be used to specify the initial model states. \cr +- remark 1: if \emph{IniStates} is used, all model states must be provided (e.g. 60 floats [mm] are required for GR4J, GR5J and GR6J; 60+2*NLayers floats [mm] are required for CemaNeigeGR4J, CemaNeigeGR5J and CemaNeigeGR6J; see fortran source code for details). \cr +- remark 2: in addition to \emph{IniStates}, \emph{IniResLevels} allows to set the filling rate of the production and routing stores for the GR models. For instance for GR4J, GR5J and GR6J: \emph{IniResLevels <- c(0.3,0.5)} should be used to obtain initial fillings of 30\% and 50\% for the production and routing stores, respectively. \emph{IniResLevels} is optional and can only be used if \emph{IniStates} is also defined (the state values corresponding to these two stores in \emph{IniStates} are not used in such case). \cr \cr +} +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{RunModel}}, \code{\link{CreateInputsModel}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}} +} + diff --git a/man/DataAltiExtrapolation_HBAN.Rd b/man/DataAltiExtrapolation_HBAN.Rd new file mode 100644 index 00000000..25a862f9 --- /dev/null +++ b/man/DataAltiExtrapolation_HBAN.Rd @@ -0,0 +1,64 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{DataAltiExtrapolation_HBAN} +\alias{DataAltiExtrapolation_HBAN} +\title{Altitudinal extrapolation of precipitation and temperature series} +\usage{ +DataAltiExtrapolation_HBAN(DatesR, Precip, TempMean, TempMin = NULL, + TempMax = NULL, ZInputs, HypsoData, NLayers, quiet = FALSE) +} +\arguments{ +\item{DatesR}{[POSIXlt] vector of dates} + +\item{Precip}{[numeric] time series of daily total precipitation (catchment average) [mm]} + +\item{TempMean}{[numeric] time series of daily mean air temperature [degC]} + +\item{TempMin}{(optional) [numeric] time series of daily min air temperature [degC]} + +\item{TempMax}{(optional) [numeric] time series of daily max air temperature [degC]} + +\item{ZInputs}{[numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]} + +\item{HypsoData}{[numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m]} + +\item{NLayers}{[numeric] integer giving the number of elevation layers requested [-]} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +list containing the extrapolated series of precip. and air temp. on each elevation layer + \tabular{ll}{ + \emph{$LayerPrecip } \tab [list] list of time series of daily precipitation (layer average) [mm] \cr + \emph{$LayerTempMean } \tab [list] list of time series of daily mean air temperature (layer average) [degC] \cr + \emph{$LayerTempMin } \tab [list] list of time series of daily min air temperature (layer average) [degC] \cr + \emph{$LayerTempMax } \tab [list] list of time series of daily max air temperature (layer average) [degC] \cr + \emph{$LayerFracSolidPrecip} \tab [list] list of time series of daily solid precip. fract. (layer average) [-] \cr + \emph{$ZLayers } \tab [numeric] vector of median elevation for each layer \cr + } +} +\description{ +Function which extrapolates the precipitation and air temperature series for different elevation layers (method from Valery, 2010). +} +\details{ +Elevation layers of equal surface are created the 101 elevation quantiles (\emph{HypsoData}) +and the number requested elevation layers (\emph{NLayers}). \cr +Forcing data (precipitation and air temperature) are extrapolated using gradients from Valery (2010). +(e.g. gradP=0.0004 [m-1] for France and gradT=0.434 [degreC/100m] for January, 1st). \cr +This function is used by the \emph{CreateInputsModel} function. \cr +} +\author{ +Laurent Coron, Pierre Brigode (June 2014) +} +\references{ +Turcotte, R., L.-G. Fortin, V. Fortin, J.-P. Fortin and J.-P. Villeneuve (2007), + Operational analysis of the spatial distribution and the temporal evolution of the snowpack water equivalent + in southern Quebec, Canada, Nordic Hydrology, 38(3), 211, doi:10.2166/nh.2007.009. \cr + Valéry, A. (2010), Modélisation précipitations-débit sous influence nivale ? : Elaboration d'un module neige + et évaluation sur 380 bassins versants, PhD thesis (in french), AgroParisTech, Paris, France. \cr + USACE (1956), Snow Hydrology, pp. 437, U.S. Army Coprs of Engineers (USACE) North Pacific Division, Portland, Oregon, USA. +} +\seealso{ +\code{\link{CreateInputsModel}}, \code{\link{RunModel_CemaNeigeGR4J}} +} + diff --git a/man/ErrorCrit.Rd b/man/ErrorCrit.Rd new file mode 100644 index 00000000..18302692 --- /dev/null +++ b/man/ErrorCrit.Rd @@ -0,0 +1,92 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{ErrorCrit} +\alias{ErrorCrit} +\title{Error criterion using the provided function} +\usage{ +ErrorCrit(InputsCrit, OutputsModel, FUN_CRIT, quiet = FALSE) +} +\arguments{ +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details} + +\item{FUN_CRIT}{[function] error criterion function (e.g. ErrorCrit_RMSE, ErrorCrit_NSE)} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs, see \code{\link{ErrorCrit_RMSE}} or \code{\link{ErrorCrit_NSE}} for details +} +\description{ +Function which computes an error criterion with the provided function. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows +transfo <- "log" +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75\%) +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10\%) on log-trqansformed flows +transfo <- "log" +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions, + Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\\n",sep="")) + + + + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}} +} + diff --git a/man/ErrorCrit_KGE.Rd b/man/ErrorCrit_KGE.Rd new file mode 100644 index 00000000..5b71c61a --- /dev/null +++ b/man/ErrorCrit_KGE.Rd @@ -0,0 +1,50 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{ErrorCrit_KGE} +\alias{ErrorCrit_KGE} +\title{Error criterion based on the KGE formula} +\usage{ +ErrorCrit_KGE(InputsCrit, OutputsModel, quiet = FALSE) +} +\arguments{ +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$CritValue } \tab [numeric] value of the criterion \cr + \emph{$CritName } \tab [character] name of the criterion \cr + \emph{$SubCritValues } \tab [numeric] values of the sub-criteria \cr + \emph{$SubCritNames } \tab [character] names of the sub-criteria \cr + \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr + \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr + \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr + } +} +\description{ +Function which computes an error criterion based on the KGE formula proposed by Gupta et al. (2009). +} +\details{ +In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +} +\examples{ +## see example of the ErrorCrit function +} +\author{ +Laurent Coron (June 2014) +} +\references{ +Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), + Decomposition of the mean squared error and NSE performance criteria: Implications + for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr +} +\seealso{ +\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE2}} +} + diff --git a/man/ErrorCrit_KGE2.Rd b/man/ErrorCrit_KGE2.Rd new file mode 100644 index 00000000..aa6e12ae --- /dev/null +++ b/man/ErrorCrit_KGE2.Rd @@ -0,0 +1,53 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{ErrorCrit_KGE2} +\alias{ErrorCrit_KGE2} +\title{Error criterion based on the KGE' formula} +\usage{ +ErrorCrit_KGE2(InputsCrit, OutputsModel, quiet = FALSE) +} +\arguments{ +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$CritValue } \tab [numeric] value of the criterion \cr + \emph{$CritName } \tab [character] name of the criterion \cr + \emph{$SubCritValues } \tab [numeric] values of the sub-criteria \cr + \emph{$SubCritNames } \tab [character] names of the sub-criteria \cr + \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr + \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr + \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr + } +} +\description{ +Function which computes an error criterion based on the KGE' formula proposed by Kling et al. (2012). +} +\details{ +In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +} +\examples{ +## see example of the ErrorCrit function +} +\author{ +Laurent Coron (June 2014) +} +\references{ +Gupta, H. V., Kling, H., Yilmaz, K. K. and Martinez, G. F. (2009), + Decomposition of the mean squared error and NSE performance criteria: Implications + for improving hydrological modelling, Journal of Hydrology, 377(1-2), 80-91, doi:10.1016/j.jhydrol.2009.08.003. \cr + Kling, H., Fuchs, M. and Paulin, M. (2012), + Runoff conditions in the upper Danube basin under an ensemble of climate change scenarios, + Journal of Hydrology, 424-425, 264-277, doi:10.1016/j.jhydrol.2012.01.011. +} +\seealso{ +\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}} +} + diff --git a/man/ErrorCrit_NSE.Rd b/man/ErrorCrit_NSE.Rd new file mode 100644 index 00000000..112f39c3 --- /dev/null +++ b/man/ErrorCrit_NSE.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{ErrorCrit_NSE} +\alias{ErrorCrit_NSE} +\title{Error criterion based on the NSE formula} +\usage{ +ErrorCrit_NSE(InputsCrit, OutputsModel, quiet = FALSE) +} +\arguments{ +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$CritValue } \tab [numeric] value of the criterion \cr + \emph{$CritName } \tab [character] name of the criterion \cr + \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr + \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr + \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr + } +} +\description{ +Function which computes an error criterion based on the NSE formula proposed by Nash & Sutcliffe (1970). +} +\details{ +In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +} +\examples{ +## see example of the ErrorCrit function +} +\author{ +Laurent Coron (June 2014) +} +\references{ +Nash, J.E. and Sutcliffe, J.V. (1970), + River flow forecasting through conceptual models part 1. + A discussion of principles, Journal of Hydrology, 10(3), 282-290, doi:10.1016/0022-1694(70)90255-6. \cr +} +\seealso{ +\code{\link{ErrorCrit_RMSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}} +} + diff --git a/man/ErrorCrit_RMSE.Rd b/man/ErrorCrit_RMSE.Rd new file mode 100644 index 00000000..be78dafc --- /dev/null +++ b/man/ErrorCrit_RMSE.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{ErrorCrit_RMSE} +\alias{ErrorCrit_RMSE} +\title{Error criterion based on the RMSE} +\usage{ +ErrorCrit_RMSE(InputsCrit, OutputsModel, quiet = FALSE) +} +\arguments{ +\item{InputsCrit}{[object of class \emph{InputsCrit}] see \code{\link{CreateInputsCrit}} for details} + +\item{OutputsModel}{[object of class \emph{OutputsModel}] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$CritValue } \tab [numeric] value of the criterion \cr + \emph{$CritName } \tab [character] name of the criterion \cr + \emph{$CritBestValue } \tab [numeric] theoretical best criterion value \cr + \emph{$Multiplier } \tab [numeric] integer indicating whether the criterion is indeed an error (+1) or an efficiency (-1) \cr + \emph{$Ind_notcomputed} \tab [numeric] indices of the time-steps where InputsCrit$BoolCrit=FALSE or no data is available \cr + } +} +\description{ +Function which computes an error criterion based on the root mean square error (RMSE). +} +\details{ +In addition to the criterion value, the function outputs include a multiplier (-1 or +1) which allows +the use of the function for model calibration: the product CritValue*Multiplier is the criterion to be minimised +(e.g. Multiplier=+1 for RMSE, Multiplier=-1 for NSE). +} +\examples{ +## see example of the ErrorCrit function +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{ErrorCrit_NSE}}, \code{\link{ErrorCrit_KGE}}, \code{\link{ErrorCrit_KGE2}} +} + diff --git a/man/PEdaily_Oudin.Rd b/man/PEdaily_Oudin.Rd new file mode 100644 index 00000000..c310f515 --- /dev/null +++ b/man/PEdaily_Oudin.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{PEdaily_Oudin} +\alias{PEdaily_Oudin} +\title{Computation of daily series of potential evapotranspiration with Oudin's formula} +\usage{ +PEdaily_Oudin(JD, Temp, LatRad) +} +\arguments{ +\item{JD}{[numeric] time series of julian day [-]} + +\item{Temp}{[numeric] time series of daily mean air temperature [degC]} + +\item{LatRad}{[numeric] latitude of measurement for the temperature series [rad]} +} +\value{ +[numeric] time series of daily potential evapotranspiration [mm/d] +} +\description{ +Function which computes daily PE using the formula from Oudin et al. (2005). +} +\examples{ +require(airGR) + data(L0123001) + PotEvap <- PEdaily_Oudin(JD=as.POSIXlt(BasinObs$DatesR)$yday,Temp=BasinObs$T,LatRad=0.8) +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Oudin, L., F. Hervieu, C. Michel, C. Perrin, V. Andréassian, F. Anctil and C. Loumagne (2005), + Which potential evapotranspiration input for a lumped rainfall-runoff model?: Part 2-Towards a + simple and efficient potential evapotranspiration model for rainfall-runoff modelling, Journal of Hydrology, + 303(1-4), 290-306, doi:10.1016/j.jhydrol.2004.08.026. +} + diff --git a/man/RunModel.Rd b/man/RunModel.Rd new file mode 100644 index 00000000..cd7a4af6 --- /dev/null +++ b/man/RunModel.Rd @@ -0,0 +1,61 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel} +\alias{RunModel} +\title{Run with the provided hydrological model function} +\usage{ +RunModel(InputsModel, RunOptions, Param, FUN_MOD) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of model parameters} + +\item{FUN_MOD}{[function] hydrological model function (e.g. RunModel_GR4J, RunModel_CemaNeigeGR4J)} +} +\value{ +[list] see \code{\link{RunModel_GR4J}} or \code{\link{RunModel_CemaNeigeGR4J}} for details +} +\description{ +Function which performs a single model run with the provided function. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{RunModel_GR4J}}, \code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_CemaNeige.Rd b/man/RunModel_CemaNeige.Rd new file mode 100644 index 00000000..8191c8f6 --- /dev/null +++ b/man/RunModel_CemaNeige.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_CemaNeige} +\alias{RunModel_CemaNeige} +\title{Run with the CemaNeige snow module} +\usage{ +RunModel_CemaNeige(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 2 parameters +\tabular{ll}{ +CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr + \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run: CemaNeige states [mm & degC] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for RunModel_CemaNeige. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeige,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeige,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(0.962,2.249) +OutputsModel <- RunModel_CemaNeige(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel) + +} +\author{ +Laurent Coron (January 2014) +} +\references{ +Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? + Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? + Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +} +\seealso{ +\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_CemaNeigeGR4J.Rd b/man/RunModel_CemaNeigeGR4J.Rd new file mode 100644 index 00000000..6ad6de2b --- /dev/null +++ b/man/RunModel_CemaNeigeGR4J.Rd @@ -0,0 +1,112 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_CemaNeigeGR4J} +\alias{RunModel_CemaNeigeGR4J} +\title{Run with the CemaNeigeGR4J hydrological model} +\usage{ +RunModel_CemaNeigeGR4J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 6 parameters +\tabular{ll}{ +GR4J X1 \tab production store capacity [mm] \cr +GR4J X2 \tab intercatchment exchange coefficient [mm/d] \cr +GR4J X3 \tab routing store capacity [mm] \cr +GR4J X4 \tab unit hydrograph time constant [d] \cr +CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr + \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for RunModel_CemaNeigeGR4J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(408.774,2.646,131.264,1.174,0.962,2.249) +OutputsModel <- RunModel_CemaNeigeGR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Perrin, C., C. Michel and V. Andréassian (2003), + Improvement of a parsimonious model for streamflow simulation, + Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? + Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? + Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +} +\seealso{ +\code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR4J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_CemaNeigeGR5J.Rd b/man/RunModel_CemaNeigeGR5J.Rd new file mode 100644 index 00000000..3048e77e --- /dev/null +++ b/man/RunModel_CemaNeigeGR5J.Rd @@ -0,0 +1,115 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_CemaNeigeGR5J} +\alias{RunModel_CemaNeigeGR5J} +\title{Run with the CemaNeigeGR5J hydrological model} +\usage{ +RunModel_CemaNeigeGR5J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 7 parameters +\tabular{ll}{ +GR5J X1 \tab production store capacity [mm] \cr +GR5J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +GR5J X3 \tab routing store capacity [mm] \cr +GR5J X4 \tab unit hydrograph time constant [d] \cr +GR5J X5 \tab intercatchment exchange coefficient 2 [-] \cr +CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr + \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for RunModel_CemaNeigeGR5J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR5J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR5J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(179.139,-0.100,203.815,1.174,2.478,0.977,2.774) +OutputsModel <- RunModel_CemaNeigeGR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances + et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr + Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), + A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, + Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? + Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? + Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +} +\seealso{ +\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR6J}}, \code{\link{RunModel_GR5J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_CemaNeigeGR6J.Rd b/man/RunModel_CemaNeigeGR6J.Rd new file mode 100644 index 00000000..57dfe775 --- /dev/null +++ b/man/RunModel_CemaNeigeGR6J.Rd @@ -0,0 +1,83 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_CemaNeigeGR6J} +\alias{RunModel_CemaNeigeGR6J} +\title{Run with the CemaNeigeGR6J hydrological model} +\usage{ +RunModel_CemaNeigeGR6J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 8 parameters +\tabular{ll}{ +GR6J X1 \tab production store capacity [mm] \cr +GR6J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +GR6J X3 \tab routing store capacity [mm] \cr +GR6J X4 \tab unit hydrograph time constant [d] \cr +GR6J X5 \tab intercatchment exchange coefficient 2 [-] \cr +GR6J X6 \tab coefficient for emptying exponential store [-] \cr +CemaNeige X1 \tab weighting coefficient for snow pack thermal state [-] \cr +CemaNeige X2 \tab degree-day melt coefficient [mm/degC/d] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QR1 } \tab [numeric] series of exponential store outflow (QR1) [mm/d] \cr + \emph{$Exp } \tab [numeric] series of exponential store level (X(6)) (negative) [mm] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$CemaNeigeLayers} \tab [list] list of CemaNeige outputs (1 list per layer) \cr + \emph{$CemaNeigeLayers[[iLayer]]$Pliq } \tab [numeric] series of liquid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Psol } \tab [numeric] series of solid precip. [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$SnowPack } \tab [numeric] series of snow pack [mm] \cr + \emph{$CemaNeigeLayers[[iLayer]]$ThermalState } \tab [numeric] series of snow pack thermal state [degC] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Gratio } \tab [numeric] series of Gratio [0-1] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PotMelt } \tab [numeric] series of potential snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$Melt } \tab [numeric] series of actual snow melt [mm/d] \cr + \emph{$CemaNeigeLayers[[iLayer]]$PliqAndMelt } \tab [numeric] series of liquid precip. + actual snow melt [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run: \cr\tab res. & HU levels [mm], CemaNeige states [mm & degC] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for RunModel_CemaNeigeGR6J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), + A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, + Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": what is useful in a temperature-based snow-accounting routine? + Part 1 - Comparison of six snow accounting routines on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.059. \cr + Valéry, A., V. Andréassian and C. Perrin (2014), + "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? + Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. +} +\seealso{ +\code{\link{RunModel_CemaNeigeGR4J}}, \code{\link{RunModel_CemaNeigeGR5J}}, \code{\link{RunModel_GR6J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_GR4J.Rd b/man/RunModel_GR4J.Rd new file mode 100644 index 00000000..db4f1c4a --- /dev/null +++ b/man/RunModel_GR4J.Rd @@ -0,0 +1,92 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_GR4J} +\alias{RunModel_GR4J} +\title{Run with the GR4J hydrological model} +\usage{ +RunModel_GR4J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 4 parameters +\tabular{ll}{ +GR4J X1 \tab production store capacity [mm] \cr +GR4J X2 \tab intercatchment exchange coefficient [mm/d] \cr +GR4J X3 \tab routing store capacity [mm] \cr +GR4J X4 \tab unit hydrograph time constant [d] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for GR4J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +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="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Perrin, C., C. Michel and V. Andréassian (2003), + Improvement of a parsimonious model for streamflow simulation, + Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. +} +\seealso{ +\code{\link{RunModel_GR5J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR4J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_GR5J.Rd b/man/RunModel_GR5J.Rd new file mode 100644 index 00000000..4d7a911f --- /dev/null +++ b/man/RunModel_GR5J.Rd @@ -0,0 +1,95 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_GR5J} +\alias{RunModel_GR5J} +\title{Run with the GR5J hydrological model} +\usage{ +RunModel_GR5J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 5 parameters +\tabular{ll}{ +GR5J X1 \tab production store capacity [mm] \cr +GR5J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +GR5J X3 \tab routing store capacity [mm] \cr +GR5J X4 \tab unit hydrograph time constant [d] \cr +GR5J X5 \tab intercatchment exchange coefficient 2 [-] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for GR5J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR5J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR5J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(839.661,-0.100,103.153,1.939,-0.428) +OutputsModel <- RunModel_GR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances + et du réalisme des modèles pluie-débit ?, PhD thesis (french), UPMC, Paris, France. \cr + Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet, and V. Andréassian (2011), + A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, + Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +} +\seealso{ +\code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR6J}}, \code{\link{RunModel_CemaNeigeGR5J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/RunModel_GR6J.Rd b/man/RunModel_GR6J.Rd new file mode 100644 index 00000000..6d95ee89 --- /dev/null +++ b/man/RunModel_GR6J.Rd @@ -0,0 +1,96 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{RunModel_GR6J} +\alias{RunModel_GR6J} +\title{Run with the GR6J hydrological model} +\usage{ +RunModel_GR6J(InputsModel, RunOptions, Param) +} +\arguments{ +\item{InputsModel}{[object of class \emph{InputsModel}] see \code{\link{CreateInputsModel}} for details} + +\item{RunOptions}{[object of class \emph{RunOptions}] see \code{\link{CreateRunOptions}} for details} + +\item{Param}{[numeric] vector of 6 parameters +\tabular{ll}{ +GR6J X1 \tab production store capacity [mm] \cr +GR6J X2 \tab intercatchment exchange coefficient 1 [mm/d] \cr +GR6J X3 \tab routing store capacity [mm] \cr +GR6J X4 \tab unit hydrograph time constant [d] \cr +GR6J X5 \tab intercatchment exchange coefficient 2 [-] \cr +GR6J X6 \tab coefficient for emptying exponential store [-] \cr +}} +} +\value{ +[list] list containing the function outputs organised as follows: + \tabular{ll}{ + \emph{$DatesR } \tab [POSIXlt] series of dates \cr + \emph{$PotEvap } \tab [numeric] series of input potential evapotranspiration [mm/d] \cr + \emph{$Precip } \tab [numeric] series of input total precipitation [mm/d] \cr + \emph{$Prod } \tab [numeric] series of production store level (X(2)) [mm] \cr + \emph{$AE } \tab [numeric] series of actual evapotranspiration [mm/d] \cr + \emph{$Perc } \tab [numeric] series of percolation (PERC) [mm/d] \cr + \emph{$PR } \tab [numeric] series of PR=PN-PS+PERC [mm/d] \cr + \emph{$Q9 } \tab [numeric] series of HU1 outflow (Q9) [mm/d] \cr + \emph{$Q1 } \tab [numeric] series of HU2 outflow (Q1) [mm/d] \cr + \emph{$Rout } \tab [numeric] series of routing store level (X(1)) [mm] \cr + \emph{$Exch } \tab [numeric] series of potential semi-exchange between catchments [mm/d] \cr + \emph{$AExch } \tab [numeric] series of actual exchange between catchments (1+2) [mm/d] \cr + \emph{$QR } \tab [numeric] series of routing store outflow (QR) [mm/d] \cr + \emph{$QR1 } \tab [numeric] series of exponential store outflow (QR1) [mm/d] \cr + \emph{$Exp } \tab [numeric] series of exponential store level (X(6)) (negative) [mm] \cr + \emph{$QD } \tab [numeric] series of direct flow from HU2 after exchange (QD) [mm/d] \cr + \emph{$Qsim } \tab [numeric] series of Qsim [mm/d] \cr + \emph{$StateEnd} \tab [numeric] states at the end of the run (res. levels, HU1 levels, HU2 levels) [mm] \cr + } + (refer to the provided references or to the package source code for further details on these model outputs) +} +\description{ +Function which performs a single model run for GR6J. +} +\details{ +For further details on the argument structures and initialisation options, see \code{\link{CreateRunOptions}}. +} +\examples{ +## load of catchment data +require(airGR) +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR6J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="\%d/\%m/\%Y \%H:\%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR6J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(347.000,-0.500,65.677,1.957,0.324,34.115) +OutputsModel <- RunModel_GR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\\n",sep="")) + +} +\author{ +Laurent Coron (December 2013) +} +\references{ +Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), + A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, + Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +} +\seealso{ +\code{\link{RunModel_GR4J}}, \code{\link{RunModel_GR5J}}, \code{\link{RunModel_CemaNeigeGR6J}}, + \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}. +} + diff --git a/man/TransfoParam.Rd b/man/TransfoParam.Rd new file mode 100644 index 00000000..a23d4b9c --- /dev/null +++ b/man/TransfoParam.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{TransfoParam} +\alias{TransfoParam} +\title{Transformation of the parameters using the provided function} +\usage{ +TransfoParam(ParamIn, Direction, FUN_TRANSFO) +} +\arguments{ +\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)} + +\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real} + +\item{FUN_TRANSFO}{[function] model parameters transformation function (e.g. TransfoParam_GR4J, TransfoParam_CemaNeigeGR4J)} +} +\value{ +\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +} +\description{ +Function which transforms model parameters (from real to transformed parameters and vice versa) using the provided function. +} +\examples{ +require(airGR) + +## transformation Real->Transformed for the GR4J model + Xreal <- matrix( c( 221.41, -3.63, 30.00, 1.37, + 347.23, -1.03, 60.34, 1.76, + 854.06, -0.10, 148.41, 2.34), + ncol=4,byrow=TRUE) + Xtran <- TransfoParam(ParamIn=Xreal,Direction="RT",FUN_TRANSFO=TransfoParam_GR4J) + +## transformation Transformed->Real for the GR4J model + Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10, + +3.90, -0.90, +4.10, -8.70, + +4.50, -0.10, +5.00, -8.10), + ncol=4,byrow=TRUE) + Xreal <- TransfoParam(ParamIn=Xtran,Direction="TR",FUN_TRANSFO=TransfoParam_GR4J) +} +\author{ +Laurent Coron (June 2014) +} +\seealso{ +\code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +} + diff --git a/man/TransfoParam_CemaNeige.Rd b/man/TransfoParam_CemaNeige.Rd new file mode 100644 index 00000000..0a34e224 --- /dev/null +++ b/man/TransfoParam_CemaNeige.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{TransfoParam_CemaNeige} +\alias{TransfoParam_CemaNeige} +\title{Transformation of the parameters from the CemaNeige module} +\usage{ +TransfoParam_CemaNeige(ParamIn, Direction) +} +\arguments{ +\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)} + +\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real} +} +\value{ +\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +} +\description{ +Function which transforms model parameters (from real to transformed parameters and vice versa). +} +\examples{ +require(airGR) + +## transformation Real->Transformed for the CemaNeige module + Xreal <- matrix( c( 0.19, 1.73, + 0.39, 2.51, + 0.74, 4.06), + ncol=2,byrow=TRUE) + Xtran <- TransfoParam_CemaNeige(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the CemaNeige module + Xtran <- matrix( c( -6.26, +0.55, + -2.13, +0.92, + +4.86, +1.40) + ,ncol=2,byrow=TRUE) + Xreal <- TransfoParam_CemaNeige(ParamIn=Xtran,Direction="TR") +} +\author{ +Laurent Coron (December 2013) +} +\seealso{ +\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}} +} + diff --git a/man/TransfoParam_GR4J.Rd b/man/TransfoParam_GR4J.Rd new file mode 100644 index 00000000..bafd6e24 --- /dev/null +++ b/man/TransfoParam_GR4J.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{TransfoParam_GR4J} +\alias{TransfoParam_GR4J} +\title{Transformation of the parameters from the GR4J model} +\usage{ +TransfoParam_GR4J(ParamIn, Direction) +} +\arguments{ +\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)} + +\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real} +} +\value{ +\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +} +\description{ +Function which transforms model parameters (from real to transformed parameters and vice versa). +} +\examples{ +require(airGR) + +## transformation Real->Transformed for the GR4J model + Xreal <- matrix( c( 221.41, -3.63, 30.00, 1.37, + 347.23, -1.03, 60.34, 1.76, + 854.06, -0.10, 148.41, 2.34), + ncol=4,byrow=TRUE) + Xtran <- TransfoParam_GR4J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR4J model + Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10, + +3.90, -0.90, +4.10, -8.70, + +4.50, -0.10, +5.00, -8.10), + ncol=4,byrow=TRUE) + Xreal <- TransfoParam_GR4J(ParamIn=Xtran,Direction="TR") +} +\author{ +Laurent Coron (December 2013) +} +\seealso{ +\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +} + diff --git a/man/TransfoParam_GR5J.Rd b/man/TransfoParam_GR5J.Rd new file mode 100644 index 00000000..61a273dc --- /dev/null +++ b/man/TransfoParam_GR5J.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{TransfoParam_GR5J} +\alias{TransfoParam_GR5J} +\title{Transformation of the parameters from the GR5J model} +\usage{ +TransfoParam_GR5J(ParamIn, Direction) +} +\arguments{ +\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)} + +\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real} +} +\value{ +\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +} +\description{ +Function which transforms model parameters (from real to transformed parameters and vice versa). +} +\examples{ +require(airGR) + +## transformation Real->Transformed for the GR5J model + Xreal <- matrix( c( 221.41, -2.65, 27.11, 1.37, -0.76, + 347.23, -0.64, 60.34, 1.76, 0.30, + 854.01, -0.10, 148.41, 2.34, 0.52), + ncol=5,byrow=TRUE) + Xtran <- TransfoParam_GR5J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR5J model + Xtran <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70, + +3.90, -0.60, +4.10, -8.70, +0.30, + +4.50, -0.10, +5.00, -8.10, +0.50), + ncol=5,byrow=TRUE) + Xreal <- TransfoParam_GR5J(ParamIn=Xtran,Direction="TR") +} +\author{ +Laurent Coron (December 2013) +} +\seealso{ +\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR6J}}, \code{\link{TransfoParam_CemaNeige}} +} + diff --git a/man/TransfoParam_GR6J.Rd b/man/TransfoParam_GR6J.Rd new file mode 100644 index 00000000..84faccba --- /dev/null +++ b/man/TransfoParam_GR6J.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{TransfoParam_GR6J} +\alias{TransfoParam_GR6J} +\title{Transformation of the parameters from the GR6J model} +\usage{ +TransfoParam_GR6J(ParamIn, Direction) +} +\arguments{ +\item{ParamIn}{[numeric] matrix of parameter sets (sets in line, parameter values in column)} + +\item{Direction}{[character] direction of the transformation: use "RT" for Real->Transformed and "TR" for Transformed->Real} +} +\value{ +\emph{ParamOut} [numeric] matrix of parameter sets (sets in line, parameter values in column) +} +\description{ +Function which transforms model parameters (from real to transformed parameters and vice versa). +} +\examples{ +require(airGR) + +## transformation Real->Transformed for the GR6J model + Xreal <- matrix( c( 221.41, -1.18, 27.11, 1.37, -0.18, 20.09, + 347.23, -0.52, 60.34, 1.76, 0.02, 54.60, + 854.06, 0.52, 148.41, 2.34, 0.22, 148.41), + ncol=6,byrow=TRUE) + Xtran <- TransfoParam_GR6J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR6J model + Xtran <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00, + +3.90, -0.50, +4.10, -8.70, +0.10, +4.00, + +4.50, +0.50, +5.00, -8.10, +1.10, +5.00), + ncol=6,byrow=TRUE) + Xreal <- TransfoParam_GR6J(ParamIn=Xtran,Direction="TR") +} +\author{ +Laurent Coron (December 2013) +} +\seealso{ +\code{\link{TransfoParam}}, \code{\link{TransfoParam_GR4J}}, \code{\link{TransfoParam_GR5J}}, \code{\link{TransfoParam_CemaNeige}} +} + diff --git a/man/airGR.Rd b/man/airGR.Rd new file mode 100644 index 00000000..25802ba9 --- /dev/null +++ b/man/airGR.Rd @@ -0,0 +1,53 @@ +\name{airGR} +\alias{airGR} +\docType{package} +\encoding{UTF-8} +\title{Modelling tools used at Irstea-HBAN (France), including GR4J, GR5J, GR6J and CemaNeige} +\description{ +This package brings into R the hydrological modelling tools used at Irstea-HBAN (France), including GR4J, GR5J, GR6J and CemaNeige. Each model core is coded in FORTRAN to ensure low computational time. The other package functions (i.e. mainly the calibration algorithm and the efficiency criteria) are coded in R. \cr + +##### Functions and objects ##### + +The airGR package has been designed to fulfil two major requirements: facilitate the use by non-expert users and allow flexibility regarding the addition of external criteria, models or calibration algorithms. The names of the functions and their arguments were chosen to this end. + +The package is mostly based on three families of functions: \cr +- the functions belonging to the \code{\link{RunModel}} family require three arguments: \emph{InputsModel}, \emph{RunOptions} and \emph{Param}; please refer to help pages \code{\link{CreateInputsModel}} and \code{\link{CreateRunOptions}} for further details and examples; \cr +- the functions belonging to the \code{\link{ErrorCrit}} family require two arguments: \emph{InputsCrit} and \emph{OutputsModel}; please refer to help pages \code{\link{CreateInputsCrit}} and \code{\link{RunModel}} for further details and examples; \cr +- the functions belonging to the \code{\link{Calibration}} family require four arguments: \emph{InputsModel}, \emph{RunOptions}, \emph{InputsCrit} and \emph{CalibOptions}; please refer to help pages \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}} and \code{\link{CreateCalibOptions}} for further details and examples. + +In order to limit the risk of misuse and increase the flexibility of these main functions, we imposed the structure of their arguments and defined their class. Most users will not need to worry about these imposed structures since functions are provided to prepare these arguments for them: \code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. However, advanced users wishing to supplement the package with their own models will need to comply with these imposed structures and refer to the package source codes to get all the specification requirements. \cr + +##### Models ##### + +Three hydrological models and one snow melt and accumulation module are implemented in airGR. The snow module can also be used alone and each hydrological model can either be used alone or together with the snow module. \cr +These models can be called within airGR using the following functions: \cr +- \code{\link{RunModel_GR4J}}: the four-parameter lumped conceptual model (Perrin et al., 2003) \cr +- \code{\link{RunModel_GR5J}}: the five-parameter lumped conceptual model (Le Moine, 2008) \cr +- \code{\link{RunModel_GR6J}}: the six-parameter lumped conceptual model (Pushpalatha, 2013) \cr +- \code{\link{RunModel_CemaNeige}}: the two-parameter degree-day snow melt and accumulation module (Valéry et al., 2014) \cr +- \code{\link{RunModel_CemaNeigeGR4J}}: combined use of GR4J and CemaNeige \cr +- \code{\link{RunModel_CemaNeigeGR5J}}: combined use of GR5J and CemaNeige \cr +- \code{\link{RunModel_CemaNeigeGR6J}}: combined use of GR6J and CemaNeige + +\emph{References:} \cr +Perrin, C., C. Michel and V. Andréassian (2003), Improvement of a parsimonious model for streamflow simulation, Journal of Hydrology, 279(1-4), 275-289, doi:10.1016/S0022-1694(03)00225-7. \cr +Le Moine, N. (2008), Le bassin versant de surface vu par le souterrain : une voie d'amélioration des performances et du réalisme des modèles pluie-débit ?, PhD thesis (in French), UPMC, Paris, France. \cr +Pushpalatha, R., C. Perrin, N. Le Moine, T. Mathevet and V. Andréassian (2011), A downward structural sensitivity analysis of hydrological models to improve low-flow simulation, Journal of Hydrology, 411(1-2), 66-76, doi:10.1016/j.jhydrol.2011.09.034. \cr +Valéry, A., V. Andréassian and C. Perrin (2014), "As simple as possible but not simpler": What is useful in a temperature-based snow-accounting routine? Part 2 - Sensitivity analysis of the Cemaneige snow accounting routine on 380 catchments, Journal of Hydrology, doi:10.1016/j.jhydrol.2014.04.058. \cr +} + +\details{ +\tabular{ll}{ +Package: \tab airGR\cr +Type: \tab Package\cr +Version: \tab 0.7.4\cr +Date: \tab 2014-11-01\cr +License: \tab GPL-2\cr +} +} +\author{ +Author: Laurent CORON \cr +Maintainer: Laurent CORON <laurent.coron@irstea.fr>, Olivier DELAIGUE <olivier.delaigue@irstea.fr> +} + +\keyword{package, hydrology, modelling} diff --git a/man/plot_OutputsModel.Rd b/man/plot_OutputsModel.Rd new file mode 100644 index 00000000..fa219705 --- /dev/null +++ b/man/plot_OutputsModel.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2 (4.0.1): do not edit by hand +\encoding{UTF-8} +\name{plot_OutputsModel} +\alias{plot_OutputsModel} +\title{Default preview of model outputs} +\usage{ +plot_OutputsModel(OutputsModel, Qobs = NULL, IndPeriod_Plot = NULL, + BasinArea = NULL, quiet = FALSE) +} +\arguments{ +\item{OutputsModel}{[object of class \emph{OutputsModel}] list of model outputs (which must at least include DatesR, Precip and Qsim) [POSIXlt, mm, mm]} + +\item{Qobs}{(optional) [numeric] time series of observed flow (for the same time-steps than simulated) [mm]} + +\item{IndPeriod_Plot}{(optional) [numeric] indices of the time-steps to be plotted (among the OutputsModel series)} + +\item{BasinArea}{(optional) [numeric] basin area [km2], used to plot flow axes in m3/s} + +\item{quiet}{(optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE} +} +\value{ +screen plot window +} +\description{ +Function which creates a screen plot giving an overview of the model outputs +} +\details{ +Dashboard of results including various graphs (depending on the model): +(1) time series of total precipitation and simulated flows (and observed flows if provided) +(2) interannual median monthly simulated flow (and observed flows if provided) +(3) correlation plot between simulated and observed flows (if observed flows provided) +(4) cumulative frequency plot for simulated flows (and observed flows if provided) +} +\author{ +Laurent Coron (June 2014) +} + diff --git a/src-i386/airGR.dll b/src-i386/airGR.dll new file mode 100644 index 0000000000000000000000000000000000000000..088dfd4622dcf6e4806433dd2f736867c047c589 GIT binary patch literal 24064 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 THlXA=lh&j+B~r;h<>&tZ4~A@H literal 0 HcmV?d00001 diff --git a/src-i386/frun_CEMANEIGE.f b/src-i386/frun_CEMANEIGE.f new file mode 100644 index 00000000..fddc6a5f --- /dev/null +++ b/src-i386/frun_CEMANEIGE.f @@ -0,0 +1,128 @@ + + + SUBROUTINE frun_CEMANEIGE( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsFracSolidPrecip, ! [double] input series of fraction of solid precipitation [0-1] + & InputsTemp , ! [double] input series of air mean temperature [degC] + & MeanAnSolidPrecip , ! [double] value of annual mean solid precip [mm/y] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising = 2 + & StateStart , ! [double] state variables used when the model run starts + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, intent(in) :: MeanAnSolidPrecip + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip + doubleprecision, dimension(LInputs) :: InputsTemp + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + doubleprecision CTG,Kf + doubleprecision G,eTG,PliqAndMelt + doubleprecision Tmelt,Gthreshold,MinSpeed + doubleprecision Pliq,Psol,Gratio,PotMelt,Melt + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation des constantes + Tmelt=0 + Gthreshold=0.9*MeanAnSolidPrecip + MinSpeed=0.1 + + !initilisation of model states using StateStart + G=StateStart(1) + eTG=StateStart(2) + PliqAndMelt=0 + + !setting parameter values + CTG=Param(1) + Kf=Param(2) + + !initialisation of model outputs +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + + !SolidPrecip and LiquidPrecip + Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k) + Psol=InputsFracSolidPrecip(k)*InputsPrecip(k) + + !Snow pack volume before melt + G=G+Psol + + !Snow pack thermal state before melt + eTG=CTG*eTG + (1-CTG)*InputsTemp(k) + IF(eTG.GT.0) eTG=0 + + !Potential melt + IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN + PotMelt=Kf*(InputsTemp(k)-Tmelt) + IF(PotMelt.GT.G) PotMelt=G + ELSE + PotMelt=0 + ENDIF + + !Gratio + IF(G.LT.Gthreshold) THEN + Gratio=G/Gthreshold + ELSE + Gratio=1 + ENDIF + + !Actual melt + Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt + + !Update of snow pack volume + G=G-Melt + + !Water volume to pass to the hydrological model + PliqAndMelt=Pliq+Melt + + !Storage of outputs + DO I=1,NOutputs + IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq + IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol + IF(IndOutputs(I).EQ.3) Outputs(k,I)=G + IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG + IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio + IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt + IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt + IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt + ENDDO + + ENDDO + + StateEnd(1)=G + StateEnd(2)=eTG + + RETURN + + ENDSUBROUTINE + diff --git a/src-i386/frun_CEMANEIGE.o b/src-i386/frun_CEMANEIGE.o new file mode 100644 index 0000000000000000000000000000000000000000..773e3315ef336b3afad3316ed3670e26e39cec94 GIT binary patch literal 1095 zcmZ`&%}*0S6rb$}t_IvaV1kK<nv8lOja*2K8fsWXOfe+lH&Rf#NJK)QB_511Sy$3* zYPjji|G{Xy;GvX{WJ{rum^ec_J*d%c7CCr88YA`17O|kbW@p~}{odES<^=^0;&R=M zP_?6Z1b-xaKjP@+W7vhzYfw*t4;Oy<P)CoyuQ$@`AiEy{bUfj|H9ESxN11uV{YJJY ztOE*f*8CG6K!L!eE0-^7EA@tg1Juh2qYL*K5q#B<8xqC?d`DlB+LHQGZ0g6mSP;ub z5O?JEvO}1;S+mHhSQi%ASrIOu^z^&{@j={23zMKBreHB%Kg+XfNx`jPId8=}ajnq+ z?sYM+Z5K76^f{vwD-alD3R!2$@;WV$kHn;@yqTM(saz0hC=?i6N6dVZuF?dZ&)O_2 zjqis-j7UbibK5RP=qmHz>^JGjVSval<`tnnF^N~^cS>K&t<o7X^)L#BWhgu-khmw= zuw*yJBS(=|bV-k&^Nx#dNq+$f%`n*(X(s*#4E_+IaN>KUm1b;jd<@YAqxzXv6ryu< z0XQaeHfk}l`CEpDO#4V|E&lcxkKaL5v-~EKWkj16PIlp1N&mW0D%oCYLVlRaFgwVu ziP}v4jqcFRX}ZW{x=1tDNU2m(C$yp`+D+4dr2*>(j4f01?}WzuyaAY?FT0X`U!KhP z7s$_u(?75Uny@|tGQr=^qpeA>B>g3v(EBT`=#AFU6qHCoiJyRK#VSDN0htHHa*#cM zn1Gmod~gs^(&s<{EMv`rGQmYv)h0d%kaRk|(zK9HpXNpleEZ<5LZ7xYdrR}H1A}3( zxNMXV>KD|J=uoJ+rTxr>mbTUwzgp(X`-hN#e8>fV|4ymgMoznhyReVj*P?P0fdrqO nSrDq+LLU8JpNb9SeYu6&e-a%4B;-8hcKBZJP<Ws}974YVkPeC8 literal 0 HcmV?d00001 diff --git a/src-i386/frun_GR4J.f b/src-i386/frun_GR4J.f new file mode 100644 index 00000000..953e7647 --- /dev/null +++ b/src-i386/frun_GR4J.f @@ -0,0 +1,225 @@ + + + SUBROUTINE frun_GR4J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR4J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=4) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3))**3.5 + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src-i386/frun_GR4J.o b/src-i386/frun_GR4J.o new file mode 100644 index 0000000000000000000000000000000000000000..05b65ec95e67158a51d4b9da0364609149cd0174 GIT binary patch literal 2505 zcmZ`*U1$_n6uy%m9Wm*SHb~m0bSW1biVYjdL!^~%VPj)S+t5ZUZR$jcaa*h|F|iSX z#_lG%Y_|BYv@gMjJ_)hVLTC+yvTI^B8z1~BWo~xvngk!Ru?_w}jkLJ^&Yfh85(nm< zZ_fG7x#!$_=FT)|MU1X)ow0Qa6=_u+`?@+5c7~r;F*XF)zuI{&hw!q-ma5i09eW(r zGe<x3C9C!xKKx9=qM?U)?N0`*gspXP&Lw}u^Y8d%=f@}h8i6Wyj$0%m+$NFWQzVA? zRR~$fB$EZQiFd^Y_#e<@a<LIU3*h-?6k~SUx+@d>ETAaHz(i7{Z_Y_^WQ`n9>e~g< zlH2sSLy87?i%3SxxOFeu#9OU5XyvlwvY8vWeH56*V2}ZBKpo&d`<M>8n6;+`(Sm9u zvezLapxwZOpn9_@<#rb-C-^Bu!n`7#ne&_+EM&}1Dc7!SPVUsjJjKfWNF>W{<y|6a z-CMB`&&j=Te!2#vU&d7hmz~tC2?R7m8l#Vr!|i`&H82Ko8&6l@cPl_O)-=)VZ939L zMFXlLF`vmzUXwx;>y&yk*F|v&ko`Wh9?A;tMis@z5@A+Vu58Yl4L?sNOd*ol8Co(s zZOzEtI$+ScfXxnCrDYBUh&olI?YeR?!p{JEevK$ORMHlW@By-(QzFyMLx98yck|Ht z<E60x5B;q5COscE@KAiGKb+FeYcR);Fc}%G2Mi}QYuql7pDu(i=vyv#&f2kAsE1zz zi@ddDcwwVFL%n!>wG--c{JSYUy0L~f;)&vs;|lRAY5UF?1sGS!Iztp!5S>;oh2E{; zE9{x9)6sm}YOxd{wN5E3WsQpYn>jrBaQi)duVOYaA*Qmo!~`~{hk|aP?GfXdYmc|b zzK8gj#Ay%eV4rG3YLG^?|10m5(>yd)b{b=&J&u0ZAp7W5#j}CrsoT9yN}fLIWHBnH zkjiO-^CFEm`W9ejZt^<1`;wT*+@8E4Gswq)X$mH^)hjaMyeg)Sw?&!;f_6!>97&p9 z;Gi@sAwtshp$4;-2ER1x;nsr)c0^4l%|?VZcS*BFn!yuebgq21+x&b~+Hz8);gnEx zEZDe6=Waa8=fO`nsit!u<nwtXeimN2#DBnIF)MUqGw;f6hwgUi>E+js>ZCfsHmyOU z3~)b*1m8tshzCim?H!M%JlogC2l#oMGSQpS243^v8phh;KQYt&!FU6&$7AJi1@<!5 z%`5K@{-nhh`zdf?K{k&rprOJGTRZRIlx#%Q_y}hZqS%WF@c{h0xsKFH8NOH^E#lDw zyh!b9yvebW0*8g8i*Q3HcMf;dUrr%^0cO$&C-p50oe!jiI#fC9d#~e!@p-<@z>Y() zw)*dA2Y)MuGH?dBkZaRA4U}5EPjCv5re94EkEqbHXb$>%=#ip9qG&Fj;5rcME{CfD zyQ&L*j<$qW1$0FU@G_8ekc*-feD>1Ad>#(XV8%B0{&TDbS=Hb*t&R2bRwz?5h1x6} zHpR<Q)yY`NNvxiXT+vaoe6bMvEq6L|;fvav2T)e;cI<i#1*s!J21c>ozq{*wVvKfH z^^n?j#v0$jGWZ$m!EKQIt*x!??W<R=Y-Owk&tCtX{L!%{#@JfitJo<QeGgQMyNr#w z=w)oV!`lbsSo>U*a;+0CvVopcQD$7-f~)i5d~xEv?xKHP^a9Qx$F~K@;q|$?epmN{ ztMlV)>hN|0dDOh^Ky<2?vE#0_s_lyd`=F!iQJ%5=T3dVPLG#^@YTm1AbJS|Y8=x+Y zd07FnUg@G)k{~J$TmA<_4u#qv{$c2A@c3H(_kv=<d2Cxk%l}+Z-pZV1e=U@0p;o!% z?n<*`&%xl)km)E;1v5j3zIM%27c+yM)r$le7B!on)Vu_X`PHFTbANlymnJjSdO7%i D{jCl+ literal 0 HcmV?d00001 diff --git a/src-i386/frun_GR5J.f b/src-i386/frun_GR5J.f new file mode 100644 index 00000000..4b7b7351 --- /dev/null +++ b/src-i386/frun_GR5J.f @@ -0,0 +1,226 @@ + + + SUBROUTINE frun_GR5J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR5J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=5) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src-i386/frun_GR5J.o b/src-i386/frun_GR5J.o new file mode 100644 index 0000000000000000000000000000000000000000..10e47297174b2af019c51aaa402f720fa8c9e1e1 GIT binary patch literal 2433 zcmZ`*U2GIp6u#3R7(#Ie+>l0V+=m-%3^pw(Nr@6yvtThr8ZC%gnPS>yH3%E%Vu=Kb zyDe;%H9R!>((p`zCYm%#lSX&jqIBB_z@N-z=k_l?bc;6pB(fxi^*eXkX(45jx#yd6 zzH{z5_uRQN4O$7Kt5#=htwJSQReM`UyTZ=Uxq`7iz`ZM-=k*Xi*4R?jy1#wDqk7`# zXVs~ykB%OFB4OUpNxUPE2IR2S&d<5vk9hvw@9uf$^xp$eCBESni5Ry@^zca%ef%1P z+{Pr6MY4%^BzpPp&}4Io0X_rZ`C<s;_>^@=_V9~<q7(xYDUq3&mEzbc*{jsIilimC z>q&<c5AYU|ihH?rH{Qfst(R!!#z$l`H*i-|V3vSE2DkxrfLGfmb<o9(Jtc@1QX`Rl z4jBRM1|9;{H=b5*caU-qKZ{71S7frYo--$l8MD*MwPQRd_vm7dV&%Ril4ZB@4w16% zE?bD_%w{-0UIWtia#g`qCpBvn0S%GCSWU^{ZhT@jFotj&k5|y>R)A`(DWciib)<`m zdR0YYE}Oe~T?$dEQ|irJ7o}xD_D*I!kQLmGDoTw7!i=h1*_<`&f0|5~LZrs0Y02!2 zH7)n)fFWxT%??>>ybcAZ97tsBZRKKsUjX*}7*n#ZEEtdRUb23pM7EiS0f`em!NcoL ztw{uU_<OA@<=NH1!^u7VXj;3h!JItCWNfG&Fq+b=5xYpfpN|geTdqcC?8FSz{V#w; z-dZY}-ykp0UOctZ33WC3)g&I>SbZDtMDfURnRu1dz6(YX#uaj#A=1_zyUl0s)aCX% z)EY+Thpj;|H<9yn`w&8miOKOPtam5EqM_?)&BaLe`r?|~ccHJ~s@sqD+^<@?{Ng+N z0gK#-@B!|(N6_N+vYXyM>H;#O4eXo9VXXFa)8-UIViKvGCpafEcuD^P%+B7tfwX@W zquE<Gf0J1xV!$*B6L!k;GUn`l6D8`>G!U*sn&sI3rVltI%}R){G^@p^H0x;aOS2ws zorqw^)O6BpL|AjLG+U$@Iz3EB#RvP$4~L{JEioc82-l+=2<HBHSSWzs<D{C&y;Ud_ zkoZM-<<kEFi}|du!J2tT?ih5*A7Ew4pK07(lTs(r##Ly1FZYw^;d@E+@eqmCT_f?d zXUFPfFTadaBR&yt;I;R!W321{6A|uRN;dF%JXZEsppA(Wyz<_q@3iFn{s;`_W%E!T z8zh?F8o7;AuMts`1DrvK(hABX0RIzQN8Y52UMY{4@c2PqqMDj)a;&7l%kSu7+|bG0 z2X_=-P9arQ(uk(?E&0fOX`v2P&bqD}I5Da{UuHqZAy-%PPrRMKl0X?aQ(MTjX{`oI z9o`Q(1xRyFO^}SK(6VF}`g-V*qCui$Hrc~<Ak<wBR|9rc7yKM;8LbNFiWJ~pkaUns z;uU=6{)0jR4$WXDHg)}bvKCp@;<c+woa3!frl*Uw88~cAdeb$jMA;dvo{Wv@C|N#J z4E>hdkzDkO_VPiL)wKgHPoN<6ip#(d*83NCy-yEQXVnHePZwj2uVESdjCJBRNd6QI z24B54HntUCM*r=?@!=*AR^wj5&bsJppf$L?Y}iH5q1_Iz4al)}yD05iM_ptCJ*A>d zySluq^Wm&;;=Sl1`Up6>_kbK<)73>>oq?~Q!>a=Fs5xE-qSM&Rb}d?iA0KRkj;@CV z#tvw~BauVq8*guZvnuGQ)rg(0E{*wE5i(rvqFK&^s5ortp9eV<YoFuagZ?)bucdz- zC=r}R+X7np$AR*e=Pdc#piGN3zToakvwi=e(DAV8C{P76!-qd}%~TgNLy?+!0u1w- ZO^<4xg~j~zaI1OX$mUN>W~%ja@c-#D^Bw>I literal 0 HcmV?d00001 diff --git a/src-i386/frun_GR6J.f b/src-i386/frun_GR6J.f new file mode 100644 index 00000000..9d7f9373 --- /dev/null +++ b/src-i386/frun_GR6J.f @@ -0,0 +1,249 @@ + + + SUBROUTINE frun_GR6J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + !Param(6) : time constant of exponential store (X6 - EXP) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR6J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=6) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1 + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + DATA C/0.4/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+(1-C)*X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Update of exponential store + X(6)=X(6)+C*X(8)+EXCH + AR=X(6)/Param(6) + IF(AR.GT.33.)AR=33. + IF(AR.LT.-33.)AR=-33. + + IF(AR.GT.7.)THEN + QR1=X(6)+Param(6)/EXP(AR) + GOTO 3 + ENDIF + + IF(AR.LT.-7.)THEN + QR1=Param(6)*EXP(AR) + GOTO 3 + ENDIF + + QR1=Param(6)*LOG(EXP(AR)+1.) + 3 CONTINUE + + X(6)=X(6)-QR1 + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD+QR1 + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QR1 ! QR1 ! outflow from exponential store (QR1) [mm/d] + MISC(14)=X(6) ! Exp ! exponential store level (X(6)) (negative) [mm] + MISC(15)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(16)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + ENDSUBROUTINE + + diff --git a/src-i386/frun_GR6J.o b/src-i386/frun_GR6J.o new file mode 100644 index 0000000000000000000000000000000000000000..96714b9073b4f265df1c3b32067ea7b28ce84516 GIT binary patch literal 2977 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 C#=33* literal 0 HcmV?d00001 diff --git a/src-i386/utils.f b/src-i386/utils.f new file mode 100644 index 00000000..2028bc71 --- /dev/null +++ b/src-i386/utils.f @@ -0,0 +1,272 @@ + + +C********************************************************************** + SUBROUTINE HU1(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS1 + INTEGER I + + DO I=1,NH + XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D) + ENDDO + ENDSUBROUTINE + + +C********************************************************************** + SUBROUTINE HU2(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS2 + INTEGER I + + DO I =1,2*NH + XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D) + ENDDO + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU4(XV,ALPHA,BETA) +C Computation of ordinates of MOHYSE unit hydrograph +C Inputs: +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH) + DOUBLEPRECISION ALPHA,BETA,SU + INTEGER K + + SU=0. +c IF(ALPHA.LT.1.)THEN +c WRITE(*,*)' Pb ALPHA' +c STOP +c ENDIF + IF(ALPHA.EQ.1.)THEN + U(1)=1. + SU=1. + DO 1 K=2,3*NH + U(K)=0. + 1 CONTINUE + ELSE + DO 11 K=1,3*NH + U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA) + SU=SU+U(K) + 11 CONTINUE + ENDIF + +c IF(SU.LT.0.0000000001)THEN +c WRITE(*,*)' Pb HU4',ALPHA, BETA +c STOP +c ENDIF + DO 2 K=1,3*NH + XV(3*NPX+K)=U(K)/SU + 2 CONTINUE + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU(XV,C) +C Computation of ordinates of GRP unit hydrograph +C Inputs: +C C: time constant +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C + DOUBLEPRECISION SH + INTEGER I + DO 10 I=1,2*NH + XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C) + 10 CONTINUE + RETURN + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION SH(I,C) +C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU +C Inputs: +C C: time constant +C I: time-step +C Outputs: +C SH: Values of the S curve for I +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION C + DOUBLEPRECISION SH,FI + INTEGER I + + FI=I + IF(FI.LE.0.)THEN + SH=0. + RETURN + ENDIF + IF(FI.GE.C)THEN + SH=1. + RETURN + ENDIF + SH=FI**2.5/(FI**2.5+(C-FI)**2.5) + RETURN + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS1(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS1: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS1 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS1=0. + RETURN + ENDIF + IF(FI.LT.C) THEN + SS1=(FI/C)**D + RETURN + ENDIF + SS1=1. + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS2(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS2: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS2 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS2=0. + RETURN + ENDIF + IF(FI.LE.C) THEN + SS2=0.5*(FI/C)**D + RETURN + ENDIF + IF(FI.LT.2.*C) THEN + SS2=1.-0.5*(2.-FI/C)**D + RETURN + ENDIF + SS2=1. + ENDFUNCTION + + + +C********************************************************************** + SUBROUTINE DEL(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER I,K + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+3*NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE DEL2(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER K,I + + IF(C.GT.FLOAT(NH)) C=FLOAT(NH) + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION tanHyp(Val) +C Computation of hyperbolic tangent +C********************************************************************** + Implicit None + DOUBLEPRECISION Val,ValExp,tanHyp + + ValExp=EXP(Val) + tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp) + RETURN + ENDFUNCTION + diff --git a/src-i386/utils.o b/src-i386/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..b94abd7298615d02807e93345ac96310a811dc8c GIT binary patch literal 2548 zcmaJ@UuauZ7(eOKHfW?_>$F0_BFEXetaM`!m8~wapnC`!T&5k1%{tdV!>FZ6Y?VH2 z-id?|2%--{ABr!&`cURZho)<Av`>4yXX(k@gOIGDI1p_aF8;oA?!8IcZ5M9NcfRxe z`F-E{os%1Kxfwn0c^G>^Np4qPa&#uCWc`zCV{8H9P`jSLh@ppt&-GmxNsegM6MqA& zKi_vgk$9qkwQz~-rkVqGVl8OpwEYn;U{phyAP*Or*eF&KBhthyBAHmh>?6@i1<45a zh!xq%Wt8_ri1Hp0<-Rh75kc;Q!XtycA8$|Tp6ph3YL&EWOQi?v&!+#$-guQ9q%aDh z<?QFoo}1DXWu?1H>qgZN1pS!^AIPwDkarjH5;iFkC!|RltREq*WWcyv<jtkK_ooj? zE0BL#wh*Gy7LX_u=5yE&W)%FCmIm9vJm@7vO=jjng@TNm@NCEO_D(F*d+HdRdI5Go zvSvVpA(vg)*PJQ)8_iFPjSt>GwdjIqRF7riJe-;35kwhUk7bklSUSr6DBdsIi<Rl5 zPMA(=oz<q7rMdo$9Um~QRpl|MJxUchCr=`YvFtJ)?(MkpHS$sDY@$ZdY5S#^`c~v^ zZykH;=k<bAt#B%Gr~r)JL<g}_`M6fAS@mtRhFhIH<UyoSUaOUHc;%#N6po!8j(uqL z|1`RBs7S3q8*T-8FLfpx=l)ER4`ne2Ku_Au)3e-71(X;6tJO${OkGOp=jETEL$dH% zoOj7N^Do56o@i0E_kvNqsjGI<9MWB`_O~#Wxx#}q+~5HWI1y!$7pukl^3Iph)UXtY zA4dM6?01~Z#fIjK^ci{2>$g+?60NgI9=@gk*ZCg&ebam(=WeO)=Uv9;U}{~OmkSgG zbuVM{TBK>df-)KTD=GlYNkS2|$P_?2%^%bp!j6T|$AGyd{s5cx5rwTjqFC{*h4?^e zMMg@SD4JSsJRB@7rEXS+X{Qv?t@B9zw%8X1`zF!$WMz%8=zQWSS3<zP5&}rR<4R~i zLsx>w>X*P~sS4BubRPU{C-!w1-y`YcvaM2Oc!@_(&!|_aGjs`2AH)ipD-`?7Hv9J{ zk5Usg^FxH9!x%$b93)?P^b8wXdDjuwujlAI8ilB0t9{;#suxV_#Qo(1XJ&a@$1g$N zw%{ED&)nAzP)%{}E_QMZZ5c05dwJ2#OBIJdk(-+a(PBLHHz<_X_mP}iCB9$?6YPT5 zxj#-BRZm00Rv%@sh&qjKZilcVd-lwJW9c=G!OA8!6i`*4wDBA#JhJ<a>|Qkrp0msL z`4+P4`Wr~PI7pexVgo(?wSK=FRl2Wxa0Ob|EJ`9v6wxh~%zI+Bv{c$!&e;!RmyY8f zF#rpU4CDNpFG1LYw~Zae?_Ru}?2IGbb)-KbX}d>`)P{a(4=*IWy4#T^oz=H+ytLhn zBmJ<;_9#Jm9x*%FVf-WNDDObh9&tyScUJR`uH;BRw%We89m$990UhrXNIFN#(e;g8 zjE^EOJ&$UPjk{9Gi}6I?m{zIZSYje(PhG5swV<Z$Pb`r*Oh!4p%7#I6h%`O0wlotd zrO7pFl-E2u;@BJ^FCY5hXjFC|s<bp0M&qOkqsF?10_E$P<jAKJUrff%p;B$r_?<)r z>~ejBHTpWLKaJl=fCQWRnk_Yc9|7d!Z5qCf02?;+b=3UCCO@05YtU5|8=aYK){yW2 DVY?*7 literal 0 HcmV?d00001 diff --git a/src-x64/airGR.dll b/src-x64/airGR.dll new file mode 100644 index 0000000000000000000000000000000000000000..fe805fb6e20cf3d273f4e86c7775897d6194b511 GIT binary patch literal 28672 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 BH*f#| literal 0 HcmV?d00001 diff --git a/src-x64/frun_CEMANEIGE.f b/src-x64/frun_CEMANEIGE.f new file mode 100644 index 00000000..fddc6a5f --- /dev/null +++ b/src-x64/frun_CEMANEIGE.f @@ -0,0 +1,128 @@ + + + SUBROUTINE frun_CEMANEIGE( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsFracSolidPrecip, ! [double] input series of fraction of solid precipitation [0-1] + & InputsTemp , ! [double] input series of air mean temperature [degC] + & MeanAnSolidPrecip , ! [double] value of annual mean solid precip [mm/y] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising = 2 + & StateStart , ! [double] state variables used when the model run starts + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, intent(in) :: MeanAnSolidPrecip + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip + doubleprecision, dimension(LInputs) :: InputsTemp + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + doubleprecision CTG,Kf + doubleprecision G,eTG,PliqAndMelt + doubleprecision Tmelt,Gthreshold,MinSpeed + doubleprecision Pliq,Psol,Gratio,PotMelt,Melt + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation des constantes + Tmelt=0 + Gthreshold=0.9*MeanAnSolidPrecip + MinSpeed=0.1 + + !initilisation of model states using StateStart + G=StateStart(1) + eTG=StateStart(2) + PliqAndMelt=0 + + !setting parameter values + CTG=Param(1) + Kf=Param(2) + + !initialisation of model outputs +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + + !SolidPrecip and LiquidPrecip + Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k) + Psol=InputsFracSolidPrecip(k)*InputsPrecip(k) + + !Snow pack volume before melt + G=G+Psol + + !Snow pack thermal state before melt + eTG=CTG*eTG + (1-CTG)*InputsTemp(k) + IF(eTG.GT.0) eTG=0 + + !Potential melt + IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN + PotMelt=Kf*(InputsTemp(k)-Tmelt) + IF(PotMelt.GT.G) PotMelt=G + ELSE + PotMelt=0 + ENDIF + + !Gratio + IF(G.LT.Gthreshold) THEN + Gratio=G/Gthreshold + ELSE + Gratio=1 + ENDIF + + !Actual melt + Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt + + !Update of snow pack volume + G=G-Melt + + !Water volume to pass to the hydrological model + PliqAndMelt=Pliq+Melt + + !Storage of outputs + DO I=1,NOutputs + IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq + IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol + IF(IndOutputs(I).EQ.3) Outputs(k,I)=G + IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG + IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio + IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt + IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt + IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt + ENDDO + + ENDDO + + StateEnd(1)=G + StateEnd(2)=eTG + + RETURN + + ENDSUBROUTINE + diff --git a/src-x64/frun_CEMANEIGE.o b/src-x64/frun_CEMANEIGE.o new file mode 100644 index 0000000000000000000000000000000000000000..d2426e2b3bd71b5949199d4609cd89180005f7df GIT binary patch literal 1498 zcmZ`(U2GIp6uz@FEz?RkL#Po9(2b7CG||bTHG&~whVH^_T+GT(TS9-KI|#w1fiCF- zX-e8f%%-FdK1jj?PliO}6Aw1=p%p3!HG)M_!A3AKx)x(IDOwxC`klLN-8FENd(L;y z`R=)A?wNZ!PL&HDA8SGw5^2KjPW5z4To5xMAv8sZHgI^b3X5c$-O=9NE-g<Nj!2H! z`;Q%aI-}s}V_r{bKnJc_wREQ=B97fv%3BUfEs{FDkRNZ6yrZSOFxwY6fN~%|$8B)y z-97H^Jq`7{yps<uz(F;&Ce@rUjVRSb%`jxbj6m)-9mpm#3E5$`K^`%?ATOGI*ah%~ zIRp@p@wyJ3tr><CiR_1F7#Enxo--rR9<;&wz?hf4XgUltBMCr{A$g;jKLVGG7g^Nl z-Up*WjEqX}@0+X->jCY3jm~TXmm_b4_NgHs+i*9Cl2OJd`f=)g#H*LMsNUe_F=>sF zb;I95y<_ZJw;DD#`#fSc-AoLg&=sogV_Hy0#><m9d+(_4l65uMN=DV4fSSHx&)Oew z{O_38e6l8(^<6-XzhHjplYNEWe+BtaHo;lNsq;q|XBm8tgF7D{U*ku~n#K7oe{t~J z9N-p2;{-xZu=AhHU7YnZD2?;I4Q~x<)f>K!4{Bdczq*j0+dm(ofloO5{&|%$pK{K$ zGECJ2oWAh-M-@+*+jPBqO*C6|1|%hYosA&r(vki(-hWAnZknPD<@0$jJ76Y}F9*SN zbh1!>OP1e~<+o({Em?j`mfw=)w`BRP#qwK)@_Q#Q^G~#|rM1~@a+}>2xAhX@TDko= z%pXERTKWwbMD86JhWK_a<C=b=Q`a8n^L!&yxZ7I+HBUg_$qmCwna?1nC$YIKU5U$C z8Og1}Zmi4G6$rLErxljV<kHAJ1Rq|VGSeItJ2vL-0}UxV*NdHV6(atdE}Y3_;?1k& zqW1GLVPDXM^^q!GI2{sedld29yF#o|o)ya@&$Lx`RV4M1@*CQ{&<x-4pXdqyjhQXL zBje)_SdTC0^JmWvZ>fi21*RsxT|!e!Xl@As$iAXV$&XYO{DLYavi(CxQb0T&=Y=?^ z_(#*7t#z>-?%T2W_L%J#e2b4;5n&NRLH|FBI~%)Ig}-BQSAkvJ)%YXTC&el1Xxwd{ z$SLY(@_Q7ga6pkP?qvLKRfT(5Y0I;Vx)}FrRS83ujw&qWjT}h5*WQ^rbTHK_{sn*x BT&4g3 literal 0 HcmV?d00001 diff --git a/src-x64/frun_GR4J.f b/src-x64/frun_GR4J.f new file mode 100644 index 00000000..953e7647 --- /dev/null +++ b/src-x64/frun_GR4J.f @@ -0,0 +1,225 @@ + + + SUBROUTINE frun_GR4J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR4J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=4) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3))**3.5 + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src-x64/frun_GR4J.o b/src-x64/frun_GR4J.o new file mode 100644 index 0000000000000000000000000000000000000000..f461567fb2f2cf8ab191e90baa9c7b633a3bf4ab GIT binary patch literal 2975 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 literal 0 HcmV?d00001 diff --git a/src-x64/frun_GR5J.f b/src-x64/frun_GR5J.f new file mode 100644 index 00000000..4b7b7351 --- /dev/null +++ b/src-x64/frun_GR5J.f @@ -0,0 +1,226 @@ + + + SUBROUTINE frun_GR5J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR5J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=5) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src-x64/frun_GR5J.o b/src-x64/frun_GR5J.o new file mode 100644 index 0000000000000000000000000000000000000000..18fcfc164c9aa320df5a92c59cb4ef1b9dc854a6 GIT binary patch literal 2875 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 literal 0 HcmV?d00001 diff --git a/src-x64/frun_GR6J.f b/src-x64/frun_GR6J.f new file mode 100644 index 00000000..9d7f9373 --- /dev/null +++ b/src-x64/frun_GR6J.f @@ -0,0 +1,249 @@ + + + SUBROUTINE frun_GR6J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + !Param(6) : time constant of exponential store (X6 - EXP) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR6J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=6) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1 + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + DATA C/0.4/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+(1-C)*X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Update of exponential store + X(6)=X(6)+C*X(8)+EXCH + AR=X(6)/Param(6) + IF(AR.GT.33.)AR=33. + IF(AR.LT.-33.)AR=-33. + + IF(AR.GT.7.)THEN + QR1=X(6)+Param(6)/EXP(AR) + GOTO 3 + ENDIF + + IF(AR.LT.-7.)THEN + QR1=Param(6)*EXP(AR) + GOTO 3 + ENDIF + + QR1=Param(6)*LOG(EXP(AR)+1.) + 3 CONTINUE + + X(6)=X(6)-QR1 + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD+QR1 + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QR1 ! QR1 ! outflow from exponential store (QR1) [mm/d] + MISC(14)=X(6) ! Exp ! exponential store level (X(6)) (negative) [mm] + MISC(15)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(16)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + ENDSUBROUTINE + + diff --git a/src-x64/frun_GR6J.o b/src-x64/frun_GR6J.o new file mode 100644 index 0000000000000000000000000000000000000000..3f0b624ef8234df41045bbc4ba748a543a9dd211 GIT binary patch literal 3415 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 literal 0 HcmV?d00001 diff --git a/src-x64/utils.f b/src-x64/utils.f new file mode 100644 index 00000000..2028bc71 --- /dev/null +++ b/src-x64/utils.f @@ -0,0 +1,272 @@ + + +C********************************************************************** + SUBROUTINE HU1(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS1 + INTEGER I + + DO I=1,NH + XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D) + ENDDO + ENDSUBROUTINE + + +C********************************************************************** + SUBROUTINE HU2(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS2 + INTEGER I + + DO I =1,2*NH + XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D) + ENDDO + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU4(XV,ALPHA,BETA) +C Computation of ordinates of MOHYSE unit hydrograph +C Inputs: +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH) + DOUBLEPRECISION ALPHA,BETA,SU + INTEGER K + + SU=0. +c IF(ALPHA.LT.1.)THEN +c WRITE(*,*)' Pb ALPHA' +c STOP +c ENDIF + IF(ALPHA.EQ.1.)THEN + U(1)=1. + SU=1. + DO 1 K=2,3*NH + U(K)=0. + 1 CONTINUE + ELSE + DO 11 K=1,3*NH + U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA) + SU=SU+U(K) + 11 CONTINUE + ENDIF + +c IF(SU.LT.0.0000000001)THEN +c WRITE(*,*)' Pb HU4',ALPHA, BETA +c STOP +c ENDIF + DO 2 K=1,3*NH + XV(3*NPX+K)=U(K)/SU + 2 CONTINUE + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU(XV,C) +C Computation of ordinates of GRP unit hydrograph +C Inputs: +C C: time constant +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C + DOUBLEPRECISION SH + INTEGER I + DO 10 I=1,2*NH + XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C) + 10 CONTINUE + RETURN + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION SH(I,C) +C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU +C Inputs: +C C: time constant +C I: time-step +C Outputs: +C SH: Values of the S curve for I +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION C + DOUBLEPRECISION SH,FI + INTEGER I + + FI=I + IF(FI.LE.0.)THEN + SH=0. + RETURN + ENDIF + IF(FI.GE.C)THEN + SH=1. + RETURN + ENDIF + SH=FI**2.5/(FI**2.5+(C-FI)**2.5) + RETURN + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS1(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS1: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS1 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS1=0. + RETURN + ENDIF + IF(FI.LT.C) THEN + SS1=(FI/C)**D + RETURN + ENDIF + SS1=1. + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS2(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS2: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS2 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS2=0. + RETURN + ENDIF + IF(FI.LE.C) THEN + SS2=0.5*(FI/C)**D + RETURN + ENDIF + IF(FI.LT.2.*C) THEN + SS2=1.-0.5*(2.-FI/C)**D + RETURN + ENDIF + SS2=1. + ENDFUNCTION + + + +C********************************************************************** + SUBROUTINE DEL(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER I,K + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+3*NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE DEL2(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER K,I + + IF(C.GT.FLOAT(NH)) C=FLOAT(NH) + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION tanHyp(Val) +C Computation of hyperbolic tangent +C********************************************************************** + Implicit None + DOUBLEPRECISION Val,ValExp,tanHyp + + ValExp=EXP(Val) + tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp) + RETURN + ENDFUNCTION + diff --git a/src-x64/utils.o b/src-x64/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..2dbfd225923ddd4e69856081f1f330011498a709 GIT binary patch literal 2944 zcmbVOZ)jUp6u&P?x2(3@bZybOv1R&%*FT0->QJ%UYt7&eD+HXjbv12W8#5`hED4P; zq%&0(ZLr9cee|RF)giKpr0qyML|pe_f+9}wL#72o1UKer{GEIAZj-Jec;V&#-tYXm z=bn4c%N>7b8>8{j4#sv%<Y9rtL@FV%`U%%D<}nyMzg@kzV)C=_XkdISF;=Cw6|`A6 z7kDKe-%3`^&5&NI*5Mo!j;ipqs?CCSV5(Lx1?dgwz2;SFdofA9Q?+_F_`%8^lqTtg z?dL^$EzH{zrk}T+HiIGF7BcN9AIOz>dsmbP^6_wq`<}vsL@);CR{Ws2q+EEQY2~AW zpZvNYrG%m(Zsou)m-ujA(xqNLm@9>NBp2<4j9avtC0Dbsnn+&`A6w%4X2=D?vG~9> zir_utPu{-51FLZp!5|=CJ(gdI?}78x5+7W}+tulS6B^uDOY<cjS-^TeuUeT8)lp)k zjPDCEMsnD%kd+S-1X-i+Yb5;=ACek?Qe(rO4_uLP<tUOzs^gm8;Y6~egSbf!XfN2_ zEMfM-z>Ab}K`9S*{U9>mh|G8Wnf!9dv`}X3NTw(<cQV6fr^xo3R$;DOE-Q}SI}v)Z zkOG%|#)Z&}8JLxL(}f?yFc#@0L!|$1NnWHB2NAS578!YYDH@Fi{_pye>-Vld2yXNG z#f|l?|6Kpf+MtUu-gd!ca{kivVMguEntlc5%%B42Od9~1eVnp~BJ%AN8LF|sb^h-A zp!nMv{EF<P=|>_^St5JbE3)UL>*%~#COf1i=M_(0O%}Uy@D-|q$4DOfvu>3*NPBKz z3(23kRf)=SqOzQ*EGH^UMJ3K$rhUj9JNZ?C97X|tMaM}2*ZC=c%pbtR*HH|Ap{&=_ zd4so<`AcQlDZQ#{hwh+3269g6-bR3jM0(kqUhhG@-%93h_TcDooEzt<%E{K{^sUHT zcWOyikjRv%nhMQ#%Vk+YAY>J}Kx{h2pK4A~HY!z-jU77uDf3rf;+^Qg_C=K7idddC zD2X&=npGkTPB&!x+S7|2;=DM1O*R{E3N6si`d4o+MbWRm#vm*)yU@=I(-HW_8MUv3 zvUYnm-0|G;94wEd3kF$>^lygKzO*25UAcQh_!zQeq14BlJPTN>VbzHrFZI1&^gw*^ zptN_sYXet)|D5l`4%X06KBIC5zD6jagRQG57<>|j>BECLf{%~2C_fAHHN$B2vevU6 z##3%qA9Jy~4~(FJKM+qJW0WMLaXV{_xtaGZPtZN;nli%w!X5Cj1D}}e(en>8^Xx-x zcWOUtj``Vr#<R?^G#a+C2Kd^3${lo#8dK6gtx;KzLZ{}SF^{JM3N4s}m}7YM0F%+L zc>KUc%;PBNZsIY2=EjKv=P<W<7@GtRVty0PY2X>mjrd!b0j4ze;h6<iqj*ToH!3r; zD*|Vlae$h;ZRfoM;C?(Fb_Bn>BpTHy52U2uYwj1#-PNcbyHU0~ft1Bwjlvpzik&Ly zIQFT~hd>X)lZQpHN5#!*bV(yOcC4hkfRx34&5h^?;EGWtx#7`4^gq)qxdzSoG@^4- z(g!q0=cT;(wbay{rBSDr1~o@#s%)Ro(x)|NYZTH_I(cQ$uMvv164g=74Qe#3rK6e~ z*C?i?R7cA5ltu|H4Ma~&PT-BkdYQ3Tjb!4)WIPa6l>CjyM)aG({LF<+ZyxdZV^V1z z0;$8|@h-_w{VOJxR19^2!ze521&8UDR@4y=qgJQBP|Wzmr1Fg8)r@pBqnX6m$=DlH zBeGMJPW4@rHsCg>gXo62F{<yG2mm@8G6z-PF%i<%I#u^egan;A$6U|VcS{5U9lBl8 jjdEiIs_vC^J#`yYPqky}_30`Cr^6;vbkfcshGO^!%XvXL literal 0 HcmV?d00001 diff --git a/src/frun_CEMANEIGE.f b/src/frun_CEMANEIGE.f new file mode 100644 index 00000000..fddc6a5f --- /dev/null +++ b/src/frun_CEMANEIGE.f @@ -0,0 +1,128 @@ + + + SUBROUTINE frun_CEMANEIGE( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsFracSolidPrecip, ! [double] input series of fraction of solid precipitation [0-1] + & InputsTemp , ! [double] input series of air mean temperature [degC] + & MeanAnSolidPrecip , ! [double] value of annual mean solid precip [mm/y] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising = 2 + & StateStart , ! [double] state variables used when the model run starts + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_cemaneige + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, intent(in) :: MeanAnSolidPrecip + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsFracSolidPrecip + doubleprecision, dimension(LInputs) :: InputsTemp + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + doubleprecision CTG,Kf + doubleprecision G,eTG,PliqAndMelt + doubleprecision Tmelt,Gthreshold,MinSpeed + doubleprecision Pliq,Psol,Gratio,PotMelt,Melt + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation des constantes + Tmelt=0 + Gthreshold=0.9*MeanAnSolidPrecip + MinSpeed=0.1 + + !initilisation of model states using StateStart + G=StateStart(1) + eTG=StateStart(2) + PliqAndMelt=0 + + !setting parameter values + CTG=Param(1) + Kf=Param(2) + + !initialisation of model outputs +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + + !SolidPrecip and LiquidPrecip + Pliq=(1-InputsFracSolidPrecip(k))*InputsPrecip(k) + Psol=InputsFracSolidPrecip(k)*InputsPrecip(k) + + !Snow pack volume before melt + G=G+Psol + + !Snow pack thermal state before melt + eTG=CTG*eTG + (1-CTG)*InputsTemp(k) + IF(eTG.GT.0) eTG=0 + + !Potential melt + IF(eTG.EQ.0.AND.InputsTemp(k).GT.Tmelt) THEN + PotMelt=Kf*(InputsTemp(k)-Tmelt) + IF(PotMelt.GT.G) PotMelt=G + ELSE + PotMelt=0 + ENDIF + + !Gratio + IF(G.LT.Gthreshold) THEN + Gratio=G/Gthreshold + ELSE + Gratio=1 + ENDIF + + !Actual melt + Melt=((1-MinSpeed)*Gratio+MinSpeed)*PotMelt + + !Update of snow pack volume + G=G-Melt + + !Water volume to pass to the hydrological model + PliqAndMelt=Pliq+Melt + + !Storage of outputs + DO I=1,NOutputs + IF(IndOutputs(I).EQ.1) Outputs(k,I)=Pliq + IF(IndOutputs(I).EQ.2) Outputs(k,I)=Psol + IF(IndOutputs(I).EQ.3) Outputs(k,I)=G + IF(IndOutputs(I).EQ.4) Outputs(k,I)=eTG + IF(IndOutputs(I).EQ.5) Outputs(k,I)=Gratio + IF(IndOutputs(I).EQ.6) Outputs(k,I)=PotMelt + IF(IndOutputs(I).EQ.7) Outputs(k,I)=Melt + IF(IndOutputs(I).EQ.8) Outputs(k,I)=PliqAndMelt + ENDDO + + ENDDO + + StateEnd(1)=G + StateEnd(2)=eTG + + RETURN + + ENDSUBROUTINE + diff --git a/src/frun_GR4J.f b/src/frun_GR4J.f new file mode 100644 index 00000000..953e7647 --- /dev/null +++ b/src/frun_GR4J.f @@ -0,0 +1,225 @@ + + + SUBROUTINE frun_GR4J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr4j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR4J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR4J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR4J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=4) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3))**3.5 + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src/frun_GR5J.f b/src/frun_GR5J.f new file mode 100644 index 00000000..4b7b7351 --- /dev/null +++ b/src/frun_GR5J.f @@ -0,0 +1,226 @@ + + + SUBROUTINE frun_GR5J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr5j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR5J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR5J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR5J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=5) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,EN,ER,PN,PR,PS,WS,tanHyp + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(14)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + + + ENDSUBROUTINE + + diff --git a/src/frun_GR6J.f b/src/frun_GR6J.f new file mode 100644 index 00000000..9d7f9373 --- /dev/null +++ b/src/frun_GR6J.f @@ -0,0 +1,249 @@ + + + SUBROUTINE frun_GR6J( + !inputs + & LInputs , ! [integer] length of input and output series + & InputsPrecip , ! [double] input series of total precipitation [mm] + & InputsPE , ! [double] input series PE [mm] + & NParam , ! [integer] number of model parameter + & Param , ! [double] parameter set + & NStates , ! [integer] number of state variables used for model initialising + & StateStart , ! [double] state variables used when the model run starts (reservoir levels [mm] and HU) + & NOutputs , ! [integer] number of output series + & IndOutputs , ! [integer] indices of output series + !outputs + & Outputs , ! [double] output series + & StateEnd ) ! [double] state variables at the end of the model run (reservoir levels [mm] and HU) + + + !DEC$ ATTRIBUTES DLLEXPORT :: frun_gr6j + + + Implicit None + !### input and output variables + integer, intent(in) :: LInputs,NParam,NStates,NOutputs + doubleprecision, dimension(LInputs) :: InputsPrecip + doubleprecision, dimension(LInputs) :: InputsPE + doubleprecision, dimension(NParam) :: Param + doubleprecision, dimension(NStates) :: StateStart + doubleprecision, dimension(NStates) :: StateEnd + integer, dimension(NOutputs) :: IndOutputs + doubleprecision, dimension(LInputs,NOutputs) :: Outputs + + !parameters, internal states and variables + integer NPX,NH,NMISC + parameter (NPX=14,NH=20,NMISC=30) + doubleprecision X(5*NH+7),XV(3*NPX+5*NH) + doubleprecision MISC(NMISC) + doubleprecision D + doubleprecision P1,E,Q + integer I,K + + !-------------------------------------------------------------- + !Initialisations + !-------------------------------------------------------------- + + !initilisation of model states to zero + X=0. + XV=0. + + !initilisation of model states using StateStart + DO I=1,3*NH + X(I)=StateStart(I) + ENDDO + + !parameter values + !Param(1) : production store capacity (X1 - PROD) [mm] + !Param(2) : intercatchment exchange constant (X2 - CES1) [mm/d] + !Param(3) : routing store capacity (X3 - ROUT) [mm] + !Param(4) : time constant of unit hydrograph (X4 - TB) [d] + !Param(5) : intercatchment exchange constant (X5 - CES2) [-] + !Param(6) : time constant of exponential store (X6 - EXP) [d] + + !computation of HU ordinates + D=2.5 + CALL HU1(XV,Param(4),D) + CALL HU2(XV,Param(4),D) + + !initialisation of model outputs + Q = -999.999 + MISC = -999.999 +c StateEnd = -999.999 !initialisation made in R +c Outputs = -999.999 !initialisation made in R + + + + !-------------------------------------------------------------- + !Time loop + !-------------------------------------------------------------- + DO k=1,LInputs + P1=InputsPrecip(k) + E =InputsPE(k) +c Q = -999.999 +c MISC = -999.999 + !model run on one time-step + CALL MOD_GR6J(X,XV,Param,P1,E,Q,MISC) + !storage of outputs + DO I=1,NOutputs + Outputs(k,I)=MISC(IndOutputs(I)) + ENDDO + ENDDO + !model states at the end of the run + DO K=1,3*NH + StateEnd(K)=X(K) + ENDDO + + RETURN + + ENDSUBROUTINE + + + + + +c################################################################################################################################ + + + + +C********************************************************************** + SUBROUTINE MOD_GR6J(X,XV,Param,P1,E,Q,MISC) +C Run on a single time-step with the GR6J model +C Inputs: +C X Vector of model states at the beginning of the time-step [mm] +C XV Vector of model states at the beginning of the time-step [mm] +C Param Vector of model parameters [mixed units] +C P1 Value of rainfall during the time-step [mm] +C E Value of potential evapotranspiration during the time-step [mm] +C Outputs: +C X Vector of model states at the end of the time-step [mm] +C XV Vector of model states at the end of the time-step [mm] +C Q Value of simulated flow at the catchment outlet for the time-step [mm] +C MISC Vector of model outputs for the time-step [mm] +C********************************************************************** + Implicit None + INTEGER NPX,NH,NMISC,NParam + PARAMETER (NPX=14,NH=20,NMISC=30) + PARAMETER (NParam=6) + DOUBLEPRECISION X(5*NH+7),XV(3*NPX+5*NH) + DOUBLEPRECISION Param(NParam) + DOUBLEPRECISION MISC(NMISC) + DOUBLEPRECISION P1,E,Q + DOUBLEPRECISION A,B,C,EN,ER,PN,PR,PS,WS,tanHyp,AR + DOUBLEPRECISION PERC,PRHU1,PRHU2,EXCH,QR,QD,QR1 + DOUBLEPRECISION AE,AEXCH1,AEXCH2 + INTEGER K + + DATA B/0.9/ + DATA C/0.4/ + + A=Param(1) + + +C Production store + IF(P1.LE.E) THEN + EN=E-P1 + PN=0. + WS=EN/A + IF(WS.GT.13)WS=13. + ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS)) + AE=ER+P1 + IF(X(2).LT.ER) AE=X(2)+P1 + X(2)=X(2)-ER + PR=0. + ELSE + EN=0. + AE=E + PN=P1-E + WS=PN/A + IF(WS.GT.13)WS=13. + PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS)) + PR=PN-PS + X(2)=X(2)+PS + ENDIF + +C Percolation from production store + IF(X(2).LT.0.)X(2)=0. + PERC=X(2)*(1.-(1.+(X(2)/(9./4.*Param(1)))**4.)**(-0.25)) + X(2)=X(2)-PERC + + PR=PR+PERC + + PRHU1=PR*B + PRHU2=PR*(1.-B) + +C Unit hydrograph HU1 + DO K=1,MAX(1,MIN(NH-1,INT(Param(4)+1))) + X(7+K)=X(8+K)+XV(3*NPX+K)*PRHU1 + ENDDO + X(7+NH)=XV(3*NPX+NH)*PRHU1 + +C Unit hydrograph HU2 + DO K=1,MAX(1,MIN(2*NH-1,2*INT(Param(4)+1))) + X(7+NH+K)=X(8+NH+K)+XV(3*NPX+NH+K)*PRHU2 + ENDDO + X(7+3*NH)=XV(3*NPX+3*NH)*PRHU2 + +C Potential intercatchment semi-exchange + EXCH=Param(2)*(X(1)/Param(3)-Param(5)) + +C Routing store + AEXCH1=EXCH + IF((X(1)+X(8)+EXCH).LT.0) AEXCH1=-X(1)-X(8) + X(1)=X(1)+(1-C)*X(8)+EXCH + IF(X(1).LT.0.)X(1)=0. + QR=X(1)*(1.-(1.+(X(1)/Param(3))**4.)**(-1./4.)) + X(1)=X(1)-QR + +C Update of exponential store + X(6)=X(6)+C*X(8)+EXCH + AR=X(6)/Param(6) + IF(AR.GT.33.)AR=33. + IF(AR.LT.-33.)AR=-33. + + IF(AR.GT.7.)THEN + QR1=X(6)+Param(6)/EXP(AR) + GOTO 3 + ENDIF + + IF(AR.LT.-7.)THEN + QR1=Param(6)*EXP(AR) + GOTO 3 + ENDIF + + QR1=Param(6)*LOG(EXP(AR)+1.) + 3 CONTINUE + + X(6)=X(6)-QR1 + +C Runoff from direct branch QD + AEXCH2=EXCH + IF((X(8+NH)+EXCH).LT.0) AEXCH2=-X(8+NH) + QD=MAX(0.,X(8+NH)+EXCH) + +C Total runoff + Q=QR+QD+QR1 + IF(Q.LT.0.) Q=0. + +C Variables storage + MISC( 1)=E ! PE ! potential evapotranspiration [mm/d] + MISC( 2)=P1 ! Precip ! total precipitation [mm/d] + MISC( 3)=X(2) ! Prod ! production store level (X(2)) [mm] + MISC( 4)=AE ! AE ! actual evapotranspiration [mm/d] + MISC( 5)=PERC ! Perc ! percolation (PERC) [mm] + MISC( 6)=PR ! PR ! PR=PN-PS+PERC [mm] + MISC( 7)=X(8) ! Q9 ! outflow from HU1 (Q9) [mm/d] + MISC( 8)=X(8+NH) ! Q1 ! outflow from HU2 (Q1) [mm/d] + MISC( 9)=X(1) ! Rout ! routing store level (X(1)) [mm] + MISC(10)=EXCH ! Exch ! potential semi-exchange between catchments (EXCH) [mm/d] + MISC(11)=AEXCH1+AEXCH2 ! AExch ! actual total exchange between catchments (AEXCH1+AEXCH2) [mm/d] + MISC(12)=QR ! QR ! outflow from routing store (QR) [mm/d] + MISC(13)=QR1 ! QR1 ! outflow from exponential store (QR1) [mm/d] + MISC(14)=X(6) ! Exp ! exponential store level (X(6)) (negative) [mm] + MISC(15)=QD ! QD ! outflow from HU2 branch after exchange (QD) [mm/d] + MISC(16)=Q ! Qsim ! outflow at catchment outlet [mm/d] + + + ENDSUBROUTINE + + diff --git a/src/utils.f b/src/utils.f new file mode 100644 index 00000000..2028bc71 --- /dev/null +++ b/src/utils.f @@ -0,0 +1,272 @@ + + +C********************************************************************** + SUBROUTINE HU1(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS1 + INTEGER I + + DO I=1,NH + XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D) + ENDDO + ENDSUBROUTINE + + +C********************************************************************** + SUBROUTINE HU2(XV,C,D) +C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2 +C Inputs: +C C: time constant +C D: exponent +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,D,SS2 + INTEGER I + + DO I =1,2*NH + XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D) + ENDDO + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU4(XV,ALPHA,BETA) +C Computation of ordinates of MOHYSE unit hydrograph +C Inputs: +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH) + DOUBLEPRECISION ALPHA,BETA,SU + INTEGER K + + SU=0. +c IF(ALPHA.LT.1.)THEN +c WRITE(*,*)' Pb ALPHA' +c STOP +c ENDIF + IF(ALPHA.EQ.1.)THEN + U(1)=1. + SU=1. + DO 1 K=2,3*NH + U(K)=0. + 1 CONTINUE + ELSE + DO 11 K=1,3*NH + U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA) + SU=SU+U(K) + 11 CONTINUE + ENDIF + +c IF(SU.LT.0.0000000001)THEN +c WRITE(*,*)' Pb HU4',ALPHA, BETA +c STOP +c ENDIF + DO 2 K=1,3*NH + XV(3*NPX+K)=U(K)/SU + 2 CONTINUE + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE HU(XV,C) +C Computation of ordinates of GRP unit hydrograph +C Inputs: +C C: time constant +C Alpha: parameter +C Beta: parameter +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C + DOUBLEPRECISION SH + INTEGER I + DO 10 I=1,2*NH + XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C) + 10 CONTINUE + RETURN + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION SH(I,C) +C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU +C Inputs: +C C: time constant +C I: time-step +C Outputs: +C SH: Values of the S curve for I +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION C + DOUBLEPRECISION SH,FI + INTEGER I + + FI=I + IF(FI.LE.0.)THEN + SH=0. + RETURN + ENDIF + IF(FI.GE.C)THEN + SH=1. + RETURN + ENDIF + SH=FI**2.5/(FI**2.5+(C-FI)**2.5) + RETURN + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS1(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS1: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS1 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS1=0. + RETURN + ENDIF + IF(FI.LT.C) THEN + SS1=(FI/C)**D + RETURN + ENDIF + SS1=1. + ENDFUNCTION + + +C********************************************************************** + FUNCTION SS2(I,C,D) +C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2 +C Inputs: +C C: time constant +C D: exponent +C I: time-step +C Outputs: +C SS2: Values of the S curve for I +C********************************************************************** + Implicit None + DOUBLEPRECISION C,D,SS2 + INTEGER I,FI + + FI=I + IF(FI.LE.0.) THEN + SS2=0. + RETURN + ENDIF + IF(FI.LE.C) THEN + SS2=0.5*(FI/C)**D + RETURN + ENDIF + IF(FI.LT.2.*C) THEN + SS2=1.-0.5*(2.-FI/C)**D + RETURN + ENDIF + SS2=1. + ENDFUNCTION + + + +C********************************************************************** + SUBROUTINE DEL(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER I,K + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+3*NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + SUBROUTINE DEL2(XV,C) +C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps +C (all ordinates are nul except 2 at max) +C Inputs: +C C: time constant +C Outputs: +C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph +C********************************************************************** + Implicit None + INTEGER NPX,NH + PARAMETER (NPX=14,NH=20) + DOUBLEPRECISION XV(3*NPX+5*NH) + DOUBLEPRECISION C,F + INTEGER K,I + + IF(C.GT.FLOAT(NH)) C=FLOAT(NH) + I=INT(C) + F=C-INT(C) + DO 1 K=3*NPX+1,3*NPX+NH + XV(K)=0. + 1 CONTINUE + XV(3*NPX+I)=1.-F + XV(3*NPX+I+1)=F + ENDSUBROUTINE + + + +C********************************************************************** + FUNCTION tanHyp(Val) +C Computation of hyperbolic tangent +C********************************************************************** + Implicit None + DOUBLEPRECISION Val,ValExp,tanHyp + + ValExp=EXP(Val) + tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp) + RETURN + ENDFUNCTION + diff --git a/tests/example_Calibration.R b/tests/example_Calibration.R new file mode 100644 index 00000000..d95410ed --- /dev/null +++ b/tests/example_Calibration.R @@ -0,0 +1,47 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN) + +## calibration +OutputsCalib <- Calibration(InputsModel=InputsModel,RunOptions=RunOptions,InputsCrit=InputsCrit, + CalibOptions=CalibOptions,FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE, + FUN_CALIB=Calibration_HBAN) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + + diff --git a/tests/example_Calibration_HBAN.R b/tests/example_Calibration_HBAN.R new file mode 100644 index 00000000..75b7832f --- /dev/null +++ b/tests/example_Calibration_HBAN.R @@ -0,0 +1,46 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_HBAN) + +## calibration +OutputsCalib <- Calibration_HBAN(InputsModel=InputsModel,RunOptions=RunOptions, + InputsCrit=InputsCrit,CalibOptions=CalibOptions, + FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_Calibration_optim.R b/tests/example_Calibration_optim.R new file mode 100644 index 00000000..f08ec410 --- /dev/null +++ b/tests/example_Calibration_optim.R @@ -0,0 +1,45 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## 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,Qobs=BasinObs$Qmm[Ind_Run]) + +## preparation of CalibOptions object +CalibOptions <- CreateCalibOptions(FUN_MOD=RunModel_GR4J,FUN_CALIB=Calibration_optim) + +## calibration +OutputsCalib <- Calibration_optim(InputsModel=InputsModel,RunOptions=RunOptions, + InputsCrit=InputsCrit,CalibOptions=CalibOptions, + FUN_MOD=RunModel_GR4J,FUN_CRIT=ErrorCrit_NSE) + +## simulation +Param <- OutputsCalib$ParamFinalR +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) diff --git a/tests/example_ErrorCrit.R b/tests/example_ErrorCrit.R new file mode 100644 index 00000000..db241e83 --- /dev/null +++ b/tests/example_ErrorCrit.R @@ -0,0 +1,60 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param,FUN=RunModel_GR4J) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency on log-transformed flows +transfo <- "log" +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],transfo=transfo) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Nash-Sutcliffe Efficiency above a threshold (q75%) +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]<quantile(BasinObs$Qmm[Ind_Run],0.75,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\n",sep="")) + +## efficiency criterion: Kling-Gupta Efficiency below a threshold (q10%) on log-trqansformed flows +transfo <- "log" +BoolCrit <- rep(TRUE,length(BasinObs$Qmm[Ind_Run])); +BoolCrit[BasinObs$Qmm[Ind_Run]>quantile(BasinObs$Qmm[Ind_Run],0.10,na.rm=TRUE)] <- FALSE; +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_KGE,InputsModel=InputsModel,RunOptions=RunOptions, + Qobs=BasinObs$Qmm[Ind_Run],BoolCrit=BoolCrit,transfo=transfo) +OutputsCrit <- ErrorCrit_KGE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) +cat(paste("SubCrit ",OutputsCrit$SubCritNames," ",round(OutputsCrit$SubCritValues,4),"\n",sep="")) + + + + diff --git a/tests/example_RunModel.R b/tests/example_RunModel.R new file mode 100644 index 00000000..b240b8cf --- /dev/null +++ b/tests/example_RunModel.R @@ -0,0 +1,29 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_CemaNeige.R b/tests/example_RunModel_CemaNeige.R new file mode 100644 index 00000000..e2218fbd --- /dev/null +++ b/tests/example_RunModel_CemaNeige.R @@ -0,0 +1,25 @@ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeige,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeige,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(0.962,2.249) +OutputsModel <- RunModel_CemaNeige(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel) + diff --git a/tests/example_RunModel_CemaNeigeGR4J.R b/tests/example_RunModel_CemaNeigeGR4J.R new file mode 100644 index 00000000..fcbc2488 --- /dev/null +++ b/tests/example_RunModel_CemaNeigeGR4J.R @@ -0,0 +1,31 @@ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(408.774,2.646,131.264,1.174,0.962,2.249) +OutputsModel <- RunModel_CemaNeigeGR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_CemaNeigeGR5J.R b/tests/example_RunModel_CemaNeigeGR5J.R new file mode 100644 index 00000000..9e449527 --- /dev/null +++ b/tests/example_RunModel_CemaNeigeGR5J.R @@ -0,0 +1,31 @@ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR5J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR5J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(179.139,-0.100,203.815,1.174,2.478,0.977,2.774) +OutputsModel <- RunModel_CemaNeigeGR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_CemaNeigeGR6J.R b/tests/example_RunModel_CemaNeigeGR6J.R new file mode 100644 index 00000000..d381ff51 --- /dev/null +++ b/tests/example_RunModel_CemaNeigeGR6J.R @@ -0,0 +1,31 @@ +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR6J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + ZInputs=BasinInfo$HypsoCurve[51],HypsoData=BasinInfo$HypsoCurve, + NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR6J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(116.482,0.500,72.733,1.224,0.278,30.333,0.977,2.776) +OutputsModel <- RunModel_CemaNeigeGR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_GR4J.R b/tests/example_RunModel_GR4J.R new file mode 100644 index 00000000..fe8acc49 --- /dev/null +++ b/tests/example_RunModel_GR4J.R @@ -0,0 +1,28 @@ +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel_GR4J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_GR5J.R b/tests/example_RunModel_GR5J.R new file mode 100644 index 00000000..62e535fe --- /dev/null +++ b/tests/example_RunModel_GR5J.R @@ -0,0 +1,28 @@ +## load of catchment data +require(airGR) +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR5J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR5J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(839.661,-0.100,103.153,1.939,-0.428) +OutputsModel <- RunModel_GR5J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_RunModel_GR6J.R b/tests/example_RunModel_GR6J.R new file mode 100644 index 00000000..2bdc4e0d --- /dev/null +++ b/tests/example_RunModel_GR6J.R @@ -0,0 +1,28 @@ +## load of catchment data +require(airGR) +data(L0123001) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_GR6J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR6J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(347.000,-0.500,65.677,1.957,0.324,34.115) +OutputsModel <- RunModel_GR6J(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + +## efficiency criterion: Nash-Sutcliffe Efficiency +InputsCrit <- CreateInputsCrit(FUN_CRIT=ErrorCrit_NSE,InputsModel=InputsModel, + RunOptions=RunOptions,Qobs=BasinObs$Qmm[Ind_Run]) +OutputsCrit <- ErrorCrit_NSE(InputsCrit=InputsCrit,OutputsModel=OutputsModel) +cat(paste(" Crit ",OutputsCrit$CritName," ",round(OutputsCrit$CritValue,4),"\n",sep="")) + diff --git a/tests/example_TransfoParam.R b/tests/example_TransfoParam.R new file mode 100644 index 00000000..0c5c5037 --- /dev/null +++ b/tests/example_TransfoParam.R @@ -0,0 +1,15 @@ +require(airGR) + +## transformation Real->Transformed for the GR4J model + Xreal <- matrix( c( 221.41, -3.63, 30.00, 1.37, + 347.23, -1.03, 60.34, 1.76, + 854.06, -0.10, 148.41, 2.34), + ncol=4,byrow=TRUE) + Xtran <- TransfoParam(ParamIn=Xreal,Direction="RT",FUN_TRANSFO=TransfoParam_GR4J) + +## transformation Transformed->Real for the GR4J model + Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10, + +3.90, -0.90, +4.10, -8.70, + +4.50, -0.10, +5.00, -8.10), + ncol=4,byrow=TRUE) + Xreal <- TransfoParam(ParamIn=Xtran,Direction="TR",FUN_TRANSFO=TransfoParam_GR4J) diff --git a/tests/example_TransfoParam_CemaNeige.R b/tests/example_TransfoParam_CemaNeige.R new file mode 100644 index 00000000..85efecfc --- /dev/null +++ b/tests/example_TransfoParam_CemaNeige.R @@ -0,0 +1,15 @@ +require(airGR) + +## transformation Real->Transformed for the CemaNeige module + Xreal <- matrix( c( 0.19, 1.73, + 0.39, 2.51, + 0.74, 4.06), + ncol=2,byrow=TRUE) + Xtran <- TransfoParam_CemaNeige(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the CemaNeige module + Xtran <- matrix( c( -6.26, +0.55, + -2.13, +0.92, + +4.86, +1.40) + ,ncol=2,byrow=TRUE) + Xreal <- TransfoParam_CemaNeige(ParamIn=Xtran,Direction="TR") diff --git a/tests/example_TransfoParam_GR4J.R b/tests/example_TransfoParam_GR4J.R new file mode 100644 index 00000000..61019033 --- /dev/null +++ b/tests/example_TransfoParam_GR4J.R @@ -0,0 +1,15 @@ +require(airGR) + +## transformation Real->Transformed for the GR4J model + Xreal <- matrix( c( 221.41, -3.63, 30.00, 1.37, + 347.23, -1.03, 60.34, 1.76, + 854.06, -0.10, 148.41, 2.34), + ncol=4,byrow=TRUE) + Xtran <- TransfoParam_GR4J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR4J model + Xtran <- matrix( c( +3.60, -2.00, +3.40, -9.10, + +3.90, -0.90, +4.10, -8.70, + +4.50, -0.10, +5.00, -8.10), + ncol=4,byrow=TRUE) + Xreal <- TransfoParam_GR4J(ParamIn=Xtran,Direction="TR") diff --git a/tests/example_TransfoParam_GR5J.R b/tests/example_TransfoParam_GR5J.R new file mode 100644 index 00000000..b2361f3a --- /dev/null +++ b/tests/example_TransfoParam_GR5J.R @@ -0,0 +1,15 @@ +require(airGR) + +## transformation Real->Transformed for the GR5J model + Xreal <- matrix( c( 221.41, -2.65, 27.11, 1.37, -0.76, + 347.23, -0.64, 60.34, 1.76, 0.30, + 854.01, -0.10, 148.41, 2.34, 0.52), + ncol=5,byrow=TRUE) + Xtran <- TransfoParam_GR5J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR5J model + Xtran <- matrix( c( +3.60, -1.70, +3.30, -9.10, -0.70, + +3.90, -0.60, +4.10, -8.70, +0.30, + +4.50, -0.10, +5.00, -8.10, +0.50), + ncol=5,byrow=TRUE) + Xreal <- TransfoParam_GR5J(ParamIn=Xtran,Direction="TR") diff --git a/tests/example_TransfoParam_GR6J.R b/tests/example_TransfoParam_GR6J.R new file mode 100644 index 00000000..1bd48fa4 --- /dev/null +++ b/tests/example_TransfoParam_GR6J.R @@ -0,0 +1,15 @@ +require(airGR) + +## transformation Real->Transformed for the GR6J model + Xreal <- matrix( c( 221.41, -1.18, 27.11, 1.37, -0.18, 20.09, + 347.23, -0.52, 60.34, 1.76, 0.02, 54.60, + 854.06, 0.52, 148.41, 2.34, 0.22, 148.41), + ncol=6,byrow=TRUE) + Xtran <- TransfoParam_GR6J(ParamIn=Xreal,Direction="RT") + +## transformation Transformed->Real for the GR6J model + Xtran <- matrix( c( +3.60, -1.00, +3.30, -9.10, -0.90, +3.00, + +3.90, -0.50, +4.10, -8.70, +0.10, +4.00, + +4.50, +0.50, +5.00, -8.10, +1.10, +5.00), + ncol=6,byrow=TRUE) + Xreal <- TransfoParam_GR6J(ParamIn=Xtran,Direction="TR") diff --git a/tests/example_plot_OutputsModel.R b/tests/example_plot_OutputsModel.R new file mode 100644 index 00000000..f2df3057 --- /dev/null +++ b/tests/example_plot_OutputsModel.R @@ -0,0 +1,54 @@ +#### example 1 without snow module + +## load of catchment data +require(airGR) +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="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_GR4J,InputsModel=InputsModel,IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(734.568,-0.840,109.809,1.971) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_GR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + + +#### example 2 with snow module + +## load of catchment data +require(airGR) +data(L0123002) + +## preparation of the InputsModel object +InputsModel <- CreateInputsModel(FUN_MOD=RunModel_CemaNeigeGR4J,DatesR=BasinObs$DatesR, + Precip=BasinObs$P,PotEvap=BasinObs$E,TempMean=BasinObs$T, + HypsoData=BasinInfo$HypsoCurve,NLayers=5) + +## run period selection +Ind_Run <- seq(which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="01/01/1990 00:00"), + which(format(BasinObs$DatesR,format="%d/%m/%Y %H:%M")=="31/12/1999 00:00")) + +## preparation of the RunOptions object +RunOptions <- CreateRunOptions(FUN_MOD=RunModel_CemaNeigeGR4J,InputsModel=InputsModel, + IndPeriod_Run=Ind_Run) + +## simulation +Param <- c(408.774,2.646,131.264,1.174,0.962,2.249) +OutputsModel <- RunModel(InputsModel=InputsModel,RunOptions=RunOptions,Param=Param, + FUN_MOD=RunModel_CemaNeigeGR4J) + +## results preview +plot_OutputsModel(OutputsModel=OutputsModel,Qobs=BasinObs$Qmm[Ind_Run]) + + -- GitLab