fao_penman_monteith: FAO Penman Monteith reference ETo

Description Usage Arguments Details Examples

View source: R/fao_penman_monteith.R

Description

FAO Penman Monteith reference ETo

Usage

1
fao_penman_monteith(Rn, G, gamma, T_C, u2, es, ea)

Arguments

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

Details

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

Examples

 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))

gopalpenny/fao56 documentation built on Feb. 14, 2022, 6:01 a.m.