From e893d6a3077bce1bf7bff05615dd36cd135a2877 Mon Sep 17 00:00:00 2001 From: Delaigue Olivier <olivier.delaigue@irstea.fr> Date: Thu, 25 Mar 2021 15:48:15 +0100 Subject: [PATCH] style: harmonization of RunModel_* codes --- R/RunModel_CemaNeige.R | 33 ++++++--------- R/RunModel_CemaNeigeGR4H.R | 12 +++--- R/RunModel_CemaNeigeGR4J.R | 22 ++++++---- R/RunModel_CemaNeigeGR5H.R | 12 +++--- R/RunModel_CemaNeigeGR5J.R | 21 ++++----- R/RunModel_CemaNeigeGR6J.R | 81 +++++++++++++++++------------------ R/RunModel_GR1A.R | 45 +++++++++----------- R/RunModel_GR2M.R | 82 +++++++++++++++++------------------ R/RunModel_GR4H.R | 87 +++++++++++++++++++------------------- R/RunModel_GR4J.R | 76 +++++++++++++++++---------------- R/RunModel_GR5H.R | 21 ++++----- R/RunModel_GR5J.R | 25 +++++------ R/RunModel_GR6J.R | 25 +++++------ 13 files changed, 273 insertions(+), 269 deletions(-) diff --git a/R/RunModel_CemaNeige.R b/R/RunModel_CemaNeige.R index 8d2fb384..ce2e4a69 100644 --- a/R/RunModel_CemaNeige.R +++ b/R/RunModel_CemaNeige.R @@ -40,18 +40,16 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { } ## Input data preparation - if (identical(RunOptions$IndPeriod_WarmUp, as.integer(0))) { + if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL } IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp, RunOptions$IndPeriod_Run) - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):length(IndPeriod1) + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):length(IndPeriod1) + ## Output data preparation ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - - - - + ## CemaNeige________________________________________________________________________________ ParamCemaNeige <- Param NLayers <- length(InputsModel$LayerPrecip) @@ -65,9 +63,8 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { } else { IndOutputsCemaNeige <- which(FortranOutputsCemaNeige %in% RunOptions$Outputs_Sim) } - - CemaNeigeLayers <- list() - CemaNeigeStateEnd <- NULL + CemaNeigeLayers <- list() + CemaNeigeStateEnd <- NULL NameCemaNeigeLayers <- "CemaNeigeLayers" @@ -88,23 +85,18 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { MeanAnSolidPrecip = RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] NParam = as.integer(NParamCN), ### number of model parameters = 2 or 4 Param = as.double(ParamCemaNeige), ### parameter set - NStates = as.integer(NStates), ### number of state variables used for model initialisation = 4 + NStates = as.integer(NStates), ### number of state variables used for model initialising = 4 StateStart = StateStartCemaNeige, ### state variables used when the model run starts IsHyst = as.integer(IsHyst), ### use of hysteresis NOutputs = as.integer(length(IndOutputsCemaNeige)), ### number of output series IndOutputs = IndOutputsCemaNeige, ### indices of output series ## outputs - Outputs = matrix(-99e9, ### output series [mm, mm/time step or degC] - nrow = length(IndPeriod1), - ncol = length(IndOutputsCemaNeige)), - StateEnd = rep(-99e9, NStates) ### state variables at the end of the model run + Outputs = matrix(as.double(-99e9), nrow = length(IndPeriod1), ncol = length(IndOutputsCemaNeige)), ### output series [mm, mm/time step or degC] + StateEnd = rep(as.double(-99e9), NStates) ### state variables at the end of the model run ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA - - - ## Data storage CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]) names(CemaNeigeLayers[[iLayer]]) <- FortranOutputsCemaNeige[IndOutputsCemaNeige] @@ -112,7 +104,6 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { CemaNeigeStateEnd <- c(CemaNeigeStateEnd, RESULTS$StateEnd) } rm(RESULTS) - } ### ENDFOR iLayer names(CemaNeigeLayers) <- sprintf("Layer%02i", seq_len(NLayers)) @@ -130,20 +121,24 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { } ## Output data preparation + ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { OutputsModel <- list(CemaNeigeLayers) names(OutputsModel) <- NameCemaNeigeLayers } + ## DatesR and OutputsModel only if (ExportDatesR & !ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), list(CemaNeigeLayers)) names(OutputsModel) <- c("DatesR", NameCemaNeigeLayers) } + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(CemaNeigeLayers), list(CemaNeigeStateEnd)) names(OutputsModel) <- c(NameCemaNeigeLayers, "StateEnd") } + ## DatesR and OutputsModel and StateEnd if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), list(CemaNeigeLayers), @@ -151,11 +146,11 @@ RunModel_CemaNeige <- function(InputsModel, RunOptions, Param) { names(OutputsModel) <- c("DatesR", NameCemaNeigeLayers, "StateEnd") } - ## End class(OutputsModel) <- c("OutputsModel", time_step, "CemaNeige") if(IsHyst) { class(OutputsModel) <- c(class(OutputsModel), "hysteresis") } return(OutputsModel) + } diff --git a/R/RunModel_CemaNeigeGR4H.R b/R/RunModel_CemaNeigeGR4H.R index 735112c2..bda65ddb 100644 --- a/R/RunModel_CemaNeigeGR4H.R +++ b/R/RunModel_CemaNeigeGR4H.R @@ -61,7 +61,7 @@ RunModel_CemaNeigeGR4H <- function(InputsModel, RunOptions, Param) { } IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp, RunOptions$IndPeriod_Run) LInputSeries <- as.integer(length(IndPeriod1)) - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):LInputSeries + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ParamCemaNeige <- Param[(length(Param) - 1 - 2 * as.integer(IsHyst)):length(Param)] NParamMod <- as.integer(length(Param) - (2 + 2 * as.integer(IsHyst))) ParamMod <- Param[1:NParamMod] @@ -102,7 +102,7 @@ RunModel_CemaNeigeGR4H <- function(InputsModel, RunOptions, Param) { MeanAnSolidPrecip = RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] NParam = as.integer(NParamCN), ### number of model parameters = 2 or 4 Param = as.double(ParamCemaNeige), ### parameter set - NStates = as.integer(NStates), ### number of state variables used for model initialisation = 4 + NStates = as.integer(NStates), ### number of state variables used for model initialising = 4 StateStart = StateStartCemaNeige, ### state variables used when the model run starts IsHyst = as.integer(IsHyst), ### use of hysteresis NOutputs = as.integer(length(IndOutputsCemaNeige)), ### number of output series @@ -197,21 +197,21 @@ RunModel_CemaNeigeGR4H <- function(InputsModel, RunOptions, Param) { names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } ## DatesR and OutputsModel only - if ( ExportDatesR & !ExportStateEnd) { + if (ExportDatesR & !ExportStateEnd) { 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", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), list(RESULTS$StateEnd)) names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - ## DatesR and OutputsModel and SateEnd - if ( ExportDatesR & ExportStateEnd) { + ## DatesR and OutputsModel and StateEnd + if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), diff --git a/R/RunModel_CemaNeigeGR4J.R b/R/RunModel_CemaNeigeGR4J.R index d7105bea..6ff79a43 100644 --- a/R/RunModel_CemaNeigeGR4J.R +++ b/R/RunModel_CemaNeigeGR4J.R @@ -39,6 +39,7 @@ RunModel_CemaNeigeGR4J <- function(InputsModel, RunOptions, Param) { } Param <- as.double(Param) + Param_X1X3_threshold <- 1e-2 Param_X4_threshold <- 0.5 if (Param[1L] < Param_X1X3_threshold) { @@ -60,12 +61,14 @@ RunModel_CemaNeigeGR4J <- function(InputsModel, RunOptions, Param) { } 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 - 2 * as.integer(IsHyst)):length(Param)] - NParamMod <- as.integer(length(Param) - (2 + 2*as.integer(IsHyst))) + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries + ParamCemaNeige <- Param[(length(Param) - 1 - 2 * as.integer(IsHyst)):length(Param)] + NParamMod <- as.integer(length(Param) - (2 + 2 * as.integer(IsHyst))) ParamMod <- Param[1:NParamMod] NLayers <- length(InputsModel$LayerPrecip) NStatesMod <- as.integer(length(RunOptions$IniStates) - NStates * NLayers) + + ## Output data preparation ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim @@ -117,7 +120,7 @@ RunModel_CemaNeigeGR4J <- function(InputsModel, RunOptions, Param) { if (iLayer == 1) { CatchMeltAndPliq <- RESULTS$Outputs[, IndPliqAndMelt] / NLayers } - if (iLayer >1) { + if (iLayer > 1) { CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[, IndPliqAndMelt] / NLayers } if (ExportStateEnd) { @@ -172,7 +175,8 @@ RunModel_CemaNeigeGR4J <- function(InputsModel, RunOptions, Param) { idNStates <- seq_len(NStates*NLayers) %% NStates RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_CemaNeigeGR4J, InputsModel = InputsModel, IsHyst = IsHyst, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = RESULTS$StateEnd[(1:20) + 7], UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + UH1 = RESULTS$StateEnd[(1:20) + 7], + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], GCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 1]], eTGCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 2]], GthrCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 3]], @@ -192,21 +196,21 @@ RunModel_CemaNeigeGR4J <- function(InputsModel, RunOptions, Param) { names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } ## DatesR and OutputsModel only - if ( ExportDatesR & !ExportStateEnd) { + if (ExportDatesR & !ExportStateEnd) { 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", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), list(RESULTS$StateEnd)) names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - ## DatesR and OutputsModel and Sate - if ( ExportDatesR & ExportStateEnd) { + ## DatesR and OutputsModel and StateEnd + if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), diff --git a/R/RunModel_CemaNeigeGR5H.R b/R/RunModel_CemaNeigeGR5H.R index dc259454..0a4995fb 100644 --- a/R/RunModel_CemaNeigeGR5H.R +++ b/R/RunModel_CemaNeigeGR5H.R @@ -67,7 +67,7 @@ RunModel_CemaNeigeGR5H <- function(InputsModel, RunOptions, Param) { } IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp, RunOptions$IndPeriod_Run) LInputSeries <- as.integer(length(IndPeriod1)) - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):LInputSeries + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ParamCemaNeige <- Param[(length(Param) - 1 - 2 * as.integer(IsHyst)):length(Param)] NParamMod <- as.integer(length(Param) - (2 + 2 * as.integer(IsHyst))) ParamMod <- Param[1:NParamMod] @@ -108,7 +108,7 @@ RunModel_CemaNeigeGR5H <- function(InputsModel, RunOptions, Param) { MeanAnSolidPrecip = RunOptions$MeanAnSolidPrecip[iLayer], ### value of annual mean solid precip [mm/y] NParam = as.integer(NParamCN), ### number of model parameters = 2 or 4 Param = as.double(ParamCemaNeige), ### parameter set - NStates = as.integer(NStates), ### number of state variables used for model initialisation = 4 + NStates = as.integer(NStates), ### number of state variables used for model initialising = 4 StateStart = StateStartCemaNeige, ### state variables used when the model run starts IsHyst = as.integer(IsHyst), ### use of hysteresis NOutputs = as.integer(length(IndOutputsCemaNeige)), ### number of output series @@ -208,21 +208,21 @@ RunModel_CemaNeigeGR5H <- function(InputsModel, RunOptions, Param) { names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } ## DatesR and OutputsModel only - if ( ExportDatesR & !ExportStateEnd) { + if (ExportDatesR & !ExportStateEnd) { 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", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), list(RESULTS$StateEnd)) names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - ## DatesR and OutputsModel and SateEnd - if ( ExportDatesR & ExportStateEnd) { + ## DatesR and OutputsModel and StateEnd + if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), diff --git a/R/RunModel_CemaNeigeGR5J.R b/R/RunModel_CemaNeigeGR5J.R index b4384d37..a8dabc3c 100644 --- a/R/RunModel_CemaNeigeGR5J.R +++ b/R/RunModel_CemaNeigeGR5J.R @@ -59,9 +59,9 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL } - IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run) + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp, RunOptions$IndPeriod_Run) LInputSeries <- as.integer(length(IndPeriod1)) - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):LInputSeries + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ParamCemaNeige <- Param[(length(Param) - 1 - 2 * as.integer(IsHyst)):length(Param)] NParamMod <- as.integer(length(Param) - (2 + 2 * as.integer(IsHyst))) ParamMod <- Param[1:NParamMod] @@ -90,7 +90,7 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { } else { StateStartCemaNeige <- RunOptions$IniStates[(7 + 20 + 40) + c(iLayer, iLayer+NLayers, iLayer+2*NLayers, iLayer+3*NLayers)] } - RESULTS <- .Fortran("frun_cemaneige", PACKAGE="airGR", + 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] @@ -101,12 +101,12 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { Param = as.double(ParamCemaNeige), ### parameter set NStates = as.integer(NStates), ### number of state variables used for model initialising = 4 StateStart = StateStartCemaNeige, ### state variables used when the model run starts - IsHyst = as.integer(IsHyst), ### use of hysteresis + IsHyst = as.integer(IsHyst), ### use of hysteresis NOutputs = as.integer(length(IndOutputsCemaNeige)), ### number of output series IndOutputs = IndOutputsCemaNeige, ### indices of output series ## outputs - Outputs = matrix(as.double(-99e9), nrow = LInputSeries, ncol = length(IndOutputsCemaNeige)), ### output series [mm, mm/d or degC] - StateEnd = rep(as.double(-99e9), as.integer(NStates)) ### state variables at the end of the model run + Outputs = matrix(as.double(-99e9), nrow = LInputSeries, ncol = length(IndOutputsCemaNeige)), ### output series [mm, mm/d or degC] + StateEnd = rep(as.double(-99e9), as.integer(NStates)) ### state variables at the end of the model run ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA @@ -173,7 +173,8 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { idNStates <- seq_len(NStates*NLayers) %% NStates RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_CemaNeigeGR5J, InputsModel = InputsModel, IsHyst = IsHyst, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = NULL, UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + UH1 = NULL, + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], GCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 1]], eTGCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 2]], GthrCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 3]], @@ -182,7 +183,7 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { } if (inherits(RunOptions, "CemaNeige") & "Precip" %in% RunOptions$Outputs_Sim) { - RESULTS$Outputs[,which(FortranOutputs$GR[IndOutputsMod] == "Precip")] <- InputsModel$Precip[IndPeriod1] + RESULTS$Outputs[, which(FortranOutputs$GR[IndOutputsMod] == "Precip")] <- InputsModel$Precip[IndPeriod1] } ## Output data preparation @@ -199,14 +200,14 @@ RunModel_CemaNeigeGR5J <- function(InputsModel, RunOptions, Param) { list(CemaNeigeLayers)) names(OutputsModel) <- c("DatesR", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), list(RESULTS$StateEnd)) names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - ## DatesR and OutputsModel and SateEnd + ## DatesR and OutputsModel and StateEnd if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), diff --git a/R/RunModel_CemaNeigeGR6J.R b/R/RunModel_CemaNeigeGR6J.R index 278bb6a2..f43bdb43 100644 --- a/R/RunModel_CemaNeigeGR6J.R +++ b/R/RunModel_CemaNeigeGR6J.R @@ -1,14 +1,14 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { - - + + ## Initialization of variables IsHyst <- inherits(RunOptions, "hysteresis") NParam <- ifelse(test = IsHyst, yes = 10L, no = 8L) NParamCN <- NParam - 6L NStates <- 4L FortranOutputs <- .FortranOutputs(GR = "GR6J", isCN = TRUE) - - + + ## Arguments check if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") @@ -38,8 +38,8 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) - - + + Param_X1X3X6_threshold <- 1e-2 Param_X4_threshold <- 0.5 if (Param[1L] < Param_X1X3X6_threshold) { @@ -53,19 +53,19 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { if (Param[4L] < Param_X4_threshold) { warning(sprintf("Param[4] (X4: unit hydrograph time constant [d]) < %.2f\n X4 set to %.2f", Param_X4_threshold, Param_X4_threshold)) Param[4L] <- Param_X4_threshold - } + } if (Param[6L] < Param_X1X3X6_threshold) { warning(sprintf("Param[6] (X6: coefficient for emptying exponential store [mm]) < %.2f\n X6 set to %.2f", Param_X1X3X6_threshold, Param_X1X3X6_threshold)) Param[6L] <- Param_X1X3X6_threshold - } - + } + ## Input data preparation if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL } - IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp,RunOptions$IndPeriod_Run) + IndPeriod1 <- c(RunOptions$IndPeriod_WarmUp, RunOptions$IndPeriod_Run) LInputSeries <- as.integer(length(IndPeriod1)) - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):LInputSeries + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ParamCemaNeige <- Param[(length(Param) - 1 - 2 * as.integer(IsHyst)):length(Param)] NParamMod <- as.integer(length(Param) - (2 + 2 * as.integer(IsHyst))) ParamMod <- Param[1:NParamMod] @@ -73,8 +73,8 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { NStatesMod <- as.integer(length(RunOptions$IniStates) - NStates * NLayers) ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - - + + ## CemaNeige________________________________________________________________________________ if (inherits(RunOptions, "CemaNeige")) { if ("all" %in% RunOptions$Outputs_Sim) { @@ -85,8 +85,8 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { CemaNeigeLayers <- list() CemaNeigeStateEnd <- NULL NameCemaNeigeLayers <- "CemaNeigeLayers" - - + + ## Call CemaNeige Fortran_________________________ for(iLayer in 1:NLayers) { if (!IsHyst) { @@ -105,16 +105,16 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { Param = as.double(ParamCemaNeige), ### parameter set NStates = as.integer(NStates), ### number of state variables used for model initialising = 4 StateStart = StateStartCemaNeige, ### state variables used when the model run starts - IsHyst = as.integer(IsHyst), ### use of hysteresis + IsHyst = as.integer(IsHyst), ### use of hysteresis NOutputs = as.integer(length(IndOutputsCemaNeige)), ### number of output series IndOutputs = IndOutputsCemaNeige, ### indices of output series - ## outputs - Outputs = matrix(as.double(-99e9), nrow = LInputSeries,ncol = length(IndOutputsCemaNeige)), ### output series [mm, mm/d or degC] - StateEnd = rep(as.double(-99e9), as.integer(NStates)) ### state variables at the end of the model run + ## outputs + Outputs = matrix(as.double(-99e9), nrow = LInputSeries, ncol = length(IndOutputsCemaNeige)), ### output series [mm, mm/d or degC] + StateEnd = rep(as.double(-99e9), as.integer(NStates)) ### state variables at the end of the model run ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA - + ## Data storage CemaNeigeLayers[[iLayer]] <- lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]) names(CemaNeigeLayers[[iLayer]]) <- FortranOutputs$CN[IndOutputsCemaNeige] @@ -122,11 +122,11 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { if (iLayer == 1) { CatchMeltAndPliq <- RESULTS$Outputs[, IndPliqAndMelt] / NLayers } - if (iLayer >1 ) { + if (iLayer > 1) { CatchMeltAndPliq <- CatchMeltAndPliq + RESULTS$Outputs[, IndPliqAndMelt] / NLayers } if (ExportStateEnd) { - CemaNeigeStateEnd <- c(CemaNeigeStateEnd,RESULTS$StateEnd) + CemaNeigeStateEnd <- c(CemaNeigeStateEnd, RESULTS$StateEnd) } rm(RESULTS) } ### ENDFOR iLayer @@ -138,23 +138,23 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { NameCemaNeigeLayers <- NULL CatchMeltAndPliq <- InputsModel$Precip[IndPeriod1] } - - - + + + ## GR model______________________________________________________________________________________ if ("all" %in% RunOptions$Outputs_Sim) { IndOutputsMod <- as.integer(1:length(FortranOutputs$GR)) } else { IndOutputsMod <- which(FortranOutputs$GR %in% RunOptions$Outputs_Sim) } - + ## Use of IniResLevels if (!is.null(RunOptions$IniResLevels)) { RunOptions$IniStates[1] <- RunOptions$IniResLevels[1] * ParamMod[1] ### production store level (mm) RunOptions$IniStates[2] <- RunOptions$IniResLevels[2] * ParamMod[3] ### routing store level (mm) RunOptions$IniStates[3] <- RunOptions$IniResLevels[3] ### exponential store level (mm) } - + ## Call GR model Fortan RESULTS <- .Fortran("frun_gr6j", PACKAGE = "airGR", ## inputs @@ -167,29 +167,30 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { 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(-99e9), nrow = LInputSeries,ncol = length(IndOutputsMod)), ### output series [mm or mm/d] - StateEnd = rep(as.double(-99e9), NStatesMod) ### state variables at the end of the model run + ## outputs + Outputs = matrix(as.double(-99e9), nrow = LInputSeries, ncol = length(IndOutputsMod)), ### output series [mm or mm/d] + StateEnd = rep(as.double(-99e9), NStatesMod) ### state variables at the end of the model run ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA if (ExportStateEnd) { - RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ## remove negative values except for the ExpStore location + RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ### remove negative values except for the ExpStore location idNStates <- seq_len(NStates*NLayers) %% NStates RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_CemaNeigeGR6J, InputsModel = InputsModel, IsHyst = IsHyst, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = RESULTS$StateEnd[3L], - UH1 = RESULTS$StateEnd[(1:20) + 7], UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + UH1 = RESULTS$StateEnd[(1:20) + 7], + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], GCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 1]], eTGCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 2]], - GthrCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 3]], + GthrCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 3]], GlocmaxCemaNeigeLayers = CemaNeigeStateEnd[seq_len(NStates*NLayers)[idNStates == 0]], verbose = FALSE) } - + if (inherits(RunOptions, "CemaNeige") & "Precip" %in% RunOptions$Outputs_Sim) { - RESULTS$Outputs[,which(FortranOutputs$GR[IndOutputsMod] == "Precip")] <- InputsModel$Precip[IndPeriod1] + RESULTS$Outputs[, which(FortranOutputs$GR[IndOutputsMod] == "Precip")] <- InputsModel$Precip[IndPeriod1] } - + ## Output data preparation ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { @@ -204,14 +205,14 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { list(CemaNeigeLayers)) names(OutputsModel) <- c("DatesR", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), list(CemaNeigeLayers), list(RESULTS$StateEnd)) names(OutputsModel) <- c(FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - ## DatesR and OutputsModel and SateEnd + ## DatesR and OutputsModel and StateEnd if (ExportDatesR & ExportStateEnd) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), @@ -219,7 +220,7 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { list(RESULTS$StateEnd)) names(OutputsModel) <- c("DatesR", FortranOutputs$GR[IndOutputsMod], NameCemaNeigeLayers, "StateEnd") } - + ## End rm(RESULTS) class(OutputsModel) <- c("OutputsModel", "daily", "GR", "CemaNeige") @@ -227,6 +228,6 @@ RunModel_CemaNeigeGR6J <- function(InputsModel, RunOptions, Param) { class(OutputsModel) <- c(class(OutputsModel), "hysteresis") } return(OutputsModel) - + } diff --git a/R/RunModel_GR1A.R b/R/RunModel_GR1A.R index 39572b1c..620965f0 100644 --- a/R/RunModel_GR1A.R +++ b/R/RunModel_GR1A.R @@ -1,11 +1,11 @@ RunModel_GR1A <- function(InputsModel, RunOptions, Param) { - - + + ## Initialization of variables NParam <- 1 FortranOutputs <- .FortranOutputs(GR = "GR1A")$GR - - + + ## Arguments check if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") @@ -29,8 +29,8 @@ RunModel_GR1A <- function(InputsModel, RunOptions, Param) { stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) - - + + ## Input data preparation if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL @@ -42,16 +42,16 @@ RunModel_GR1A <- function(InputsModel, RunOptions, Param) { } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim) } - - + + ## Output data preparation - IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp) + 1):LInputSeries + IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - - + + ## Call GR model Fortan - RESULTS <- .Fortran("frun_gr1a", PACKAGE = "airGR", + RESULTS <- .Fortran("frun_gr1a", PACKAGE = "airGR", ## inputs LInputs = LInputSeries, ### length of input and output series InputsPrecip = InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/y] @@ -68,8 +68,7 @@ RunModel_GR1A <- function(InputsModel, RunOptions, Param) { ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA - - + ## Output data preparation ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { @@ -78,28 +77,26 @@ RunModel_GR1A <- function(InputsModel, RunOptions, Param) { } ## DatesR and OutputsModel only if (ExportDatesR & !ExportStateEnd) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + 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 + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { - OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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 + ## DatesR and OutputsModel and StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), - lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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 class(OutputsModel) <- c("OutputsModel", "yearly", "GR") return(OutputsModel) - -} +} diff --git a/R/RunModel_GR2M.R b/R/RunModel_GR2M.R index 47bf78cc..e0261695 100644 --- a/R/RunModel_GR2M.R +++ b/R/RunModel_GR2M.R @@ -1,35 +1,35 @@ RunModel_GR2M <- function(InputsModel, RunOptions, Param) { - - + + ## Initialization of variables NParam <- 2 FortranOutputs <- .FortranOutputs(GR = "GR2M")$GR - - + + ## Arguments check if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") - } - if (!inherits(InputsModel, "monthly" )) { - stop("'InputsModel' must be of class 'monthly' ") - } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") - } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") - } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") - } + } + if (!inherits(InputsModel, "monthly")) { + stop("'InputsModel' must be of class 'monthly'") + } + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") + } + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") + } + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") + } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) - + Param_X1X2_threshold <- 1e-2 if (Param[1L] < Param_X1X2_threshold) { warning(sprintf("Param[1] (X1: production store capacity [mm]) < %.2f\n X1 set to %.2f", Param_X1X2_threshold, Param_X1X2_threshold)) @@ -39,7 +39,7 @@ RunModel_GR2M <- function(InputsModel, RunOptions, Param) { warning(sprintf("Param[2] (X2: routing store capacity [mm]) < %.2f\n X2 set to %.2f", Param_X1X2_threshold, Param_X1X2_threshold)) Param[2L] <- Param_X1X2_threshold } - + ## Input data preparation if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL @@ -47,24 +47,24 @@ RunModel_GR2M <- function(InputsModel, RunOptions, Param) { 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)) + IndOutputs <- as.integer(1:length(FortranOutputs)) } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim) } - + ## Output data preparation IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - + ## Use of IniResLevels if (!is.null(RunOptions$IniResLevels)) { RunOptions$IniStates[1] <- RunOptions$IniResLevels[1] * Param[1] ### production store level (mm) RunOptions$IniStates[2] <- RunOptions$IniResLevels[2] * Param[2] ### routing store level (mm) } - + ## Call GR model Fortan - RESULTS <- .Fortran("frun_gr2M", PACKAGE = "airGR", + RESULTS <- .Fortran("frun_gr2m", PACKAGE = "airGR", ## inputs LInputs = LInputSeries, ### length of input and output series InputsPrecip = InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/month] @@ -81,15 +81,15 @@ RunModel_GR2M <- function(InputsModel, RunOptions, Param) { ) RESULTS$Outputs[RESULTS$Outputs <= -99e8] <- NA RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA - if (ExportStateEnd) { - RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR2M, InputsModel = InputsModel, - ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = NULL, UH2 = NULL, - GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, + if (ExportStateEnd) { + RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR2M, InputsModel = InputsModel, + ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, + UH1 = NULL, + UH2 = NULL, + GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } - - + ## Output data preparation ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { @@ -98,27 +98,27 @@ RunModel_GR2M <- function(InputsModel, RunOptions, Param) { } ## DatesR and OutputsModel only if (ExportDatesR & !ExportStateEnd) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + 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 + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { - OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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 + ## DatesR and OutputsModel and StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), - lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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) + rm(RESULTS) class(OutputsModel) <- c("OutputsModel", "monthly", "GR") return(OutputsModel) - + } diff --git a/R/RunModel_GR4H.R b/R/RunModel_GR4H.R index ef7e6e1e..69beb4b0 100644 --- a/R/RunModel_GR4H.R +++ b/R/RunModel_GR4H.R @@ -1,37 +1,37 @@ RunModel_GR4H <- function(InputsModel, RunOptions, Param) { - - + + ## Initialization of variables NParam <- 4 FortranOutputs <- .FortranOutputs(GR = "GR4H")$GR - - + + ## Arguments check if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") - } - if (!inherits(InputsModel, "hourly" )) { - stop("'InputsModel' must be of class 'hourly' ") - } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") - } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") - } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") - } + } + if (!inherits(InputsModel, "hourly")) { + stop("'InputsModel' must be of class 'hourly'") + } + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") + } + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") + } + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") + } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) - + Param_X1X3_threshold <- 1e-2 - Param_X4_threshold <- 0.5 + Param_X4_threshold <- 0.5 if (Param[1L] < Param_X1X3_threshold) { warning(sprintf("Param[1] (X1: production store capacity [mm]) < %.2f\n X1 set to %.2f", Param_X1X3_threshold, Param_X1X3_threshold)) Param[1L] <- Param_X1X3_threshold @@ -43,8 +43,8 @@ RunModel_GR4H <- function(InputsModel, RunOptions, Param) { if (Param[4L] < Param_X4_threshold) { warning(sprintf("Param[4] (X4: unit hydrograph time constant [h]) < %.2f\n X4 set to %.2f", Param_X4_threshold, Param_X4_threshold)) Param[4L] <- Param_X4_threshold - } - + } + ## Input data preparation if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL @@ -52,24 +52,24 @@ RunModel_GR4H <- function(InputsModel, RunOptions, Param) { 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)) + IndOutputs <- as.integer(1:length(FortranOutputs)) } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim) } - + ## Output data preparation IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - + ## Use of IniResLevels if (!is.null(RunOptions$IniResLevels)) { - RunOptions$IniStates[1] <- RunOptions$IniResLevels[1] * Param[1] ### production store level (mm) - RunOptions$IniStates[2] <- RunOptions$IniResLevels[2] * Param[3] ### routing store level (mm) + RunOptions$IniStates[1] <- RunOptions$IniResLevels[1] * Param[1] ### production store level (mm) + RunOptions$IniStates[2] <- RunOptions$IniResLevels[2] * Param[3] ### routing store level (mm) } - + ## Call GR model Fortan - RESULTS <- .Fortran("frun_gr4h", PACKAGE = "airGR", + RESULTS <- .Fortran("frun_gr4h", PACKAGE = "airGR", ## inputs LInputs = LInputSeries, ### length of input and output series InputsPrecip = InputsModel$Precip[IndPeriod1], ### input series of total precipitation [mm/h] @@ -88,13 +88,14 @@ RunModel_GR4H <- function(InputsModel, RunOptions, Param) { RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA if (ExportStateEnd) { RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ### remove negative values except for the ExpStore location - RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR4H, InputsModel = InputsModel, - ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = RESULTS$StateEnd[(1:(20*24)) + 7], UH2 = RESULTS$StateEnd[(1:(40*24)) + (7+20*24)], - GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, + RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR4H, InputsModel = InputsModel, + ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, + UH1 = RESULTS$StateEnd[(1:(20*24)) + 7], + UH2 = RESULTS$StateEnd[(1:(40*24)) + (7+20*24)], + GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } - + ## Output data preparation ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { @@ -103,27 +104,27 @@ RunModel_GR4H <- function(InputsModel, RunOptions, Param) { } ## DatesR and OutputsModel only if (ExportDatesR & !ExportStateEnd) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + 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 + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { - OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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 + ## DatesR and OutputsModel and StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), - lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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) + rm(RESULTS) class(OutputsModel) <- c("OutputsModel", "hourly", "GR") return(OutputsModel) - + } diff --git a/R/RunModel_GR4J.R b/R/RunModel_GR4J.R index c2e93549..0af262be 100644 --- a/R/RunModel_GR4J.R +++ b/R/RunModel_GR4J.R @@ -1,35 +1,35 @@ RunModel_GR4J <- function(InputsModel, RunOptions, Param) { - - + + ## Initialization of variables NParam <- 4 FortranOutputs <- .FortranOutputs(GR = "GR4J")$GR - - + + ## Arguments check if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") - } - if (!inherits(InputsModel, "daily" )) { - stop("'InputsModel' must be of class 'daily' ") - } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") - } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") - } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") - } + } + if (!inherits(InputsModel, "daily")) { + stop("'InputsModel' must be of class 'daily'") + } + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") + } + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") + } + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") + } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) - + Param_X1X3_threshold <- 1e-2 Param_X4_threshold <- 0.5 if (Param[1L] < Param_X1X3_threshold) { @@ -44,7 +44,7 @@ RunModel_GR4J <- function(InputsModel, RunOptions, Param) { warning(sprintf("Param[4] (X4: unit hydrograph time constant [d]) < %.2f\n X4 set to %.2f", Param_X4_threshold, Param_X4_threshold)) Param[4L] <- Param_X4_threshold } - + ## Input data preparation if (identical(RunOptions$IndPeriod_WarmUp, 0L)) { RunOptions$IndPeriod_WarmUp <- NULL @@ -52,23 +52,24 @@ RunModel_GR4J <- function(InputsModel, RunOptions, Param) { 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)) + IndOutputs <- as.integer(1:length(FortranOutputs)) } else { IndOutputs <- which(FortranOutputs %in% RunOptions$Outputs_Sim) } - ## Input data preparation + + ## Output data preparation IndPeriod2 <- (length(RunOptions$IndPeriod_WarmUp)+1):LInputSeries ExportDatesR <- "DatesR" %in% RunOptions$Outputs_Sim ExportStateEnd <- "StateEnd" %in% RunOptions$Outputs_Sim - + ## Use of IniResLevels if (!is.null(RunOptions$IniResLevels)) { RunOptions$IniStates[1] <- RunOptions$IniResLevels[1] * Param[1] ### production store level (mm) RunOptions$IniStates[2] <- RunOptions$IniResLevels[2] * Param[3] ### routing store level (mm) } - + ## Call GR model Fortan - RESULTS <- .Fortran("frun_gr4j", PACKAGE = "airGR", + 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] @@ -87,13 +88,14 @@ RunModel_GR4J <- function(InputsModel, RunOptions, Param) { RESULTS$StateEnd[RESULTS$StateEnd <= -99e8] <- NA if (ExportStateEnd) { RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ### remove negative values except for the ExpStore location - RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel, - ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = RESULTS$StateEnd[(1:20) + 7], UH2 = RESULTS$StateEnd[(1:40) + (7+20)], - GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, + RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel, + ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, + UH1 = RESULTS$StateEnd[(1:20) + 7], + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } - + ## Output data preparation ## OutputsModel only if (!ExportDatesR & !ExportStateEnd) { @@ -102,27 +104,27 @@ RunModel_GR4J <- function(InputsModel, RunOptions, Param) { } ## DatesR and OutputsModel only if (ExportDatesR & !ExportStateEnd) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), + 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 StateEnd only if (!ExportDatesR & ExportStateEnd) { - OutputsModel <- c(lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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 StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { - OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), - lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), + 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) + rm(RESULTS) class(OutputsModel) <- c("OutputsModel", "daily", "GR") return(OutputsModel) - + } diff --git a/R/RunModel_GR5H.R b/R/RunModel_GR5H.R index 9880cc43..58ea098a 100644 --- a/R/RunModel_GR5H.R +++ b/R/RunModel_GR5H.R @@ -16,23 +16,23 @@ RunModel_GR5H <- function(InputsModel, RunOptions, Param) { if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") } - if (!inherits(InputsModel, "hourly" )) { - stop("'InputsModel' must be of class 'hourly' ") + if (!inherits(InputsModel, "hourly")) { + stop("'InputsModel' must be of class 'hourly'") } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) @@ -101,7 +101,8 @@ RunModel_GR5H <- function(InputsModel, RunOptions, Param) { RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR5H, InputsModel = InputsModel, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, IntStore = RESULTS$StateEnd[4L], - UH1 = NULL, UH2 = RESULTS$StateEnd[(1:(40*24)) + (7+20*24)], + UH1 = NULL, + UH2 = RESULTS$StateEnd[(1:(40*24)) + (7+20*24)], GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } diff --git a/R/RunModel_GR5J.R b/R/RunModel_GR5J.R index b14df6fd..fa5f83ac 100644 --- a/R/RunModel_GR5J.R +++ b/R/RunModel_GR5J.R @@ -10,23 +10,23 @@ RunModel_GR5J <- function(InputsModel, RunOptions, Param) { if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") } - if (!inherits(InputsModel, "daily" )) { - stop("'InputsModel' must be of class 'daily' ") + if (!inherits(InputsModel, "daily")) { + stop("'InputsModel' must be of class 'daily'") } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) @@ -90,7 +90,8 @@ RunModel_GR5J <- function(InputsModel, RunOptions, Param) { RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ### remove negative values except for the ExpStore location RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR5J, InputsModel = InputsModel, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = NULL, - UH1 = NULL, UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + UH1 = NULL, + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } @@ -107,13 +108,13 @@ RunModel_GR5J <- function(InputsModel, RunOptions, Param) { lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i])) names(OutputsModel) <- c("DatesR", FortranOutputs[IndOutputs]) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { 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 + ## DatesR and OutputsModel and StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), diff --git a/R/RunModel_GR6J.R b/R/RunModel_GR6J.R index c66d4ba2..572511f7 100644 --- a/R/RunModel_GR6J.R +++ b/R/RunModel_GR6J.R @@ -10,23 +10,23 @@ RunModel_GR6J <- function(InputsModel, RunOptions, Param) { if (!inherits(InputsModel, "InputsModel")) { stop("'InputsModel' must be of class 'InputsModel'") } - if (!inherits(InputsModel, "daily" )) { - stop("'InputsModel' must be of class 'daily' ") + if (!inherits(InputsModel, "daily")) { + stop("'InputsModel' must be of class 'daily'") } - if (!inherits(InputsModel, "GR" )) { - stop("'InputsModel' must be of class 'GR' ") + if (!inherits(InputsModel, "GR")) { + stop("'InputsModel' must be of class 'GR'") } - if (!inherits(RunOptions, "RunOptions" )) { - stop("'RunOptions' must be of class 'RunOptions' ") + if (!inherits(RunOptions, "RunOptions")) { + stop("'RunOptions' must be of class 'RunOptions'") } - if (!inherits(RunOptions, "GR" )) { - stop("'RunOptions' must be of class 'GR' ") + if (!inherits(RunOptions, "GR")) { + stop("'RunOptions' must be of class 'GR'") } if (!is.vector(Param) | !is.numeric(Param)) { stop("'Param' must be a numeric vector") } if (sum(!is.na(Param)) != NParam) { - stop(paste("'Param' must be a vector of length ", NParam, " and contain no NA", sep = "")) + stop(paste("'Param' must be a vector of length", NParam, "and contain no NA")) } Param <- as.double(Param) @@ -95,7 +95,8 @@ RunModel_GR6J <- function(InputsModel, RunOptions, Param) { RESULTS$StateEnd[-3L] <- ifelse(RESULTS$StateEnd[-3L] < 0, 0, RESULTS$StateEnd[-3L]) ### remove negative values except for the ExpStore location RESULTS$StateEnd <- CreateIniStates(FUN_MOD = RunModel_GR6J, InputsModel = InputsModel, ProdStore = RESULTS$StateEnd[1L], RoutStore = RESULTS$StateEnd[2L], ExpStore = RESULTS$StateEnd[3L], - UH1 = RESULTS$StateEnd[(1:20) + 7], UH2 = RESULTS$StateEnd[(1:40) + (7+20)], + UH1 = RESULTS$StateEnd[(1:20) + 7], + UH2 = RESULTS$StateEnd[(1:40) + (7+20)], GCemaNeigeLayers = NULL, eTGCemaNeigeLayers = NULL, verbose = FALSE) } @@ -112,13 +113,13 @@ RunModel_GR6J <- function(InputsModel, RunOptions, Param) { lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i])) names(OutputsModel) <- c("DatesR", FortranOutputs[IndOutputs]) } - ## OutputsModel and SateEnd only + ## OutputsModel and StateEnd only if (!ExportDatesR & ExportStateEnd) { 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 + ## DatesR and OutputsModel and StateEnd if ((ExportDatesR & ExportStateEnd) | "all" %in% RunOptions$Outputs_Sim) { OutputsModel <- c(list(InputsModel$DatesR[RunOptions$IndPeriod_Run]), lapply(seq_len(RESULTS$NOutputs), function(i) RESULTS$Outputs[IndPeriod2, i]), -- GitLab