Approximate water pressure in air as a function of temperature, and its inverse the calculation of dewpoint.

## Usage

```
water_vp_sat(
temperature,
over.ice = FALSE,
method = "tetens",
check.range = TRUE
)
water_dp(water.vp, over.ice = FALSE, method = "tetens", check.range = TRUE)
water_fp(water.vp, over.ice = TRUE, method = "tetens", check.range = TRUE)
water_vp2mvc(water.vp, temperature)
water_mvc2vp(water.mvc, temperature)
water_vp2RH(
water.vp,
temperature,
over.ice = FALSE,
method = "tetens",
pc = TRUE,
check.range = TRUE
)
water_RH2vp(
relative.humidity,
temperature,
over.ice = FALSE,
method = "tetens",
pc = TRUE,
check.range = TRUE
)
water_vp_sat_slope(
temperature,
over.ice = FALSE,
method = "tetens",
check.range = TRUE,
temperature.step = 0.1
)
psychrometric_constant(atmospheric.pressure = 101325)
```

## Arguments

- temperature
numeric vector of air temperatures (C).

- over.ice
logical vector Is the estimate for equilibrium with liquid water or with ice.

- method
character Currently "tetens", modified "magnus", "wexler" and "goff.gratch" equations are supported.

- check.range
logical Flag indicating whether to check or not that arguments for temperature are within the range of validity of the

`method`

used.- water.vp
numeric vector of water vapour pressure in air (Pa).

- water.mvc
numeric vector of water vapour concnetration as mass per volume (\(g m^{-3}\)).

- pc
logical flag for result returned as percent or not.

- relative.humidity
numeric Relative humidity as fraction of 1.

- temperature.step
numeric Delta or step used to estimate the slope as a finite difference (C).

- atmospheric.pressure
numeric Atmospheric pressure (Pa).

## Value

A numeric vector of partial pressures in pascal (Pa) for
`water_vp_sat()`

and `water_mvc2vp()`

, a numeric vector of dew point
temperatures (C) for `water_dp()`

and numeric vector of mass per volume
concentrations (\(g m^{-3}\)) for `water_vp2mvc()`

. `water_vp_sat()`

and
`psychrometric_constant()`

both return numeric vectors of pressure per
degree of temperature (\(Pa C^{-1}\))

## Details

Function `water_vp_sat()`

provides implementations of several
well known equations for the estimation of saturation vapor pressure in
air. Functions `water_dp()`

and `water_fp()`

use the inverse of
these equations to compute the dew point or frost point from water vapour
pressure in air. The inverse functions are either analytical solutions or
fitted approximations. None of these functions are solved numerically by
iteration.

Method `"tetens"`

implements Tetens' (1930) equation for the cases of
equilibrium with a water and an ice surface. Method `"magnus"`

implements the modified Magnus equations of Alduchov and Eskridge (1996,
eqs. 21 and 23). Method `"wexler"`

implements the equations proposed
by Wexler (1976, 1977), and their inverse according to Hardy (1998). Method
`"goff.gratch"`

implements the equations of Groff and Gratch (1946)
with the minor updates of Groff (1956).

The equations are approximations, and in spite of their different names,
Tetens' and Magnus' equations have the same form with the only difference
in the values of the parameters. However, the modified Magnus equation is
more accurate as Tetens equation suffers from some bias errors at extreme
low temperatures (< -40 C). In contrast Magnus equations with recently
fitted values for the parameters are usable for temperatures from -80 C to
+50 C over water and -80 C to 0 C over ice. The Groff Gratch equation is
more complex and is frequently used as a reference in comparison as it is
considered reliable over a broad range of temperatures. Wexler's equations
are computationally simpler and fitted to relatively recent data. There is
little difference at temperatures in the range -20 C to +50 C, and
differences become large at extreme temperatures. Temperatures outside the
range where estimations are highly reliable for each equation return
`NA`

, unless extrapolation is enabled by passing `FALSE`

as
argument to parameter `check.range`

.

The switch between equations for ice or water cannot be based on
air temperature, as it depends on the presence or not of a surface of
liquid water. It must be set by passing an argument to parameter
`over.ice`

which defaults to `FALSE`

.

Tetens equation is still very frequently used, and is for example the one recommended by FAO for computing potential evapotranspiration. For this reason it is used as default here.

## References

Tetens, O., 1930. Uber einige meteorologische Begriffe. Zeitschrift fur Geophysik, Vol. 6:297.

Goff, J. A., and S. Gratch (1946) Low-pressure properties of water from -160 to 212 F, in Transactions of the American Society of Heating and Ventilating Engineers, pp 95-122, presented at the 52nd annual meeting of the American Society of Heating and Ventilating Engineers, New York, 1946.

Wexler, A. (1976) Vapor Pressure Formulation for Water in Range 0 to 100°C. A Revision, Journal of Research ofthe National Bureau of Standards: A. Physics and Chemistry, September-December 1976, Vol. 80A, Nos.5 and 6, 775-785

Wexler, A., (1977) Vapor Pressure Formulation for Ice, Journal of Research of the National Bureau of Standards - A. Physics and Chemistry, Vol. 81A, No. 1, 5-19

Alduchov, O. A., Eskridge, R. E., 1996. Improved Magnus Form Approximation of Saturation Vapor Pressure. Journal of Applied Meteorology, 35: 601-609 .

Hardy, Bob (1998) ITS-90 formulations for vapor pressure, frostpoint temperature, dewpoint temperature, andenhancement factors in the range -100 TO +100 C. The Proceedings of the Third International Symposium on Humidity & Moisture, Teddington, London, England, April 1998. https://www.decatur.de/javascript/dew/resources/its90formulas.pdf

Monteith, J., Unsworth, M. (2008) Principles of Environmental Physics. Academic Press, Amsterdam.

Allen R G, Pereira L S, Raes D, Smith M. (1998) Crop evapotranspiration: Guidelines for computing crop water requirements. FAO Irrigation and drainage paper 56. Rome: FAO.

[Equations describing the physical properties of moist air](http://www.conservationphysics.org/atmcalc/atmoclc2.pdf)

## Examples

```
water_vp_sat(20) # C -> Pa
#> [1] 2338.023
water_vp_sat(temperature = c(0, 10, 20, 30, 40)) # C -> Pa
#> [1] 610.780 1227.873 2338.023 4242.450 7374.308
water_vp_sat(temperature = -10) # over water!!
#> [1] 285.7142
water_vp_sat(temperature = -10, over.ice = TRUE)
#> [1] 259.4522
water_vp_sat(temperature = 20) / 100 # C -> mbar
#> [1] 23.38023
water_vp_sat(temperature = 20, method = "magnus") # C -> Pa
#> [1] 2333.441
water_vp_sat(temperature = 20, method = "tetens") # C -> Pa
#> [1] 2338.023
water_vp_sat(temperature = 20, method = "wexler") # C -> Pa
#> [1] 2339.262
water_vp_sat(temperature = 20, method = "goff.gratch") # C -> Pa
#> [1] 2335.856
water_vp_sat(temperature = -20, over.ice = TRUE, method = "magnus") # C -> Pa
#> [1] 103.1264
water_vp_sat(temperature = -20, over.ice = TRUE, method = "tetens") # C -> Pa
#> [1] 102.7871
water_vp_sat(temperature = -20, over.ice = TRUE, method = "wexler") # C -> Pa
#> [1] 103.2323
water_vp_sat(temperature = -20, over.ice = TRUE, method = "goff.gratch") # C -> Pa
#> [1] 103.2464
water_dp(water.vp = 1000) # Pa -> C
#> [1] 6.973856
water_dp(water.vp = 1000, method = "magnus") # Pa -> C
#> [1] 6.990301
water_dp(water.vp = 1000, method = "wexler") # Pa -> C
#> [1] 6.970244
water_dp(water.vp = 500, over.ice = TRUE) # Pa -> C
#> [1] -2.40697
water_dp(water.vp = 500, method = "wexler", over.ice = TRUE) # Pa -> C
#> [1] -2.415646
water_fp(water.vp = 300) # Pa -> C
#> [1] -8.357335
water_dp(water.vp = 300, over.ice = TRUE) # Pa -> C
#> [1] -8.357335
water_vp2RH(water.vp = 1500, temperature = 20) # Pa, C -> RH %
#> [1] 64.15677
water_vp2RH(water.vp = 1500, temperature = c(20, 30)) # Pa, C -> RH %
#> [1] 64.15677 35.35693
water_vp2RH(water.vp = c(600, 1500), temperature = 20) # Pa, C -> RH %
#> [1] 25.66271 64.15677
water_vp2mvc(water.vp = 1000, temperature = 20) # Pa -> g m-3
#> [1] 7.388457
water_mvc2vp(water.mvc = 30, temperature = 40) # g m-3 -> Pa
#> [1] 4337.396
water_dp(water.vp = water_mvc2vp(water.mvc = 10, temperature = 30)) # g m-3 -> C
#> [1] 11.96948
water_vp_sat_slope(temperature = 20) # C -> Pa / C
#> [1] 144.722
psychrometric_constant(atmospheric.pressure = 81.8e3) # Pa -> Pa / C
#> [1] 54.37588
```