Learn R Programming

SPEI (version 1.8.1)

Potential-evapotranspiration: Computation of potential and reference evapotranspiration.

Description

Potential evapotranspiration (PET) is the amount of evaporation and transpiration that would occur if a sufficient water source were available. Reference evapotranspiration (ETo) is the amount of evaporation and transpiration from a reference vegetation of grass. They are usually considered equivalent. This set of functions calculate PET or ETo according to the Thornthwaite, Hargreaves or Penman-Monteith equations.

See hargreaves

See hargreaves

Usage

thornthwaite(Tave, lat, na.rm = FALSE, verbose=TRUE)

hargreaves(Tmin, Tmax, Ra = NULL, lat = NULL, Pre = NULL, na.rm = FALSE, verbose=TRUE)

penman(Tmin, Tmax, U2, Ra = NULL, lat = NULL, Rs = NULL, tsun = NULL, CC = NULL, ed = NULL, Tdew = NULL, RH = NULL, P = NULL, P0 = NULL, CO2 = NULL, z = NULL, crop='short', na.rm = FALSE, method='ICID', verbose=TRUE)

penman( Tmin, Tmax, U2 = NULL, Ra = NULL, lat = NULL, Rs = NULL, tsun = NULL, CC = NULL, ed = NULL, Tdew = NULL, RH = NULL, P = NULL, P0 = NULL, CO2 = NULL, z = NULL, crop = "short", na.rm = FALSE, method = "ICID", verbose = TRUE )

thornthwaite(Tave, lat, na.rm = FALSE, verbose = TRUE)

Value

A vector, matrix or 3-d array with the values of monthly potential or reference evapotranspiration, in mm.

A time series with the values of monthly potential or reference evapotranspiration, in mm. If the input is a matrix or a multivariate time series each column will be treated as independent data (e.g., different observatories), and the output will be a multivariate time series.

A time series with the values of monthly potential or reference evapotranspiration, in mm. If the input is a matrix or a multivariate time series each column will be treated as independent data (e.g., diferent observatories), and the output will be a multivariate time series.

Arguments

Tmin

a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily minimum temperatures, ºC.

Tmax

a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily maximum temperatures, ºC.

Ra

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily external radiation, MJ m-2 d-1.

lat

a numeric vector or matrix with the latitude of the site or sites, in degrees.

Pre

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly total precipitation, mm.

na.rm

optional, a logical value indicating whether NA values should be stripped from the computations.

verbose

optional, logical, report the computation options during calculation. Either 'TRUE' (default) or 'FALSE'.

U2

a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily wind speeds at 2 m height, m s-1.

Rs

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily incoming solar radiation, MJ m-2 d-1.

tsun

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily bright sunshine hours, h.

CC

optional, numeric a vector, matrix or time series of monthly mean cloud cover, %.

ed

optional, numeric a vector, matrix or time series of monthly mean actual vapor pressure at 2 m height, kPa.

Tdew

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean daily dewpoint temperature (used for estimating ed), ºC.

RH

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean relative humidity (used for estimating ed), %.

P

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean atmospheric pressure at surface, kPa.

P0

optional, a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean atmospheric pressure at sea level (used for estimating P), kPa.

CO2

optional, a single numeric value, a numeric vector, or a tsvector of monthly mean CO2 atmospheric concentration, ppm.

z

optional, a numeric vector or matrix of the elevation of the site or sites, m above sea level.

crop

optional, character string, type of reference crop. Either one of 'short' (default) or 'tall'.

method

optional, character string, Penman-Monteith calculation method. Either one of 'ICID' (default), 'FAO', or 'ASCE'.

Tave

a numeric vector, tsvector, matrix, tsmatrix, or 3-d array of monthly mean temperatures, ºC.

Author

Santiago Beguería

Details

thornthwaite computes the monthly potential evapotranspiration (PE) according to the Thornthwaite (1948) equation. It is the simplest of the three methods, and can be used when only mean temperature data are available.

hargreaves computes the monthly reference evapotranspiration (ETo) of a grass crop based on the original Hargreaves equation (1994). However, if precipitation data Pre is provided a modified form due to Droogers and Allen (2002) will be used; this equation corrects ETo using the amount of rain of each month as a proxy for irradiation The Hargreaves method requires data on the mean external radiation, Ra. If Ra is not available it can be estimated from the latitude lat and the month of the year.

penman calculates the monthly reference evapotranspiration (ETo) of a hypothetical reference crop according to the Penman-Monteith equation (Monteith, 1965). This is widely considered the most accurate method for estimating ETo, and is the method recommended by the UN Food and Agriculture Organization (FAO). There are several methods which simplify the original Penman-Monteith equation and are used in practice. Here we follow by default the procedure described in Allen et al. (1994), aka the `ICID` method. However, other versions are also implemented and can be used by setting the method parameter to the appropriate value. The FAO-56 method (Allen et al., 1998) can be used by setting method to `FAO`, while the variation of the American Society of Civil Engineers (Walter et al., 2002 is used when setting it to `ASCE`. By default the original parameterization corresponding to a short reference crop of 0.12 m height is used, although the parameterization for a tall reference crop of 0.5 m height (Walter et al. (2002) can also be used, by setting the crop parameter to 'tall'. The method requires data on the incoming solar radiation, Rs; since this is seldom available, the code will estimate it from data on the bright sunshine duration tsun, or alternatively from data on the percent cloud cover CC. Similarly, if data on the saturation water pressure ed are not available, it is possible to estimate it from the dew point temperature Tdew, from the relative humidity RH or even from the minimum temperature Tmin (sorted from least to most uncertain method). Similarly, the atmospheric surface pressure P required for computing the psychrometric constant can be calculated from the atmospheric pressure at sea level P0 and the elevation z, or else it will be assumed to be constant (101.3 kPa). If no wind speed data U2 are available, a constant value of 2 m per second is used. Custom CO2 atmospheric concentration CO2 can also be provided, following Yang et al. (2019).

The function will produce an error message if a valid combination of input parameters is not provided. If verbose is `TRUE` (the default value), a message will be produced informing on the computation options selected.

The function accepts data in a variety of formats, including 1-D vectors, 2-D matrices and 3-D arrays. The input data format will determine the output format. Vector input can be used for single-station data. Matrix input can be used to produce output for a number of locations, where each column in the matrix will be considered as one location. 3-D arrays can be used to process gridded data, with the first dimension being time and the two other dimensions representing spatial coordinates. See the examples below for a guidance on how to use these options.

If the main input object (Tave, Tmin, Tmax) is a time series then the function cycle will be used to determine the position of each observation within the year (month), allowing the data to start in a month different than January. If no time information is provided, then the input data will be treated as a sequence of monthly values starting in January.

See hargreaves

See hargreaves

References

Thornthwaite, C. W., 1948. An approach toward a rational classification of climate. Geographical Review 38: 55–94. DOI:10.2307/2107309.

Hargreaves G.H., 1994. Defining and using reference evapotranspiration. Journal of Irrigation and Drainage Engineering 120: 1132–1139.

Droogers P., Allen R. G., 2002. Estimating reference evapotranspiration under inaccurate data conditions. Irrigation and Drainage Systems 16: 33–45.

Monteith, J. L., 1965. Evaporation and environment. Symposia of the Society for Experimental Biology 19: 205–234.

Allen R. G., Smith M., Pereira L. S., Perrier A., 1994. An update for the calculation of reference evapotranspiration. ICID Bulletin of the International Commission on Irrigation and Drainage, 35–92.

Allen R.G., Pereira L.S.,Raes D., Smith, M., 1998. J. Crop evapotranspiration - Guidelines for computing crop water requirements - FAO Irrigation and drainage paper 56. FAO, Rome. ISBN 92-5-104219-5.

Walter I.A. and 14 co-authors, 2002. The ASCE standardized reference evapotranspiration equation. Rep. Task Com. on Standardized Reference Evapotranspiration July 9, 2002, EWRI–Am. Soc. Civil Engr., Reston, VA, 57 pp.

Yang, Y., Roderick, M.L., Zhang, S. McVicar, T., Donohue, R.J., 2019. Hydrologic implications of vegetation response to elevated CO2 in climate projections. Nature Climate Change 9: 44–48.

Examples

Run this code
# Load data for Tampa, lat=37.6475N, elevation=402.6 m. a.s.l.
# Data consists on monthly values since January 1980

data(wichita)
attach(wichita)
names(wichita)

# PET following Thornthwaite
tho <- thornthwaite(TMED, 37.6475)

# ETo by Hargreaves
har <- hargreaves(TMIN, TMAX, lat = 37.6475)

# ETo by Penman, based on sun hours, ignore NAs
pen <- penman(TMIN, TMAX, AWND, tsun = TSUN, lat = 37.6475, z = 402.6, na.rm = TRUE)

# Penman, based on cloud cover
pen2 <- penman(TMIN, TMAX, AWND, CC = ACSH, lat = 37.6475, z = 402.6, na.rm = TRUE)

# Penman, with constant wind
pen3 <- penman(TMIN, TMAX, tsun = TSUN, lat = 37.6475, z = 402.6, na.rm = TRUE)

# Plot them together
plot(ts(cbind(tho, har, pen, pen2, pen3), fr = 12))

# Compare between methods
pairs(cbind(tho, har, pen, pen2, pen3))

# Input data as a time series vector; note that only the first parameter
# needs to be a `ts` object.

thornthwaite(ts(TMED, start = c(1980, 1), frequency = 12), 37.6475)
hargreaves(ts(TMIN, start = c(1980, 1), frequency = 12), TMAX, lat = 37.6475)
penman(ts(TMIN, start = c(1980, 1), frequency = 12), TMAX, AWND,
  tsun = TSUN,
  lat = 37.6475, z = 402.6, na.rm = TRUE
)

# Input data as a time series. Consider the data started in June 1980
thornthwaite(ts(TMED, start = c(1980, 6), frequency = 12), 37.6475)

# Comparison with example from Allen et al. (1998), p. 69, fig. 18:
# Data from Cabinda, Angola (-5.33S, 12.11E, 20 m a.s.l.)

data(cabinda)
pen.cab <- penman(cabinda$Tmin, cabinda$Tmax, cabinda$U2,
  Rs = cabinda$Rs, tsun = cabinda$tsun, RH = cabinda$RH, lat = -5.33, z = 20
)
plot(cabinda$ET0, pen.cab)
abline(0, 1, lt = "dashed")
summary(lm(pen.cab ~ cabinda$ET0))$r.squared

# Matrix input (data from several stations)
# Replicating Wichita data twice to simulate data at two locations.

tmin <- cbind(TMIN, TMIN + 1.5)
tmax <- cbind(TMAX, TMAX + 1.5)
lat <- c(37.6475, 35.000)
har <- hargreaves(tmin, tmax, lat = lat, na.rm = TRUE)
plot(har)
abline(0, 1)
plot(ts(har, fr = 12))

# Array input (gridded data)
# Replicating Wichita data to simulate data from a grid. Note that the time
# dimension (`nt`) comes first. Latitude is provided as a 2-d array.

nt <- length(TMIN)
tmin <- array(TMIN, dim = c(nt, 2, 2))
tmax <- array(TMAX, dim = c(nt, 2, 2))
lat <- array(c(40, 30, 40, 30), dim = c(2, 2))
har <- hargreaves(tmin, tmax, lat = lat, na.rm = TRUE)
dim(har)

# Different Penman-Monteith flavors

pen_icid <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  na.rm = TRUE, method = "ICID"
)
pen_asce <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  na.rm = TRUE, method = "ASCE"
)
pen_fao <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  na.rm = TRUE, method = "FAO"
)
plot(ts(cbind(pen_icid, pen_asce, pen_fao), fr = 12))

# Different CO2 concentrations

# Default (300 ppm)
pen_300 <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  na.rm = TRUE
)
# Increased to 450 ppm
pen_450 <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  CO2 = 450, na.rm = TRUE
)
plot(pen_450, pen_300)
abline(0, 1)
# Increasing from 300 to 450
co2 <- seq(300, 450, length.out = length(TMIN))
pen_co2 <- penman(TMIN, TMAX, AWND,
  tsun = TSUN, lat = 37.6475, z = 402.6,
  CO2 = co2, na.rm = TRUE
)
plot(ts(cbind(pen_300, pen_co2), fr = 12))

Run the code above in your browser using DataLab