Commit 8a533d60 authored by Delaigue Olivier's avatar Delaigue Olivier
Browse files

v1.2.9.9 UPDATE: new checks added in PEdaily_Oudin

parent 7175007b
Package: airGR Package: airGR
Type: Package Type: Package
Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
Version: 1.2.9.8 Version: 1.2.9.9
Date: 2019-03-13 Date: 2019-03-18
Authors@R: c( Authors@R: c(
person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
person("Charles", "Perrin", role = c("aut", "ths"), comment = c(ORCID = "0000-0001-8552-1881")), person("Charles", "Perrin", role = c("aut", "ths"), comment = c(ORCID = "0000-0001-8552-1881")),
......
...@@ -13,7 +13,7 @@ output: ...@@ -13,7 +13,7 @@ output:
### 1.2.9.8 Release Notes (2019-03-13) ### 1.2.9.9 Release Notes (2019-03-18)
...@@ -60,6 +60,8 @@ output: ...@@ -60,6 +60,8 @@ output:
- It is now possible to be redirected on the documantation about <code>plot.OutputsModel()</code> with <code>?plot</code>. - It is now possible to be redirected on the documantation about <code>plot.OutputsModel()</code> with <code>?plot</code>.
- <code>plot.OutputsModel()</code> does not return a warning message anymore when <code>Qobs = NULL</code>.
- It is now possible to use a character vector the function name (in addition to function objects) in all <code>FUN_&#42;</code> arguments of the following functions: <code>Calibration()</code>, <code>Calibration_Michel()</code>, <code>CreateCalibOptions()</code>, <code>CreateIniStates()</code>, <code>CreateIniStates()</code>, <code>CreateInputsCrit()</code>, <code>CreateInputsModel()</code>, <code>CreateRunOptions()</code>, <code>ErrorCrit()</code>, <code>RunModel()</code> and <code>TransfoParam()</code>. - It is now possible to use a character vector the function name (in addition to function objects) in all <code>FUN_&#42;</code> arguments of the following functions: <code>Calibration()</code>, <code>Calibration_Michel()</code>, <code>CreateCalibOptions()</code>, <code>CreateIniStates()</code>, <code>CreateIniStates()</code>, <code>CreateInputsCrit()</code>, <code>CreateInputsModel()</code>, <code>CreateRunOptions()</code>, <code>ErrorCrit()</code>, <code>RunModel()</code> and <code>TransfoParam()</code>.
......
...@@ -9,10 +9,10 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) { ...@@ -9,10 +9,10 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) {
Lat <- LatRad Lat <- LatRad
} }
} }
if (!inherits(JD, "numeric")) { if (!(inherits(JD, "numeric") | inherits(JD, "integer"))) {
stop("'JD' must be of class 'numeric'") stop("'JD' must be of class 'numeric'")
} }
if (!inherits(Temp, "numeric")) { if (!(inherits(Temp, "numeric") | inherits(Temp, "integer"))) {
stop("'Temp' must be of class 'numeric'") stop("'Temp' must be of class 'numeric'")
} }
if (length(JD) != length(Temp)) { if (length(JD) != length(Temp)) {
...@@ -24,12 +24,21 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) { ...@@ -24,12 +24,21 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) {
if (!inherits(Lat, "numeric") | length(Lat) != 1) { if (!inherits(Lat, "numeric") | length(Lat) != 1) {
stop("'Lat' must be a 'numeric' of length one") stop("'Lat' must be a 'numeric' of length one")
} }
if (LatUnit[1L] == "rad" & ((Lat >= pi/2) | (Lat <= -pi/2))) {
stop("'Lat' must be comprised between -pi/2 and +pi/2 degrees")
}
if (LatUnit[1L] == "deg" & ((Lat >= 90) | (Lat <= -90))) {
stop("'Lat' must be comprised between -90 and +90 degrees")
}
if (LatUnit[1L] == "rad") { if (LatUnit[1L] == "rad") {
FI <- Lat FI <- Lat
} }
if (LatUnit[1L] == "deg") { if (LatUnit[1L] == "deg") {
FI <- Lat / (180 / pi) FI <- Lat / (180 / pi)
} }
if (any(JD < 0) | any(JD > 366)) {
stop("'JD' must only contain integers from 1 to 366")
}
## ---------- Oudin's formula ## ---------- Oudin's formula
...@@ -71,14 +80,29 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) { ...@@ -71,14 +80,29 @@ PEdaily_Oudin <- function(JD, Temp, LatRad, Lat, LatUnit = c("rad", "deg")) {
ETA <- 1 + cos(JD[k] / 58.1) / 30 ETA <- 1 + cos(JD[k] / 58.1) / 30
GE <- 446 * OM * COSPZ * ETA GE <- 446 * OM * COSPZ * ETA
if (is.na(Temp[k])) {
PE_Oudin_D[k] <- NA
} else {
if (Temp[k] >= -5.0) { if (Temp[k] >= -5.0) {
PE_Oudin_D[k] <- GE * (Temp[k] + 5) / 100 / 28.5 PE_Oudin_D[k] <- GE * (Temp[k] + 5) / 100 / 28.5
} else { } else {
PE_Oudin_D[k] <- 0 PE_Oudin_D[k] <- 0
} }
}
} }
if (any(is.na(Temp))) {
if (any(is.na(PE_Oudin_D))) {
warning("'Temp' time series, and therefore the returned 'PE' time series, contain missing value(s)")
} else {
warning("'Temp' time series contains missing value(s)")
}
}
if (!any(is.na(Temp)) & any(is.na(PE_Oudin_D))) {
warning("returned 'PE' time series contains missing value(s)")
}
return(PE_Oudin_D) return(PE_Oudin_D)
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment