# How can I deal with unrealistic Relative Humidities being calculated using vapour pressure and saturated vapour pressure?

I am calculating RH (%) using this well accepted equation:

$$RH =e \times \frac{100}{es(T)}$$

where $$e$$ is the vapour pressure and $$es(T)$$ is the saturated vapour pressure at temperature $$T$$.

I have observed $$e$$ (ranging from 0$$-$$30 hPa). I calculate $$es$$ in R using one of the following equations (depending on the wet bulb temperature $$Tw$$ in relation to zero (to account for vapour pressure over liquid or solid water)):

f.es1 <- function(T) 6.107 * exp(17.38 * T/(239. + T))    # Tw >= 0
f.es2 <- function(T) 6.107 * exp(22.44 * T/(272.4 + T))   # Tw < 0


I have noticed that $$RH$$ (using the first equation above) is extremely large in some cases (e.g., 4352.567). This is occurring when $$e$$ is 0.6 and $$es$$ is 0.01378497.

I know I can scale the RH data to between 1:100, but I'm wondering if there is a better way of dealing with this? It is happening when $$e$$ and $$es$$ are extremely small. I'm guessing this is over really dry areas perhaps? Is there a better way of calculating $$RH$$ for these places?

This is some information about the dataset:

1 variables (excluding dimension variables):
short vap[lon,lat,time]   (Chunking: [2160,30,1])
standard_name: vapor_pressure
long_name: vapor_pressure
units: kPa
scale_factor: 0.01
_FillValue: -32768
missing_value: -32768
description: Vapor Pressure
dimensions: lon lat time
coordinate_system: WGS84,EPSG:4326

3 dimensions:
time  Size:12   *** is unlimited ***
standard_name: time
long_name: time
units: days since 1900-01-01 00:00:00
calendar: gregorian
axis: T
lon  Size:2160
standard_name: longitude
long_name: longitude
units: degrees_east
axis: X
lat  Size:1080
standard_name: latitude
long_name: latitude
units: degrees_north
axis: Y

5 global attributes:
CDI: Climate Data Interface version 1.9.9rc1 (https://mpimet.mpg.de/cdi)
Conventions: CF-1.6
history: Wed Sep 15 14:21:54 2021: cdo remapcon,r2160x1080 TerraClimate19812010_vap.nc WCvap_terraclimate_1981_2010.nc
method: These layers from TerraClimate were creating using climatically aided interpolation of monthly anomalies from the CRU Ts4.0 and Japanese 55-year Reanalysis (JRA-55) datasets with WorldClim v2.0 climatologies.
CDO: Climate Data Operators version 1.9.9rc1 (https://mpimet.mpg.de/cdo)


• ind_e = e

• ind_T_1500 = Temperature (at 3pm)

• ind_es = Saturated vapour pressure

• ind_Rh1500 = Relative humidity calculated for 3pm.

• ind_Tx = Tmax

• ind_Tn = Tmin

This is the updated dataframe (below). The e is slightly lower generally, but it still seems incorrect.

• That 0.01378497 value of $es$ corresponds to a temperature of -58.173 °C . I suspect you are doing something wrong in your calculations. Sep 15 at 23:21
• Looks like you're using a version of Teten's Equation then (in hPa)? Agree with David, your es seems way too low, the slight difference in coefficients shouldn't matter. T should be in Celsius. omnicalculator.com/chemistry/vapour-pressure-of-water suggests your e values are of the right order of magnitude. es should basically always be > e (except for supersaturation on a microscale for curved surfaces, and that's only a few percent if I remember right) Sep 15 at 23:26
• @DavidHammen That temperature is correct. I am trying to calculate relative humidity on a global scale. The temperature you refer to is from Antarctica. Does that change anything? Sep 16 at 8:41
• Ok, then your problem is the vapor pressures you have. Page 13 of nvlpubs.nist.gov/nistpubs/jres/81A/jresv81An1p5_A1b.pdf shows ice saturation pressure of 0.01 around -60C. But that means vapor pressure can only be basically <= that same value. So now the issue seems be where you're getting your vapor pressures, as 0.6 is way too high for -60C temperature. Sep 16 at 8:46
• @JeopardyTempest I added a screenshot of some of the highest calculated RH values and their corresponding e, es and temperature. The temperature being used is one that was calculated from a formula using the Daily temperature range (T_1500=Tx - 0.116*DTR, where DTR is the daily temperature range) to provide a temperature for 3pm. The e derived from Terraclimate is a result of the average temperature, but that couldn't make a huge difference I would imagine? Sep 17 at 14:51