I needed to calculate Vapour Pressure Deficit for a productivity model that I’m running, using ECMWF spatial data timeseries as an input. I wrote some functions in R that I think do the right thing:
# Saturation vapour pressure (millibars)
vps <- function(T_k){
T_c <- T_k - 273.15
return(0.6108 * exp(17.27 * T_c / (T_c + 273.15)))
}
# Relative humidity (%)
rh <- function(T_k, Td_k){
es_calc <- vps(T_k) # Saturation vp
ea_calc <- vps(Td_k) # Actual vp
return((ea_calc / es_calc) * 100)
}
# Vapour pressure of air (millibars)
vpa <- function(T_k, Td_k){
rh_calc <- rh(T_k, Td_k)
vps_calc <- vps(T_k)
return(rh_calc / 100 * vps_calc)
}
# Vapour pressure deficit (kPa)
vpd <- function(T_k, Td_k){
vps_calc <- vps(T_k)
vpa_calc <- vpa(T_k, Td_k)
return(vpa_calc - vps_calc)
}