diff --git a/DESCRIPTION b/DESCRIPTION index ebb163c8e52cd9ba71e48ff7b432225264c1116b..602dbb959ded669129b67546d8f910e6d0ee4bff 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: airGR Type: Package Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling -Version: 1.6.3.17 -Date: 2020-10-15 +Version: 1.6.3.18 +Date: 2020-10-16 Authors@R: c( person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), person("Olivier", "Delaigue", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7668-8468"), email = "airGR@inrae.fr"), diff --git a/NEWS.md b/NEWS.md index 57ff5070bf9d007ac07e346da0f864142874e6e4..e725ac14f1b3387898c013e9835a3c2f415c62ee 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,7 @@ -### 1.6.3.17 Release Notes (2020-10-15) +### 1.6.3.18 Release Notes (2020-10-16) #### New features diff --git a/R/PE_Oudin.R b/R/PE_Oudin.R index 07b64ea1f3ae7d5b02a39cdba49398f5bbefd55c..54198f181dad65856df99b21d9ee01de9d0107b6 100644 --- a/R/PE_Oudin.R +++ b/R/PE_Oudin.R @@ -6,12 +6,6 @@ PE_Oudin <- function(JD, Temp, ## ---------- check arguments - # if (!missing(LatRad)) { - # warning("Deprecated 'LatRad' argument. Please, use 'Lat' instead.") - # if (missing(Lat)) { - # Lat <- LatRad - # } - # } if (!(inherits(JD, "numeric") | inherits(JD, "integer"))) { stop("'JD' must be of class 'numeric'") } @@ -21,7 +15,6 @@ PE_Oudin <- function(JD, Temp, if (length(JD) != length(Temp)) { stop("'JD' and 'Temp' must have the same length") } - if (!RunFortran & (!inherits(Lat, "numeric") | length(Lat) != 1)) { stop("'Lat' must be a 'numeric' of length one") } @@ -67,8 +60,7 @@ PE_Oudin <- function(JD, Temp, ## ---------- Oudin's formula - if (RunFortran) - { + if (RunFortran) { if (LatUnit[1L] == "rad") { Lat = Lat * 180 / pi } @@ -79,7 +71,7 @@ PE_Oudin <- function(JD, Temp, Lat = rep(Lat, LInputs) } - RESULTS <- .Fortran("frun_etp_oudin", PACKAGE="airGR", + RESULTS <- .Fortran("frun_etp_oudin", PACKAGE = "airGR", ##inputs LInputs = LInputs, InputsLAT = as.double(Lat), @@ -92,57 +84,57 @@ PE_Oudin <- function(JD, Temp, } else { - PE_Oudin_D <- rep(NA, length(Temp)) - COSFI <- cos(FI) - AFI <- abs(FI / 42) - - for (k in seq_along(Temp)) { - - TETA <- 0.4093 * sin(JD[k] / 58.1 - 1.405) - COSTETA <- cos(TETA) - COSGZ <- max(0.001, cos(FI - TETA)) - GZ <- acos(COSGZ) - COSOM <- 1 - COSGZ / COSFI / COSTETA - - if (COSOM < -1) { - COSOM <- -1 - } - if (COSOM > 1) { - COSOM <- 1 - } - - COSOM2 <- COSOM * COSOM + PE_Oudin_D <- rep(NA, length(Temp)) + COSFI <- cos(FI) + AFI <- abs(FI / 42) - 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 (is.na(Temp[k])) { - PE_Oudin_D[k] <- NA - } else { - if (Temp[k] >= -5.0) { - PE_Oudin_D[k] <- GE * (Temp[k] + 5) / 100 / 28.5 + for (k in seq_along(Temp)) { + + TETA <- 0.4093 * sin(JD[k] / 58.1 - 1.405) + COSTETA <- cos(TETA) + COSGZ <- max(0.001, cos(FI - TETA)) + GZ <- acos(COSGZ) + COSOM <- 1 - COSGZ / COSFI / COSTETA + + if (COSOM < -1) { + COSOM <- -1 + } + if (COSOM > 1) { + COSOM <- 1 + } + + COSOM2 <- COSOM * COSOM + + if (COSOM2 >= 1) { + SINOM <- 0 } else { - PE_Oudin_D[k] <- 0 + 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 (is.na(Temp[k])) { + PE_Oudin_D[k] <- NA + } else { + if (Temp[k] >= -5.0) { + PE_Oudin_D[k] <- GE * (Temp[k] + 5) / 100 / 28.5 + } else { + PE_Oudin_D[k] <- 0 + } + } + } } - } - ## ---------- disaggregate PE from daily to hourly if (TimeStepOut == "hourly") {