CreateInputsModel.R 10.47 KiB
CreateInputsModel <- function(FUN_MOD,
                              DatesR,
                              Precip, PrecipScale = TRUE,
                              PotEvap = NULL,
                              TempMean = NULL, TempMin = NULL, TempMax = NULL,
                              ZInputs = NULL, HypsoData = NULL, NLayers = 5,
                              verbose = TRUE) {
    ObjectClass <- NULL
    FUN_MOD <- match.fun(FUN_MOD)
    ##check_FUN_MOD
    BOOL <- FALSE
    if (identical(FUN_MOD, RunModel_GR4H)) {
      ObjectClass <- c(ObjectClass, "hourly", "GR")
      TimeStep <- as.integer(60 * 60)
      BOOL <- TRUE
    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_GR2M)) {
      ObjectClass <- c(ObjectClass, "GR", "monthly")
      TimeStep <- as.integer(c(28, 29, 30, 31) * 24 * 60 * 60)
      BOOL <- TRUE
    if (identical(FUN_MOD, RunModel_GR1A)) {
      ObjectClass <- c(ObjectClass, "GR", "yearly")
      TimeStep <- as.integer(c(365, 366) * 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 (identical(FUN_MOD, RunModel_CemaNeigeGR4H)) {
      ObjectClass <- c(ObjectClass, "hourly", "GR", "CemaNeige")
      TimeStep <- as.integer(60 * 60)
      BOOL <- TRUE
    if (!BOOL) {
      stop("incorrect 'FUN_MOD' for use in 'CreateInputsModel'")
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
} ##check_arguments if ("GR" %in% ObjectClass | "CemaNeige" %in% ObjectClass) { if (is.null(DatesR)) { stop("'DatesR' is missing") } if (!"POSIXlt" %in% class(DatesR) & !"POSIXct" %in% class(DatesR)) { stop("'DatesR' must be defined as 'POSIXlt' or 'POSIXct'") } if (!"POSIXlt" %in% class(DatesR)) { DatesR <- as.POSIXlt(DatesR) } if (!difftime(tail(DatesR, 1), tail(DatesR, 2), units = "secs")[[1]] %in% TimeStep) { TimeStepName <- grep("hourly|daily|monthly|yearly", ObjectClass, value = TRUE) stop(paste0("the time step of the model inputs must be ", TimeStepName, "\n")) } if (any(duplicated(DatesR))) { stop("'DatesR' must not include duplicated values") } LLL <- length(DatesR) } if ("GR" %in% ObjectClass) { if (is.null(Precip)) { stop("Precip is missing") } if (is.null(PotEvap)) { stop("'PotEvap' is missing") } if (!is.vector(Precip) | !is.vector(PotEvap)) { stop("'Precip' and 'PotEvap' must be vectors of numeric values") } if (!is.numeric(Precip) | !is.numeric(PotEvap)) { stop("'Precip' and 'PotEvap' must be vectors of numeric values") } if (length(Precip) != LLL | length(PotEvap) != LLL) { stop("'Precip', 'PotEvap' and 'DatesR' must have the same length") } } if ("CemaNeige" %in% ObjectClass) { if (is.null(Precip)) { stop("'Precip' is missing") } if (is.null(TempMean)) { stop("'TempMean' is missing") } if (!is.vector(Precip) | !is.vector(TempMean)) { stop("'Precip' and 'TempMean' must be vectors of numeric values") } if (!is.numeric(Precip) | !is.numeric(TempMean)) { stop("'Precip' and 'TempMean' must be vectors of numeric values") } if (length(Precip) != LLL | length(TempMean) != LLL) { stop("'Precip', 'TempMean' and 'DatesR' must have the same length") } if (is.null(TempMin) != is.null(TempMax)) { stop("'TempMin' and 'TempMax' must be both defined if not 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") } if (!is.numeric(TempMin) | !is.numeric(TempMax)) { stop("'TempMin' and 'TempMax' must be vectors of numeric values") } if (length(TempMin) != LLL | length(TempMax) != LLL) { stop("'TempMin', 'TempMax' and 'DatesR' must have the same length") } } if (!is.null(HypsoData)) {