Description Usage Arguments Details Examples
View source: R/fao_penman_monteith.R
FAO Penman Monteith reference ETo
1 | fao_penman_monteith(Rn, G, gamma, T_C, u2, es, ea)
|
Rn |
net radiation at the crop surface, MJ / m^2 / day |
G |
soil heat flux density, MJ / m^2 / day |
gamma |
psychrometric constant, kPa / deg C |
T_C |
mean daily air temperature at 2 m height, deg C |
u2 |
wind speed at 2 m height, m/s |
es |
saturation vapor pressure, kPa |
ea |
actual vapor pressure, kPa |
This function calculates ETo reference evapotranspiration in mm / day using the FAO Penman-Monteith equation for ETo (FAO 56, Chapter 2, Eq 6):
ETo_mm_day = (0.408 * s * (Rn - G) + gamma * 900 / (T_C + 273) * u2 * (es - ea)) / (s + gamma * (1 + 0.34 * u2))
Note that the equation requires specific units for each variable, as noted above.
es - ea is the saturation vapor pressure deficit, kPa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | ## Example 1: Single value data
lat <- -22.9 # Rio de Janeiro
date <- "2019-05-15"
n <- 220 / 31 # 220 hours in a month / 31 days
N <- get_daylight_hours(lat, date)
Ra <- get_Ra_daily(lat, date)
Rso <- get_Rso_daily(Ra, z = 100)
Rs <- get_Rs_daily(Ra, n, N)
Tmax_C <- 25.1
Tmin_C <- 19.1
ea <- get_ea_from_RHmean(RHmean = 68, Tmax_C = Tmax_C, Tmin_C = Tmin_C)
Rn <- get_Rn_daily(lat, date, Tmax_C = Tmax_C, Tmin_C = Tmin_C, ea, n, N, z = 0)
es_Tmin <- get_es(Tmin_C)
es_Tmax <- get_es(Tmax_C)
Tmean <- mean(c(Tmin_C, Tmax_C))
es <- mean(c(es_Tmin, es_Tmax))
G <- 0
gamma <- get_psychrometric_constant()
ETo <- fao_penman_monteith(Rn, G, gamma = get_psychrometric_constant(), T_C = Tmean, u2 = 2.2, es = es, ea = ea)
## Example 2: Using FAO climate data for Maharastra, India (20.59N, 78.96E)
# Locate and read the example et0 csv file
et0_path <- system.file("extdata", "ET0_example_file.csv", package = "fao56")
clim_prep <- read_et0_csv(et0_path)
library(dplyr)
clim_prep$lat <- 25
clim_prep$month <- 1:12
clim_prep$date <- as.Date(paste("2019",clim_prep$month,"15",sep="-"))
# Estimate vapor pressure
clim_prep <- clim_prep %>%
mutate(ea_kPa = get_ea_from_RHmean(Rel_Hum_pct,Tmp_max_degC, Tmp_min_degC),
es_Tmin = get_es(Tmp_min_degC),
es_Tmax = get_es(Tmp_max_degC),
es_kPa = (es_Tmin + es_Tmax)/2)
# Estimate G
# calculating G requires getting temperature for the previous and subequent months
# to do this, add Jan to the end (month = 13) and Dec to the beginning (month = 0)
# then remove these months after the calculation
clim_prep <- clim_prep %>%
bind_rows(clim_prep %>% filter(month == 1) %>% mutate(month = 13))%>%
bind_rows(clim_prep %>% filter(month == 12) %>% mutate(month = 0))%>%
arrange(month) %>%
mutate(T_iminus1 = lag(Tmp_Mean_degC),
T_iplus1 = lead(Tmp_Mean_degC),
G_MJ_per_day = get_G_from_monthly_T(T_month_iminus1 = T_iminus1, T_month_iplus1 = T_iplus1)) %>%
filter(month %in% 1:12)
# Estimate Rn
clim_prep <- clim_prep %>%
mutate(date = as.Date(paste("2019",month,"15",sep="-")),
N = get_daylight_hours(lat, date),
n = Sun_shine_pct * N / 100,
Rn_MJ_per_day = get_Rn_daily(lat, date, Tmp_max_degC, Tmp_min_degC, ea, n, N, albedo = 0.23, z = 251))
gamma <- get_psychrometric_constant()
# Calculate ETo from data
clim <- clim_prep %>%
select(Rn_MJ_per_day, G_MJ_per_day, Tmean_C = Tmp_Mean_degC, u2_m_per_s = Wind_2m_m_per_s, es_kPa, ea_kPa) %>%
mutate(ETo = fao_penman_monteith(Rn = Rn_MJ_per_day,
G = G_MJ_per_day,
gamma = gamma,
T_C = Tmean_C,
u2 = u2_m_per_s,
es = es_kPa,
ea = ea_kPa))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.