From 5951ebb91602c28ecd1b155186c3ad12ce71e321 Mon Sep 17 00:00:00 2001 From: Delaigue Olivier <olivier.delaigue@irstea.priv> Date: Mon, 1 Apr 2019 16:38:29 +0200 Subject: [PATCH] v1.2.13.0 NEW: add ISHyst argument in CreateIniStates --- DESCRIPTION | 2 +- NEWS.rmd | 4 ++-- R/CreateIniStates.R | 46 ++++++++++++++++++++++++++++++++++-------- man/CreateIniStates.Rd | 4 +++- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 556e94cf..a4d98026 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: airGR Type: Package Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling -Version: 1.2.12.34 +Version: 1.2.13.0 Date: 2019-04-01 Authors@R: c( person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), diff --git a/NEWS.rmd b/NEWS.rmd index 11251829..2a9a10a6 100644 --- a/NEWS.rmd +++ b/NEWS.rmd @@ -13,7 +13,7 @@ output: -### 1.2.12.34 Release Notes (2019-04-01) +### 1.2.13.0 Release Notes (2019-04-01) @@ -41,7 +41,7 @@ output: - <code>CreateInputsCrit()</code> now returns a <code>idLayer</code> element to indicate which layer to use for SCA or SWE aggregation. -- <code>CreateRunOptions()</code> now presents a <code>IsHyst</code> argument to give the possibility to use the hysteresis with CemaNeige. +- <code>CreateRunOptions()</code>, <code>CreateIniStates()</code> and <code>CreateCalibOptions()</code> now present a <code>IsHyst</code> argument to give the possibility to use the hysteresis with CemaNeige. - <code>CreateRunOptions()</code> now presents a <code>warnings</code> argument to replace the verbose action (the <code>verbose</code> argument is kept to print messages). diff --git a/R/CreateIniStates.R b/R/CreateIniStates.R index 989b3426..17795fe9 100644 --- a/R/CreateIniStates.R +++ b/R/CreateIniStates.R @@ -1,4 +1,4 @@ -CreateIniStates <- function(FUN_MOD, InputsModel, +CreateIniStates <- function(FUN_MOD, InputsModel, IsHyst = FALSE, ProdStore = 350, RoutStore = 90, ExpStore = NULL, UH1 = NULL, UH2 = NULL, GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, @@ -44,7 +44,10 @@ CreateIniStates <- function(FUN_MOD, InputsModel, BOOL <- TRUE } if (!BOOL) { - stop("Incorrect 'FUN_MOD' for use in 'CreateIniStates'") + stop("incorrect 'FUN_MOD' for use in 'CreateIniStates'") + } + if (!"CemaNeige" %in% ObjectClass & IsHyst) { + stop("'IsHyst' cannot be TRUE if CemaNeige is not used in 'FUN_MOD'") } ## check InputsModel @@ -130,17 +133,32 @@ CreateIniStates <- function(FUN_MOD, InputsModel, } UH2 <- rep(Inf, UH2n) } - if("CemaNeige" %in% ObjectClass & + if("CemaNeige" %in% ObjectClass & !IsHyst & (is.null(GCemaNeigeLayers) | is.null(eTGCemaNeigeLayers))) { - stop(sprintf("'%s' need values for 'GCemaNeigeLayers' and 'GCemaNeigeLayers'", nameFUN_MOD)) + stop(sprintf("'%s' need values for 'GCemaNeigeLayers' and 'GCemaNeigeLayers'", nameFUN_MOD)) + } + if("CemaNeige" %in% ObjectClass & IsHyst & + (is.null(GCemaNeigeLayers) | is.null(eTGCemaNeigeLayers) | + is.null(GthrCemaNeigeLayers) | is.null(GlocmaxCemaNeigeLayers))) { + stop(sprintf("'%s' need values for 'GCemaNeigeLayers', 'GCemaNeigeLayers', 'GthrCemaNeigeLayers' and 'GlocmaxCemaNeigeLayers'", nameFUN_MOD)) + } + if("CemaNeige" %in% ObjectClass & !IsHyst & + (!is.null(GthrCemaNeigeLayers) | !is.null(GlocmaxCemaNeigeLayers))) { + if (verbose) { + warning(sprintf("'%s' does not require 'GthrCemaNeigeLayers' and 'GlocmaxCemaNeigeLayers'. Values set to NA", nameFUN_MOD)) + } + GthrCemaNeigeLayers <- Inf + GlocmaxCemaNeigeLayers <- Inf } if(!"CemaNeige" %in% ObjectClass & - (!is.null(GCemaNeigeLayers) | !is.null(eTGCemaNeigeLayers))) { + (!is.null(GCemaNeigeLayers) | !is.null(eTGCemaNeigeLayers) | !is.null(GthrCemaNeigeLayers) | !is.null(GlocmaxCemaNeigeLayers))) { if (verbose) { - warning(sprintf("'%s' does not require 'GCemaNeigeLayers' and 'GCemaNeigeLayers'. Values set to NA", nameFUN_MOD)) + warning(sprintf("'%s' does not require 'GCemaNeigeLayers' 'GCemaNeigeLayers', 'GthrCemaNeigeLayers' and 'GlocmaxCemaNeigeLayers'. Values set to NA", nameFUN_MOD)) } - GCemaNeigeLayers <- Inf - eTGCemaNeigeLayers <- Inf + GCemaNeigeLayers <- Inf + eTGCemaNeigeLayers <- Inf + GthrCemaNeigeLayers <- Inf + GlocmaxCemaNeigeLayers <- Inf } @@ -222,6 +240,14 @@ CreateIniStates <- function(FUN_MOD, InputsModel, if (!is.numeric(eTGCemaNeigeLayers) || length(eTGCemaNeigeLayers) != NLayers) { stop(sprintf("'eTGCemaNeigeLayers' must be numeric of length %i", NLayers)) } + if (IsHyst) { + if (!is.numeric(GthrCemaNeigeLayers) || length(GthrCemaNeigeLayers) != NLayers) { + stop(sprintf("'eTGCemaNeigeLayers' must be numeric of length %i", NLayers)) + } + if (!is.numeric(GlocmaxCemaNeigeLayers) || length(GlocmaxCemaNeigeLayers) != NLayers) { + stop(sprintf("'eTGCemaNeigeLayers' must be numeric of length %i", NLayers)) + } + } ## format output @@ -234,6 +260,10 @@ CreateIniStates <- function(FUN_MOD, InputsModel, IniStatesNA <- relist(IniStatesNA, skeleton = IniStates) class(IniStatesNA) <- c("IniStates", ObjectClass) + if(IsHyst) { + class(IniStatesNA) <- c(class(IniStatesNA), "hysteresis") + } + return(IniStatesNA) diff --git a/man/CreateIniStates.Rd b/man/CreateIniStates.Rd index f6ab0da1..430c642a 100644 --- a/man/CreateIniStates.Rd +++ b/man/CreateIniStates.Rd @@ -9,7 +9,7 @@ \usage{ -CreateIniStates(FUN_MOD, InputsModel, +CreateIniStates(FUN_MOD, InputsModel, IsHyst = FALSE, ProdStore = 350, RoutStore = 90, ExpStore = NULL, UH1 = NULL, UH2 = NULL, GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, @@ -23,6 +23,8 @@ CreateIniStates(FUN_MOD, InputsModel, \item{InputsModel}{[object of class \code{InputsModel}] see \code{\link{CreateInputsModel}} for details} +\item{IsHyst}{[boolean] boolean indicating if the hysteresis version of CemaNeige is used. See details} + \item{ProdStore}{[numeric] production store level [mm]} \item{RoutStore}{[numeric] routing store level [mm]} -- GitLab