Title: | A Tool for Mapping the Distribution of the Biomes and Bioclimate |
---|---|
Description: | Procedures for simulating biomes by equilibrium vegetation models, with a special focus on paleoenvironmental applications. Three widely used equilibrium biome models are currently implemented in the package: the Holdridge Life Zone (HLZ) system (Holdridge 1947, <doi:10.1126/science.105.2727.367>), the Köppen-Geiger classification (KGC) system (Köppen 1936, <https://koeppen-geiger.vu-wien.ac.at/pdf/Koppen_1936.pdf>) and the BIOME model (Prentice et al. 1992, <doi:10.2307/2845499>). Three climatic forest-steppe models are also implemented. An approach for estimating monthly time series of relative sunshine duration from temperature and precipitation data (Yin 1999, <doi:10.1007/s007040050111>) is also adapted, allowing process-based biome models to be combined with high-resolution paleoclimate simulation datasets (e.g., CHELSA-TraCE21k v1.0 dataset: <https://chelsa-climate.org/chelsa-trace21k/>). |
Authors: | Zoltán Szelepcsényi [aut, cre, cph]
|
Maintainer: | Zoltán Szelepcsényi <[email protected]> |
License: | GPL (>= 3) |
Version: | 0.3.0 |
Built: | 2025-03-12 02:58:30 UTC |
Source: | https://github.com/szelepcsenyi/macrobiome |
Procedures for simulating biomes by equilibrium vegetation models, with a special focus on paleoenvironmental applications.
Three widely used equilibrium biome models are currently implemented in the package: the Holdridge Life Zone (HLZ) system (Holdridge 1947, 1967), the Köppen-Geiger classification (KGC) system (Köppen 1936) and the BIOME model (Prentice et al. 1992). Three climatic forest-steppe models are also implemented.
In the BIOME model, the water balance module used to calculate daily radiation, evapotranspiration and soil moisture was replaced by the SPLASH v.1.0 model (Davis et al. 2017). The methodology used in this model was modified in two aspects: the 'bucket size' was made freely adjustable, and variations of the Earth's orbital parameters were taken into account by implementing the procedure proposed by Berger and Loutre (1991).
The application of process-based models, besides temperature and precipitation data, requires also a meteorological variable directly related to radiation. Sunshine duration or cloud cover can be such a variable. Unfortunately, paleoclimatic datasets developed to support paleoecological studies using correlative species distribution models do not include such variables. For example, see the CHELSA-TraCE21k v1.0 dataset (https://chelsa-climate.org/chelsa-trace21k/).
However, estimating relative sunshine duration data from commonly available meteorological variables may be a solution to overcome the lack of data. To achieve this goal, here, the procedure described by Yin (1999) is recommended with some minor modifications. Evidences of validity of the procedures implemented in the package were shown by Szelepcsényi et al. (2022).
The use of 'Grid' functions allows to generate distribution maps of biomes (and bioclimatic indices used in the given procedure) in a fast and controlled way given the appropriate raster datasets.
Berger A, Loutre MF (1991) Insolation values for the climate of the last 10 million years. Quat Sci Rev 10(4):297-317. doi:10.1016/0277-3791(91)90033-Q
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Holdridge LR (1947) Determination of World Plant Formations From Simple Climatic Data. Science 105(2727):367–368. doi: 10.1126/science.105.2727.367
Holdridge LR (1967) Life zone ecology. Tropical Science Center, San Jose, Costa Rica
Köppen W (1936) Das geographische System der Klimate. In: Köppen W, Geiger R (eds) Handbuch der Klimatologie. Verlag von Gebrüder Borntraeger, Berlin, Germany, pp 1–44
Prentice IC, Cramer W, Harrison SP, Leemans R, Monserud RA, Solomon AM (1992) A Global Biome Model Based on Plant Physiology and Dominance, Soil Properties and Climate. J Biogeogr 19(2):117–134. doi:10.2307/2845499
Szelepcsényi Z, Breuer H, Fodor N (2022) Estimating relative sunshine duration from commonly available meteorological variables for simulating biome distribution in the Carpathian Region. Hung Geogr Bull 71(1):3–19. doi:10.15201/hungeobull.71.1.1
Yin X (1999) Bright Sunshine Duration in Relation to Precipitation, Air Temperature and Geographic Location. Theor Appl Climatol 64(1–2):61–68. doi:10.1007/s007040050111
Calculates monthly averages of daily solar irradiance/irradiation under cloudless-sky conditions, for a given latitude, elevation and year. In addition, it also optionally computes monthly means for daylength (accumulated hours of daylight), for a given latitude, elevation and year. In addition to monthly averages, daily values can also be directly access.
cliAvgDlySolIrrPoints( lat, elv = NULL, year = 2000, aprchSIM = c("Solar123", "SPLASH"), aprchTR = c("daily", "hourly"), daily = FALSE, mlyOpVar = c("R_E") )
cliAvgDlySolIrrPoints( lat, elv = NULL, year = 2000, aprchSIM = c("Solar123", "SPLASH"), aprchTR = c("daily", "hourly"), daily = FALSE, mlyOpVar = c("R_E") )
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
aprchSIM |
'character' vector of length 1 that indicates the formula used to estimate the value of solar
irradiance/irradiation for a specific day. Valid values are as follows: |
aprchTR |
'character' vector of length 1 that indicates that the daily solar irradiance/irradiation is
estimated with a daily or hourly time resolution. Valid values are as follows: |
daily |
'logical' scalar that indicates whether or not daily values should also be computed. |
mlyOpVar |
'character' vector of at least one length that indicates the variable(s) for which
monthly time series are to be calculated. Valid values are as follows: |
To estimate the monthly averages of relative sunshine duration, Yin (1999) uses estimated values of the
mean hourly solar irradiance under cloudless-sky conditions ('R_E_MJ.m2.hr1'
), which is calculated via
the scheme of Yin (1997b), with some minor modifications. Furthermore, in the approach proposed by Yin (1999),
the monthly means of daylength ('DL_moa_hr'
) is used to estimate monthly averages of daily potential
evapotranspiration. The solar irradiance model presented by Yin (1997b) and slightly modified by Yin (1999) is
labelled 'Solar123'
here.
The approach 'SPLASH'
uses a different radiation model, which is based on the procedure described by
Davis et al. (2017). The approach used here differs from the base scheme only in that it takes into account
changes in orbital parameters of the Earth over time. Temporal variability of orbital parameters is considered
through the implementation of the procedure as proposed by Berger and Loutre (1991). In the SPLASH algorithm,
the daily top-of-the-atmosphere solar radiation is computed as twice the integral of the extraterrestrial
radiation flux realized from local solar noon to sunset (see Davis et al. 2017). Using this physical amount,
the daily solar radiation at the surface of the Earth under clear-sky conditions ('R_E_MJ.m2.dy1'
)
can be easily estimated. The hourly mean surface radiation is finally obtained as the quotient of this
integrated value and the daylength.
In the both approach, the daylength is computed by using the sunset hour angle, however, due to differences in
the calculation of the solar declination, the results obtained by the two procedures differ. The approach
'Solar123'
gives time-independent results, while using the approach 'SPLASH'
, varying results
over time are obtained through the variable orbital parameters.
The two radiation models therefore differ significantly both in terms of conceptual frameworks and
assumptions. The approach 'Solar123'
converts hourly mean values into daily amounts, while in the
approach 'SPLASH'
, the integrated daily values are transformed to hourly averages. However, in terms of
atmospheric transmittivity, both models consider the universal value of 0.75 as a basic value. To conclude,
depending on the scope of application, both methods can give valid results, but for paleo-climatological and
paleo-environmental studies, the approach 'SPLASH'
is clearly recommended.
If daily values are also requested (daily = TRUE
), the function returns a list of lists with daily
and monthly data. If daily = FALSE
, the return object is a list with the monthly means. The character
vector 'mlyOpVar'
determines for which variables the monthly averages are calculated. Daily values also
become available only for this/these variable(s). Each matrix in the list of daily data consists of 365 or 366
columns, while monthly data are available, of course, as 12-column matrices. The former are accessible in the
list 'dly'
, while the latter can be found in the list labelled as 'mly'
. Here, matrices with
monthly data contain averages of the daily values. See the argument 'mlyOpVar'
for the content of
matrices.
As with any function with a point mode, a set of basic input data is defined here. In this case, it is as
follow: 'lat'
(latitude coordinates in decimal degrees). The length of this vector determines the
number of rows in matrices of the return list. In the case of arguments that do not affect the course of the
calculation procedure or the structure of the return object, scalar values (i.e., 'numeric' vector of
length 1) may also be allowed. In this case, they are as follows: 'elv'
(elevation in meters above sea
level), and 'year'
(year using astronomical year numbering). These scalars are converted to vectors by
the function during the error handling, and these vectors are applied in the further calculations. If these
data are stored in vectors of length at least 2, their length must be the same size of first dimension of the
matrix containing the basic data.
Allen RG (1996) Assessing integrity of weather data for reference evapotranspiration estimation. J Irrig Drain Eng 122(2):97–106. doi:10.1061/(ASCE)0733-9437(1996)122:2(97)
Berger A, Loutre MF (1991) Insolation values for the climate of the last 10 million years. Quat Sci Rev 10(4):297-317. doi:10.1016/0277-3791(91)90033-Q
Brock TD (1981) Calculating solar radiation for ecological studies. Ecol Model 14(1–2):1-19. doi:10.1016/0304-3800(81)90011-9
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Yin X (1997a) Calculating daytime mean relative air mass. Agric For Meteorol 87(2-3):85-90. doi:10.1016/S0168-1923(97)00029-4
Yin X (1997b) Optical Air Mass: Daily Integration and its Applications. Meteorol Atmos Phys 63(3-4):227-233. doi:10.1007/BF01027387
Yin X (1999) Bright Sunshine Duration in Relation to Precipitation, Air Temperature and Geographic Location. Theor Appl Climatol 64(1–2):61–68. doi:10.1007/s007040050111
library(graphics) # Monthly average of the mean hourly solar irradiance under cloudless-sky conditions at sea level, # in June 2000 along a meridian, according to the two different radiation models lats <- seq(-90, 90, 10) models <- c("Solar123", "SPLASH") R_E_moa_MJ.m2.hr1 <- matrix(nrow = 2, ncol = length(lats), dimnames = list(models, lats)) R_E_moa_MJ.m2.hr1[1, ] <- cliAvgDlySolIrrPoints(lats, elv = 0, aprchTR = "hourly")$R_E_moa_MJ.m2.hr1[, "Jun"] R_E_moa_MJ.m2.hr1[2, ] <- cliAvgDlySolIrrPoints(lats, elv = 0, aprchSIM = "SPLASH", aprchTR = "hourly")$R_E_moa_MJ.m2.hr1[, "Jun"] cols <- c("black", "green") matplot(t(R_E_moa_MJ.m2.hr1), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Geographical latitude (degrees)", ylab = "Mean hourly solar irradiance (MJ m-2 hr-1)") axis(1, at = seq(1, ncol(R_E_moa_MJ.m2.hr1)), labels = colnames(R_E_moa_MJ.m2.hr1)) legend(1, 2, legend = rownames(R_E_moa_MJ.m2.hr1), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) # Daylength at latitude 75N in the year 2000, according to the two different radiation models DL_hr <- matrix(nrow = 2, ncol = 366, dimnames = list(c("Solar123", "SPLASH"), seq(1, 366))) DL_hr[1, ] <- cliAvgDlySolIrrPoints(75., 0., daily = TRUE, mlyOpVar = "DL")$dly$DL_hr DL_hr[2, ] <- cliAvgDlySolIrrPoints(75., 0., aprchSIM = "SPLASH", daily = TRUE, mlyOpVar = "DL")$dly$DL_hr cols <- c("black", "green") matplot(t(DL_hr), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Day number in the year", ylab = "Daylength (hr)") axis(1, at = seq(1, ncol(DL_hr)), labels = colnames(DL_hr)) legend(1, 20, legend = rownames(DL_hr), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE)
library(graphics) # Monthly average of the mean hourly solar irradiance under cloudless-sky conditions at sea level, # in June 2000 along a meridian, according to the two different radiation models lats <- seq(-90, 90, 10) models <- c("Solar123", "SPLASH") R_E_moa_MJ.m2.hr1 <- matrix(nrow = 2, ncol = length(lats), dimnames = list(models, lats)) R_E_moa_MJ.m2.hr1[1, ] <- cliAvgDlySolIrrPoints(lats, elv = 0, aprchTR = "hourly")$R_E_moa_MJ.m2.hr1[, "Jun"] R_E_moa_MJ.m2.hr1[2, ] <- cliAvgDlySolIrrPoints(lats, elv = 0, aprchSIM = "SPLASH", aprchTR = "hourly")$R_E_moa_MJ.m2.hr1[, "Jun"] cols <- c("black", "green") matplot(t(R_E_moa_MJ.m2.hr1), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Geographical latitude (degrees)", ylab = "Mean hourly solar irradiance (MJ m-2 hr-1)") axis(1, at = seq(1, ncol(R_E_moa_MJ.m2.hr1)), labels = colnames(R_E_moa_MJ.m2.hr1)) legend(1, 2, legend = rownames(R_E_moa_MJ.m2.hr1), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) # Daylength at latitude 75N in the year 2000, according to the two different radiation models DL_hr <- matrix(nrow = 2, ncol = 366, dimnames = list(c("Solar123", "SPLASH"), seq(1, 366))) DL_hr[1, ] <- cliAvgDlySolIrrPoints(75., 0., daily = TRUE, mlyOpVar = "DL")$dly$DL_hr DL_hr[2, ] <- cliAvgDlySolIrrPoints(75., 0., aprchSIM = "SPLASH", daily = TRUE, mlyOpVar = "DL")$dly$DL_hr cols <- c("black", "green") matplot(t(DL_hr), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Day number in the year", ylab = "Daylength (hr)") axis(1, at = seq(1, ncol(DL_hr)), labels = colnames(DL_hr)) legend(1, 20, legend = rownames(DL_hr), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE)
Calculates the values of selected bioclimatic indices, for a given region and year/epoch, by using the monthly time series of temperature, precipitation and relative sunshine duration, and the elevation data.
cliBioCliIdxGrid( rs.temp, rs.prec, rs.bsdf = NULL, rl.elv = NULL, sc.year = 2000, rl.MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), bciOpVar = c("abt", "tap", "per", "fai"), filename = "", ... )
cliBioCliIdxGrid( rs.temp, rs.prec, rs.bsdf = NULL, rl.elv = NULL, sc.year = 2000, rl.MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), bciOpVar = c("abt", "tap", "per", "fai"), filename = "", ... )
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
rs.bsdf |
multi-layer Raster* object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
rl.elv |
single-layer Raster* object with the elevation values (in meters above sea level) |
sc.year |
'numeric' scalar with the value of the year (using astronomical year numbering) |
rl.MSMC |
'numeric' scalar or single-layer Raster* object with the value/values of the maximum soil moisture capacity (aka 'bucket size') (in mm) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchPREC |
'character' vector of length 1 that indicates the scheme to generate daily values of the
daily precipitation sum. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
dvPREC |
'numeric' vector of length 12 with monthly values of the damping variable for the precipitation data. |
bciOpVar |
'character' vector of at least one length that indicates which of the bioclimatic indices is/are
to be computed. Valid values are as follows: |
filename |
output filename |
... |
additional arguments passed on to |
See cliBioCliIdxPoints
.
A RasterStack with one or more layers where each layer contain the values of a given bioclimatic index.
The objects 'rs.temp'
, 'rs.prec'
and 'rs.bsdf'
must be 12-layer Raster* objects, while
the object 'rl.elv'
has to be a single-layer Raster* object. The object 'rl.MSMC'
must be either
a single positive number (a universal bucket size) or a single-layer Raster* object (a regionally-specified
bucket size). These Raster* objects must have the same bounding box, projection, and resolution. The object
'sc.year'
has to be a single integer number.
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Calculate values of all default bioclimatic indices with default settings # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.bci1 <- cliBioCliIdxGrid(temp, prec) rs.bci1 }) # Calculate values of all selected bioclimatic indices with default settings # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) bciOpVar <- c("gdd5", "bdi", "cci", "tc", "gdd0", "tw", "ptc") rs.bci2 <- cliBioCliIdxGrid(temp, prec, bsdf, elv, sc.year = year, bciOpVar = bciOpVar) rs.bci2 })
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Calculate values of all default bioclimatic indices with default settings # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.bci1 <- cliBioCliIdxGrid(temp, prec) rs.bci1 }) # Calculate values of all selected bioclimatic indices with default settings # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) bciOpVar <- c("gdd5", "bdi", "cci", "tc", "gdd0", "tw", "ptc") rs.bci2 <- cliBioCliIdxGrid(temp, prec, bsdf, elv, sc.year = year, bciOpVar = bciOpVar) rs.bci2 })
Calculates the values of selected bioclimatic indices, for a given geographical location (latitude and elevation) and year/epoch, by using the monthly time series of temperature, precipitation and relative sunshine duration.
cliBioCliIdxPoints( temp, prec, bsdf = NULL, lat = NULL, elv = NULL, year = 2000, MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), bciOpVar = c("abt", "tap", "per", "fai"), argCkd = FALSE )
cliBioCliIdxPoints( temp, prec, bsdf = NULL, lat = NULL, elv = NULL, year = 2000, MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), bciOpVar = c("abt", "tap", "per", "fai"), argCkd = FALSE )
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
bsdf |
'numeric' R object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
MSMC |
'numeric' vector with values of the maximum soil moisture capacity (aka 'bucket size') (in mm) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchPREC |
'character' vector of length 1 that indicates the scheme to generate daily values of the
daily precipitation sum. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
dvPREC |
'numeric' vector of length 12 with monthly values of the damping variable for the precipitation data. |
bciOpVar |
'character' vector of at least one length that indicates which of the bioclimatic indices is/are
to be computed. Valid values are as follows: |
argCkd |
'logical' scalar that indicates whether or not the checking and correction of arguments can be omitted. |
Taking into account all implemented bioclimatic indices, the following five require only temperature data:
abt
: Mean Annual Biotemperature (Eq 1 in Szelepcsényi et al. (2014); in °C)
mat
: Mean Annual Temperature (in °C)
tc
: Mean Temperature of the Coldest Month (in °C)
tw
: Mean Temperature of the Warmest Month (in °C)
tm10
: Number of Months with Mean Temperature above 10°C (dimensionless)
gdd5
: Growing Degree-Days on 5°C base (in °C day)
gdd0
: Growing Degree-Days on 0°C base (in °C day)
Monthly data are sufficient to calculate values of the mean temperatures of the coldest and warmest months,
the mean annual temperature/biotemperature and the number of months with temperature > 10°C, while daily
values are needed to compute values of the growing degree-days. If only a set of these bioclimatic indices has
to be calculated, the setting prec = NULL
must be used.
An important bioclimatic index for both the Holdridge life zone system and Köppen-Geiger climate
classification system is the total annual precipitation, for the calculation of which requires only monthly
precipitation data. If only this bioclimatic index has to be computed, the setting temp = NULL
must be
used. The same setting has to be used for calculation of the precipitation sum of the driest month.
In addition to monthly temperature data, latitude coordinates are also required to calculate the Condrad's
Continentality Index (cci
: Eq 4 in Conrad (1946); in per cent).
For calculating values of the Potential Evapotranspiration Ratio used in the Holdridge life zone system
(per
: Eq 4 in Szelepcsényi et al. (2014); dimensionless) and the Forestry Aridity Index introduced by
the forestry climate classification (fai
: Eq 1 in Führer et al. (2011); dimensionless), both
temperature and precipitation data at a monthly timescale are also required. Same data are needed to calculate
most precipitation statistics used by the Köppen-Geiger climate classification system:
psdry
: Precipitation Sum of the Driest Month in the Summer Half-Year (in mm)
pwdry
: Precipitation Sum of the Driest Month in the Winter Half-Year (in mm)
pswet
: Precipitation Sum of the Wettest Month in the Summer Half-Year (in mm)
pwwet
: Precipitation Sum of the Wettest Month in the Winter Half-Year (in mm)
ps
: Precipitation Sum of the Summer Half-Year (in mm)
pw
: Precipitation Sum of the Winter Half-Year (in mm)
For these bioclimatic indices, summer (winter) half-year is defined as the warmer (cooler) six month period of
AMJJAS (from April to September) and ONDJFM (from October to March).
The computation of the Budyko's Dryness Index (bdi
, dimensionless) and the Priestley–Taylor Coefficient
(ptc
, dimensionless) requires a simulation of evapotranspiration at daily time step via the
implementation of the SPLASH algorithm (Davis et al. 2017) (see
dlyEngWtrFluxPoints
). In addition to one-year time series of daily temperature and
precipitation data, the application of the SPLASH algorithm requires values of the relative sunshine duration
at a daily timescale, latitude coordinate, altitude, year/epoch, and the so-called 'bucket size'. The Dryness
Index is a ratio of annual potential evapotranspiration to precipitation (see Monserud et al. 1993). The value
of the Priestley–Taylor coefficient is calculated as the ratio of actual evapotranspiration to equilibrium
evapotranspiration, which represents the fraction of plant-available surface moisture (see Prentice et al.
1992, Davis et al. 2017).
The function applies only monthly time series to compute values of each bioclimatic index, considering the
field of application of the package. However, as we can see, in some cases there is a need for daily time
series that are here generated by using the function dlyWeaGenPoints
.
A matrix with one or more columns where each column contain the values of a given bioclimatic index.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), 'prec'
(one-year time
series of monthly precipitation sum), and 'bsdf'
(one-year time series of monthly mean relative sunshine
duration). The objects 'temp'
, 'prec'
and 'bsdf'
must be either vectors of length 12 or
12-column matrices. The first dimensions of these matrices have to be the same length. The function
automatically converts vectors into single-row matrices during the error handling, and then uses these
matrices. The first dimensions of these matrices determines the number of rows in the result matrix. In the
case of arguments that do not affect the course of the calculation procedure or the structure of the return
object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, they are as
follows: 'lat'
(latitude coordinates in decimal degrees), 'elv'
(elevation in meters above sea
level), 'year'
(year using astronomical year numbering), and 'MSMC'
('bucket size' in mm). These
scalars are converted to vectors by the function during the error handling, and these vectors are applied in
the further calculations. If these data are stored in vectors of length at least 2, their length must be the
same size of first dimension of the matrices containing the basic data.
Conrad V (1964) Usual formulas of continentality and their limits of validity. EOS, Trans Am Geophys Union 27(5):663-664. doi:10.1029/TR027i005p00663
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Führer E, Horváth L, Jagodics A, Machon A, Szabados I (2011) Application of a new aridity index in Hungarian forestry practice. Időjárás 115(3):205–216
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
Monserud RA, Denissenko OV, Tchebakova NM (1993) Comparison of Siberian paleovegetation to current and future vegetation under climate change. Clim Res 3(3):143–159. doi:10.3354/cr003143
Prentice IC, Cramer W, Harrison SP, Leemans R, Monserud RA, Solomon AM (1992) A Global Biome Model Based on Plant Physiology and Dominance, Soil Properties and Climate. J Biogeogr 19(2):117–134. doi:10.2307/2845499
Szelepcsényi Z, Breuer H, Sümegi P (2014) The climate of Carpathian Region in the 20th century based on the original and modified Holdridge life zone system. Cent Eur J Geosci 6(3):293–307. doi:10.2478/s13533-012-0189-5
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Calculate values of all default bioclimatic indices with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { bci1 <- cliBioCliIdxPoints(colMeans(temp), colMeans(prec)) bci1 }) # Calculate values of all selected bioclimatic indices with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) bciOpVar <- c("gdd5", "bdi", "cci", "tc", "gdd0", "tw", "ptc") bci2 <- cliBioCliIdxPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, bciOpVar = bciOpVar) bci2 })
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Calculate values of all default bioclimatic indices with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { bci1 <- cliBioCliIdxPoints(colMeans(temp), colMeans(prec)) bci1 }) # Calculate values of all selected bioclimatic indices with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) bciOpVar <- c("gdd5", "bdi", "cci", "tc", "gdd0", "tw", "ptc") bci2 <- cliBioCliIdxPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, bciOpVar = bciOpVar) bci2 })
Calculates the values of bioclimatic indices used in the BIOME model developed by Prentice et al. (1992), and designates the biome type using these values, for a given region and year/epoch, by using the monthly time series of temperature, precipitation and relative sunshine duration, and the elevation data.
cliBIOMEGrid( rs.temp, rs.prec, rs.bsdf, rl.elv, sc.year = 2000, rl.MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), verbose = FALSE, filename = "", ... )
cliBIOMEGrid( rs.temp, rs.prec, rs.bsdf, rl.elv, sc.year = 2000, rl.MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), verbose = FALSE, filename = "", ... )
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
rs.bsdf |
multi-layer Raster* object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
rl.elv |
single-layer Raster* object with the elevation values (in meters above sea level) |
sc.year |
'numeric' scalar with the value of the year (using astronomical year numbering) |
rl.MSMC |
'numeric' scalar or single-layer Raster* object with the value/values of the maximum soil moisture capacity (aka 'bucket size') (in mm) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchPREC |
'character' vector of length 1 that indicates the scheme to generate daily values of the
daily precipitation sum. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
dvPREC |
'numeric' vector of length 12 with monthly values of the damping variable for the precipitation data. |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
filename |
output filename |
... |
additional arguments passed on to |
See cliBIOMEPoints
.
Depending on the setting, a RasterStack with one or more layers where the numeric integers encoding the
biome type are stored at the last layer, while the additional layers contain the values of bioclimatic indices
used. The meaning of integers is given in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a single-layer RasterStack with numeric integers encoding the
biome type.
The objects 'rs.temp'
, 'rs.prec'
and 'rs.bsdf'
must be 12-layer Raster* objects, while
the object 'rl.elv'
has to be a single-layer Raster* object. The object 'rl.MSMC'
must be either
a single positive number (a universal bucket size) or a single-layer Raster* object (a regionally-specified
bucket size). These Raster* objects must have the same bounding box, projection, and resolution. The object
'sc.year'
has to be a single integer number.
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
Prentice IC, Cramer W, Harrison SP, Leemans R, Monserud RA, Solomon AM (1992) A Global Biome Model Based on Plant Physiology and Dominance, Soil Properties and Climate. J Biogeogr 19(2):117–134. doi:10.2307/2845499
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) inp_exClnrGrid <- lapply(inp_exClnrGrid, crop, extent(20.15, 20.25, 46.25, 46.35)) # Designate the biome type (using the related bioclimatic indices), with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.BIOME <- cliBIOMEGrid(temp, prec, bsdf, elv, sc.year = year, verbose = TRUE) rs.BIOME })
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) inp_exClnrGrid <- lapply(inp_exClnrGrid, crop, extent(20.15, 20.25, 46.25, 46.35)) # Designate the biome type (using the related bioclimatic indices), with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.BIOME <- cliBIOMEGrid(temp, prec, bsdf, elv, sc.year = year, verbose = TRUE) rs.BIOME })
Calculates the values of bioclimatic indices used in the BIOME model developed by Prentice et al. (1992), and designates the biome type using these values, for a given geographical location (latitude and elevation) and year/epoch, by using the monthly time series of temperature, precipitation and relative sunshine duration.
cliBIOMEPoints( temp, prec, bsdf, lat, elv, year = 2000, MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), verbose = FALSE )
cliBIOMEPoints( temp, prec, bsdf, lat, elv, year = 2000, MSMC = 150, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), verbose = FALSE )
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
bsdf |
'numeric' R object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
MSMC |
'numeric' vector with values of the maximum soil moisture capacity (aka 'bucket size') (in mm) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchPREC |
'character' vector of length 1 that indicates the scheme to generate daily values of the
daily precipitation sum. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
dvPREC |
'numeric' vector of length 12 with monthly values of the damping variable for the precipitation data. |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
To classify vegetation, the BIOME model developed by Prentice et al. (1992) uses the values of the following 5 bioclimatic indices:
tc
: Mean Temperature of the Coldest Month (in °C)
tw
: Mean Temperature of the Warmest Month (in °C)
gdd5
: Growing Degree-Days on 5°C base (in °C day)
gdd0
: Growing Degree-Days on 0°C base (in °C day)
ptc
: Priestley–Taylor Coefficient (dimensionless)
For details about calculating bioclimatic indices, see the function
cliBioCliIdxPoints
. The Priestley–Taylor coefficient (ptc
, dimensionless)
is exceptional because its computation requires a simulation of evapotranspiration at daily time step via the
implementation of the SPLASH algorithm (Davis et al. 2017) (see
dlyEngWtrFluxPoints
). The application of the SPLASH algorithm requires, among other
things, one-year time series of the climate variables at daily scale, which are generated from average monthly
values using the function dlyWeaGenPoints
.
The designation of the biome type is implemented as a two-step procedure. First, the presence of each plant
functional type (PFT) is estimated under the given climatic conditions. Subsequently, the biome type is
designated by combining PFTs occurring at the maximal dominance level with each other (see Table 5 in Prentice
et al. (1992)). Each PFT is described by constraints of bioclimatic variables associated with their climatic
tolerances and requirements (see Table 1 in Prentice et al. (1992)). In the initial version of the BIOME
model, a total of 17 biome types are distinguished (see vegClsNumCodes
).
Depending on the setting, a data frame with one or more columns where the biome types are stored in the
last (character) column, while the additional columns contain the values of bioclimatic indices used. The
abbreviations of biome types can be found in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a one-column data frame with the biome types.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), 'prec'
(one-year time
series of monthly precipitation sum), and 'bsdf'
(one-year time series of monthly mean relative
sunshine duration). The objects 'temp'
, 'prec'
and 'bsdf'
must be either vectors of
length 12 or 12-column matrices. The first dimensions of these matrices have to be the same length. The
function automatically converts vectors into single-row matrices during the error handling, and then uses these
matrices. The first dimensions of these matrices determines the number of rows in the result matrix. In the
case of arguments that do not affect the course of the calculation procedure or the structure of the return
object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, they are as
follows: 'lat'
(latitude coordinates in decimal degrees), 'elv'
(elevation in meters above sea
level), 'year'
(year using astronomical year numbering), and 'MSMC'
('bucket size' in mm). These
scalars are converted to vectors by the function during the error handling, and these vectors are applied in
the further calculations. If these data are stored in vectors of length at least 2, their length must be the
same size of first dimension of the matrices containing the basic data.
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
Prentice IC, Cramer W, Harrison SP, Leemans R, Monserud RA, Solomon AM (1992) A Global Biome Model Based on Plant Physiology and Dominance, Soil Properties and Climate. J Biogeogr 19(2):117–134. doi:10.2307/2845499
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the biome type (using the related biolcimatic indices), with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) BIOME <- cliBIOMEPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.BIOME, identical, BIOME[, "vegCls"])) cbind(BIOME[,-c(6)], vegClsNumCodes[numCode, c("Name.BIOME", "Code.BIOME")]) })
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the biome type (using the related biolcimatic indices), with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) BIOME <- cliBIOMEPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.BIOME, identical, BIOME[, "vegCls"])) cbind(BIOME[,-c(6)], vegClsNumCodes[numCode, c("Name.BIOME", "Code.BIOME")]) })
Estimates monthly averages for daily fraction of bright sunshine duration, for a given region and year, by using the monthly time series of temperature and precipitation, and the elevation data.
cliBrtSunDurFrcGrid( rs.temp, rs.prec, rl.elv, sc.year = 2000, aprchSIM = c("Solar123", "SPLASH"), filename = "", ... )
cliBrtSunDurFrcGrid( rs.temp, rs.prec, rl.elv, sc.year = 2000, aprchSIM = c("Solar123", "SPLASH"), filename = "", ... )
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
rl.elv |
single-layer Raster* object with the elevation values (in meters above sea level) |
sc.year |
'numeric' scalar with the value of the year (using astronomical year numbering) |
aprchSIM |
'character' vector of length 1 that indicates the formula used to estimate the value of solar
irradiance/irradiation for a specific day. Valid values are as follows: |
filename |
output filename |
... |
additional arguments passed on to |
A 12-layer RasterStack with one-year time series of monthly mean relative sunshine duration.
The objects 'rs.temp'
and 'rs.prec'
must be 12-layer Raster* objects, while the object
'rl.elv'
has to be a single-layer Raster* object. These Raster* objects must have the same bounding
box, projection, and resolution. The object 'sc.year'
has to be a single integer number.
Allen RG (1996) Assessing integrity of weather data for reference evapotranspiration estimation. J Irrig Drain Eng 122(2):97–106. doi:10.1061/(ASCE)0733-9437(1996)122:2(97)
Berger A, Loutre MF (1991) Insolation values for the climate of the last 10 million years. Quat Sci Rev 10(4):297-317. doi:10.1016/0277-3791(91)90033-Q
Brock TD (1981) Calculating solar radiation for ecological studies. Ecol Model 14(1–2):1-19. doi:10.1016/0304-3800(81)90011-9
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Yin X (1997a) Calculating daytime mean relative air mass. Agric For Meteorol 87(2-3):85-90. doi:10.1016/S0168-1923(97)00029-4
Yin X (1997b) Optical Air Mass: Daily Integration and its Applications. Meteorol Atmos Phys 63(3-4):227-233. doi:10.1007/BF01027387
Yin X (1999) Bright Sunshine Duration in Relation to Precipitation, Air Temperature and Geographic Location. Theor Appl Climatol 64(1–2):61–68. doi:10.1007/s007040050111
# Loading mandatory data for the Example 'Single-Year Grid' data(inp_exSglyGrid) inp_exSglyGrid <- lapply(inp_exSglyGrid, crop, extent(20.15, 20.25, 46.25, 46.35)) # Estimate values of the monthly mean relative sunshine duration # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the year 2010 with(inp_exSglyGrid, { rs.bsdf <- cliBrtSunDurFrcGrid(temp, prec, elv, sc.year = 2010) rs.bsdf })
# Loading mandatory data for the Example 'Single-Year Grid' data(inp_exSglyGrid) inp_exSglyGrid <- lapply(inp_exSglyGrid, crop, extent(20.15, 20.25, 46.25, 46.35)) # Estimate values of the monthly mean relative sunshine duration # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the year 2010 with(inp_exSglyGrid, { rs.bsdf <- cliBrtSunDurFrcGrid(temp, prec, elv, sc.year = 2010) rs.bsdf })
Estimates monthly averages for daily fraction of bright sunshine duration, for a given geographical location (latitude, longitude, and elevation) and year, by using the monthly time series of temperature and precipitation.
cliBrtSunDurFrcPoints( temp, prec, lat, lon, elv, year = 2000, aprchSIM = c("Solar123", "SPLASH") )
cliBrtSunDurFrcPoints( temp, prec, lat, lon, elv, year = 2000, aprchSIM = c("Solar123", "SPLASH") )
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
lon |
'numeric' vector with the longitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
aprchSIM |
'character' vector of length 1 that indicates the formula used to estimate the value of solar
irradiance/irradiation for a specific day. Valid values are as follows: |
To estimate the monthly averages of relative sunlight duration, the approach presented by Yin (1999) is
implemented here. Many variables in this estimation scheme can be easily and unambiguously determined, but the
approach uses two important quantities, the calculation method of which can be chosen here depending on the
purpose of the investigations. One of them is the estimated value of the mean hourly solar irradiance under
cloudless-sky conditions. This quantity can be estimated in this implementation of the approach with the
original method (aprchSIM = 'Solar123'
) or with the solar radiation model used in the SPLASH algorithm,
considering the variability of orbital parameters of the Earth over time (aprchSIM = 'SPLASH'
). The
latter is recommended for paleo-climatological and paleo-environmental studies. These solar radiation models
is also applied to calculate the daylength, whose monthly averages are used to estimate monthly averages of
daily potential evapotranspiration (Eqs. A10 and A11 in Yin (1998)).
The procedure proposed by Yin (1999) requires the calculation of several regional factors (see Eq 3.3 in Yin
(1999)). Each regional factor is activated as a function of latitude and longitude. However, it is important
to note that in this implementation, these factors are activated with the current configuration of continents
and islands. Continents and regions are classified using the high-resolution world map of the
rworldxtra-package
. In checking whether or not a given geographic location can be
defined as an island, the high-resolution world map of the rnaturalearth
is applied.
A 12-column matrix with monthly averages of relative sunshine duration.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), and 'prec'
(one-year time
series of monthly precipitation sum). The objects 'temp'
and 'prec'
must be either 12-length
vectors or 12-column matrices. The first dimensions of these matrices have to be the same length. The function
automatically converts vectors into single-row matrices during the error handling, and then uses these
matrices. The first dimensions of these matrices determines the number of rows in the result matrix. In the
case of arguments that do not affect the course of the calculation procedure or the structure of the return
object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, they are as
follows: 'lat'
(latitude coordinates in decimal degrees), 'lon'
(longitude coordinates in decimal
degrees), 'elv'
(elevation in meters above sea level), and 'year'
(year using astronomical year
numbering). These scalars are converted to vectors by the function during the error handling, and these vectors
are applied in the further calculations. If these data are stored in vectors of length at least 2, their length
must be the same size of first dimension of the matrices containing the basic data.
Allen RG (1996) Assessing integrity of weather data for reference evapotranspiration estimation. J Irrig Drain Eng 122(2):97–106. doi:10.1061/(ASCE)0733-9437(1996)122:2(97)
Berger A, Loutre MF (1991) Insolation values for the climate of the last 10 million years. Quat Sci Rev 10(4):297-317. doi:10.1016/0277-3791(91)90033-Q
Brock TD (1981) Calculating solar radiation for ecological studies. Ecol Model 14(1–2):1-19. doi:10.1016/0304-3800(81)90011-9
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Yin X (1997a) Calculating daytime mean relative air mass. Agric For Meteorol 87(2-3):85-90. doi:10.1016/S0168-1923(97)00029-4
Yin X (1997b) Optical Air Mass: Daily Integration and its Applications. Meteorol Atmos Phys 63(3-4):227-233. doi:10.1007/BF01027387
Yin X (1998) The Albedo of Vegetated Land Surfaces: Systems Analysis and Mathematical Modeling. Theor Appl Climatol 60(1–4):121–140. doi:10.1007/s007040050038
Yin X (1999) Bright Sunshine Duration in Relation to Precipitation, Air Temperature and Geographic Location. Theor Appl Climatol 64(1–2):61–68. doi:10.1007/s007040050111
library (graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) # Measured and estimated one-year time series of the monthly mean relative sunshine duration, # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the year 2010 with(inp_exPoints, { bsdf01 <- matrix(nrow = 0, ncol = 12, dimnames = list(NULL, month.abb)) bsdf01 <- rbind(bsdf01, "Measured" = bsdf["2010", ]) bsdf01 <- rbind(bsdf01, "Solar123" = cliBrtSunDurFrcPoints(temp["2010", ], prec["2010", ], lat, lon, elv, year = 2010)) bsdf01 <- rbind(bsdf01, "SPLASH" = cliBrtSunDurFrcPoints(temp["2010", ], prec["2010", ], lat, lon, elv, year = 2010, aprchSIM = "SPLASH")) cols <- c("black", "green", "blue") matplot(t(bsdf01), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Month", ylab = "Average relative sunshine duration (unitless)") axis(1, at = seq(1, ncol(bsdf01)), labels = colnames(bsdf01)) legend(1, 0.7, legend = rownames(bsdf01), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) }) # Relative root mean square error between measured and estimated values for the 'bsdf', # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the period 1981-2010 with(inp_exPoints, { years <- seq(1981, 2010) bsdf02 <- cliBrtSunDurFrcPoints(temp, prec, lat, lon, elv, year = years) rrmse <- function(pre, obs) { (sqrt(mean((pre - obs) ^ 2.)) / mean(obs)) * 100. } rrmse_bsdf <- sapply(1 : 12, function(i) { rrmse(bsdf02[, i], bsdf[, i]) }) cols <- c("black", "green") plot(rrmse_bsdf, type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Month", ylab = "Relative root mean square error (%)") axis(1, at = 1 : 12, labels = month.abb) })
library (graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) # Measured and estimated one-year time series of the monthly mean relative sunshine duration, # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the year 2010 with(inp_exPoints, { bsdf01 <- matrix(nrow = 0, ncol = 12, dimnames = list(NULL, month.abb)) bsdf01 <- rbind(bsdf01, "Measured" = bsdf["2010", ]) bsdf01 <- rbind(bsdf01, "Solar123" = cliBrtSunDurFrcPoints(temp["2010", ], prec["2010", ], lat, lon, elv, year = 2010)) bsdf01 <- rbind(bsdf01, "SPLASH" = cliBrtSunDurFrcPoints(temp["2010", ], prec["2010", ], lat, lon, elv, year = 2010, aprchSIM = "SPLASH")) cols <- c("black", "green", "blue") matplot(t(bsdf01), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Month", ylab = "Average relative sunshine duration (unitless)") axis(1, at = seq(1, ncol(bsdf01)), labels = colnames(bsdf01)) legend(1, 0.7, legend = rownames(bsdf01), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) }) # Relative root mean square error between measured and estimated values for the 'bsdf', # at a grid cell near Szeged, Hungary (46.3N, 20.2E), in the period 1981-2010 with(inp_exPoints, { years <- seq(1981, 2010) bsdf02 <- cliBrtSunDurFrcPoints(temp, prec, lat, lon, elv, year = years) rrmse <- function(pre, obs) { (sqrt(mean((pre - obs) ^ 2.)) / mean(obs)) * 100. } rrmse_bsdf <- sapply(1 : 12, function(i) { rrmse(bsdf02[, i], bsdf[, i]) }) cols <- c("black", "green") plot(rrmse_bsdf, type = "l", lwd = 2, col = cols, xaxt = "n", xlab = "Month", ylab = "Relative root mean square error (%)") axis(1, at = 1 : 12, labels = month.abb) })
Calculates the values of bioclimatic indices used in forest-steppe models with different theoretical backgrounds, and estimates the presence/absence of 'forest-steppe' ecotone, for a given region and year/epoch, by using the monthly time series of climate variables, and the elevation data.
cliForestSteppeGrid( rs.temp, rs.prec, rs.bsdf = NULL, rl.elv = NULL, sc.year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), verbose = FALSE, filename = "", ... )
cliForestSteppeGrid( rs.temp, rs.prec, rs.bsdf = NULL, rl.elv = NULL, sc.year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), verbose = FALSE, filename = "", ... )
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
rs.bsdf |
multi-layer Raster* object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
rl.elv |
single-layer Raster* object with the elevation values (in meters above sea level) |
sc.year |
'numeric' scalar with the value of the year (using astronomical year numbering) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
filename |
output filename |
... |
additional arguments passed on to |
Depending on the settings, a RasterStack with two or more layers where the presence/absence data are
stored in layers labelled 'fsp_hlz'
, 'fsp_fai'
and 'fsp_svm'
, while the additional layers
contain the values of bioclimatic indices used. If verbose = FALSE
, the return object is a two- or
three-layer RasterStack with presence/absence data, depending on the available data.
The objects 'rs.temp'
, 'rs.prec'
and 'rs.bsdf'
must be 12-layer Raster* objects, while
the object 'rl.elv'
has to be a single-layer Raster* object. These Raster* objects must have the same
bounding box, projection, and resolution. The object 'sc.year'
has to be a single integer number.
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.fsp1 <- cliForestSteppeGrid(temp, prec, verbose = TRUE) rs.fsp1 }) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.fsp2 <- cliForestSteppeGrid(temp, prec, bsdf, elv, sc.year = year, verbose = TRUE) rs.fsp2 })
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.fsp1 <- cliForestSteppeGrid(temp, prec, verbose = TRUE) rs.fsp1 }) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { year <- trunc(mean(seq(1981, 2010))) rs.fsp2 <- cliForestSteppeGrid(temp, prec, bsdf, elv, sc.year = year, verbose = TRUE) rs.fsp2 })
Calculates the values of bioclimatic indices used in forest-steppe models with different theoretical backgrounds, and estimates the presence/absence of 'forest-steppe' ecotone, for a given geographical location (latitude and elevation) and year/epoch, by using the monthly time series of climate variables.
cliForestSteppePoints( temp, prec, bsdf = NULL, lat = NULL, elv = NULL, year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), verbose = FALSE )
cliForestSteppePoints( temp, prec, bsdf = NULL, lat = NULL, elv = NULL, year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), verbose = FALSE )
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
bsdf |
'numeric' R object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
Here, three forest-steppe models with different theoretical backgrounds are implemented:
fsp_hlz
: A modified variant of the widely used Holdridge life zone (HLZ) system (see for the
basic concept Holdridge 1947, 1967; for a proposed variant Szelepcsényi et al. 2014).
fsp_fai
: A clarified version of the forestry climate classification (see for the basic concept
Führer et al. 2011; for a proposed variant Mátyás et al. 2018)
fsp_svm
: An initial version of the Siberian Vegetation Model (see Monserud et al. 1993)
The HLZ system classifies the vegetation type based on the distance from the ideal (theoretical) point in the 3-dimensional space of the following bioclimatic indices:
abt
: Mean Annual Biotemperature (Eq 1 in Szelepcsényi et al. (2014); in °C)
tap
: Total Annual Precipitation (in mm)
per
: Potential Evapotranspiration Ratio (Eq 4 in Szelepcsényi et al. (2014); dimensionless)
The plotting of thresholds of the above-mentioned bioclimatic indices in the HLZ chart leads to emerge a set
of hexagons and triangles. The hexagons indicate the so-called core HLZ types, while the so-called
transitional HLZ types are circumscribed by equilateral triangles in the HLZ chart (see Szelepcsényi et al.
2014). However, in contrast to this study, here, the transitional types are defined as separate zones
designated by the centres of the triangles. As a result, hexagons appear around the triangles in the HLZ
chart, and in parallel, the size of the hexagons denoting the core types also decreases. Thus, the size of the
core and transitional types are the same in this approach. During the classification, all forest-steppe types
designated by Szelepcsényi et al. (2014) (and redefined by us) are aggregated into one class.
The forestry climate classification developed by Führer et al. (2011) was reworked by Mátyás et al. (2018). In
the context of assessing the effects of future climate change, the 'forest-steppe' climate class was
introduced in the model. In the work of Mátyás et al. (2018), this type is characterized by the Forestry
Aridity Index (fai
, dimensionless) values between 7.25 and 8. This definition is used here.
The Siberian Vegetation Model (Monserud et al. 1993) defines numerous types of forest-steppe on the basis of
values of the Growing Degree-Days above 5°C (gdd5
, in °C day), the Budyko's Dryness Index
(bdi
, dimensionless), and the Condrad's Continentality Index (cci
, in per cent). Here, all
such ecotone types are aggregated into one class, in order to estimate the presence/absence of the
‘forest-steppe’ ecotone.
Depending on the setting, a data frame with three or more columns where the presence/absence data are
stored in the last three columns labelled 'fsp_hlz'
, 'fsp_fai'
and 'fsp_svm'
, while the
additional columns contain the values of bioclimatic indices used. If verbose = FALSE
, the return
object is a two- or three-column data frame with the presence/absence data, depending on the available data.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), 'prec'
(one-year time
series of monthly precipitation sum), and 'bsdf'
(one-year time series of monthly mean relative
sunshine duration). The objects 'temp'
, 'prec'
and 'bsdf'
must be either vectors of
length 12 or 12-column matrices. The first dimensions of these matrices have to be the same length. The
function automatically converts vectors into single-row matrices during the error handling, and then uses these
matrices. The first dimensions of these matrices determines the number of rows in the result matrix. In the
case of arguments that do not affect the course of the calculation procedure or the structure of the return
object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, they are as
follows: 'lat'
(latitude coordinates in decimal degrees), 'elv'
(elevation in meters above sea
level), and 'year'
(year using astronomical year numbering). These scalars are converted to vectors by
the function during the error handling, and these vectors are applied in the further calculations. If these
data are stored in vectors of length at least 2, their length must be the same size of first dimension of the
matrices containing the basic data.
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Führer E, Horváth L, Jagodics A, Machon A, Szabados I (2011) Application of a new aridity index in Hungarian forestry practice. Időjárás 115(3):205–216
Holdridge LR (1947) Determination of World Plant Formations From Simple Climatic Data. Science 105(2727):367–368. doi:10.1126/science.105.2727.367
Holdridge LR (1967) Life zone ecology. Tropical Science Center, San Jose, Costa Rica
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
Mátyás Cs, Berki I, Bidló A, Csóka Gy, Czimber K, Führer E, Gálos B, Gribovszki Z, Illés G, Hirka A, Somogyi Z (2018) Sustainability of Forest Cover under Climate Change on the Temperate-Continental Xeric Limits. Forests 9(8):489. doi:10.3390/f9080489
Monserud RA, Denissenko OV, Tchebakova NM (1993) Comparison of Siberian paleovegetation to current and future vegetation under climate change. Clim Res 3(3):143–159. doi:10.3354/cr003143
Szelepcsényi Z, Breuer H, Sümegi P (2014) The climate of Carpathian Region in the 20th century based on the original and modified Holdridge life zone system. Cent Eur J Geosci 6(3):293–307. doi:10.2478/s13533-012-0189-5
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, at a grid cell near Szeged, Hungary (46.3N, 20.2E) # (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) fsp <- cliForestSteppePoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, verbose = TRUE) fsp })
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Predict the 'forest-steppe' ecotone (using the related bioclimatic indices), # with default settings, at a grid cell near Szeged, Hungary (46.3N, 20.2E) # (for the normal period 1981-2010) with(inp_exPoints, { year <- trunc(mean(seq(1981, 2010))) fsp <- cliForestSteppePoints(colMeans(temp), colMeans(prec), colMeans(bsdf), lat, elv, year = year, verbose = TRUE) fsp })
Calculates the values of bioclimatic indices used in the Holdridge life zone (HLZ) system (Holdridge 1947, 1967), and designates the HLZ type using these values, for a given region, by using the monthly time series of temperature and precipitation.
cliHoldridgeGrid(rs.temp, rs.prec, verbose = FALSE, filename = "", ...)
cliHoldridgeGrid(rs.temp, rs.prec, verbose = FALSE, filename = "", ...)
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
filename |
output filename |
... |
additional arguments passed on to |
See cliHoldridgePoints
.
Depending on the setting, a RasterStack with one or more layers where the numeric integers encoding the
HLZ type are stored at the last layer, while the additional layers contain the values of bioclimatic indices
used. The meaning of integers is given in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a single-layer RasterStack with numeric integers encoding the HLZ
type.
The objects 'rs.temp'
and 'rs.prec'
must be 12-layer Raster* objects. These Raster* objects
must have the same bounding box, projection, and resolution.
Holdridge LR (1947) Determination of World Plant Formations From Simple Climatic Data. Science 105(2727):367–368. doi:10.1126/science.105.2727.367
Holdridge LR (1967) Life zone ecology. Tropical Science Center, San Jose, Costa Rica
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Designate the HLZ types (using the related bioclimatic indices) # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.HLZ <- cliHoldridgeGrid(temp, prec, verbose = TRUE) rs.HLZ })
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Designate the HLZ types (using the related bioclimatic indices) # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.HLZ <- cliHoldridgeGrid(temp, prec, verbose = TRUE) rs.HLZ })
Calculates the values of bioclimatic indices used in the Holdridge life zone (HLZ) system (Holdridge 1947, 1967), and designates the HLZ type using these values, by using the monthly time series of temperature and precipitation.
cliHoldridgePoints(temp, prec, verbose = FALSE)
cliHoldridgePoints(temp, prec, verbose = FALSE)
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
To classify vegetation, the HLZ system developed by Holdridge (1947, 1967) uses the values of the following 3 bioclimatic indices:
abt
: Mean Annual Biotemperature (Eq 1 in Szelepcsényi et al. (2014); in °C)
tap
: Total Annual Precipitation (in mm)
per
: Potential Evapotranspiration Ratio (Eq 4 in Szelepcsényi et al. (2014); dimensionless)
For details about calculating bioclimatic indices, see the function
cliBioCliIdxPoints
.
The HLZ system classifies the vegetation type based on the distance from the ideal (theoretical) point in the
3-dimensional space of bioclimatic indices. Numerous variants of the HLZ system are known (e.g.,
Henderson-Sellers 1994; Yates et al. 2000). Here, one of its most widely used versions ('version with no
altitudinal belts') is implemented, in accordance with works of Szelepcsényi et al. (2014, 2018). In this
version, a total of 39 HLZ types are distinguished (see vegClsNumCodes
).
Depending on the setting, a data frame with one or more columns where the HLZ types are stored in the last
(character) column, while the additional columns contain the values of bioclimatic indices used. The
abbreviations of HLZ types can be found in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a one-column data frame with the HLZ types.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), and 'prec'
(one-year
time series of monthly precipitation sum). The objects 'temp'
and 'pre'
must be either vectors
of length 12 or 12-column matrices. The first dimensions of these matrices have to be the same length. The
function automatically converts vectors into single-row matrices during the error handling, and then uses
these matrices. The first dimensions of these matrices determines the number of rows in the result matrix.
Henderson-Sellers A (1994) Global terrestrial vegetation ‘prediction’: the use and abuse of climate and application models. Prog Phys Geogr 18(2):209–246. doi:10.1177/030913339401800203
Holdridge LR (1947) Determination of World Plant Formations From Simple Climatic Data. Science 105(2727):367–368. doi:10.1126/science.105.2727.367
Holdridge LR (1967) Life zone ecology. Tropical Science Center, San Jose, Costa Rica
Szelepcsényi Z, Breuer H, Sümegi P (2014) The climate of Carpathian Region in the 20th century based on the original and modified Holdridge life zone system. Cent Eur J Geosci 6(3):293–307. doi:10.2478/s13533-012-0189-5
Szelepcsényi Z, Breuer H, Kis A, Pongrácz R, Sümegi P (2018) Assessment of projected climate change in the Carpathian Region using the Holdridge life zone system. Theor Appl Climatol 131(1–2):593–610. doi:10.1007/s00704-016-1987-3
Yates DN, Kittel TGF, Cannon RF (2000) Comparing the Correlative Holdridge Model to Mechanistic Biogeographical Models for Assessing Vegetation Distribution Response to Climatic Change. Clim Chang 44(1–2):59–87. doi:10.1023/A:1005495908758
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the HLZ type (using the related bioclimatic indices), # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { HLZ <- cliHoldridgePoints(colMeans(temp), colMeans(prec), verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.HLZ, identical, HLZ[, "vegCls"])) cbind(HLZ[,-c(4)], vegClsNumCodes[numCode, c("Name.HLZ", "Code.HLZ")]) })
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the HLZ type (using the related bioclimatic indices), # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { HLZ <- cliHoldridgePoints(colMeans(temp), colMeans(prec), verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.HLZ, identical, HLZ[, "vegCls"])) cbind(HLZ[,-c(4)], vegClsNumCodes[numCode, c("Name.HLZ", "Code.HLZ")]) })
Calculates the values of bioclimatic indices used in the Köppen-Geiger classification (KGC) system (Köppen 1936), and designates the KGC type using these values, by using the monthly time series of temperature and precipitation. The classification scheme is based on the procedure described by Köppen (1936) and follows the modifications described by Peel et al. (2007).
cliKoppenGrid(rs.temp, rs.prec, verbose = FALSE, filename = "", ...)
cliKoppenGrid(rs.temp, rs.prec, verbose = FALSE, filename = "", ...)
rs.temp |
multi-layer Raster* object with one-year time series of monthly mean air temperature (in °C) |
rs.prec |
multi-layer Raster* object with one-year time series of monthly precipitation sum (in mm) |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
filename |
output filename |
... |
additional arguments passed on to |
See cliKoppenPoints
.
Depending on the setting, a RasterStack with one or more layers where the numeric integers encoding the
KGC type are stored at the last layer, while the additional layers contain the values of bioclimatic indices
used. The meaning of integers is given in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a single-layer RasterStack with numeric integers encoding the KGC
type.
The objects 'rs.temp'
and 'rs.prec'
must be 12-layer Raster* objects. These Raster* objects
must have the same bounding box, projection, and resolution.
Köppen W (1936) Das geographische System der Klimate. In: Köppen W, Geiger R (eds) Handbuch der Klimatologie. Verlag von Gebrüder Borntraeger, Berlin, Germany, pp 1–44
Peel MC, Finlayson BL, McMahon TA (2007) Updated world map of the Köppen-Geiger climate classification. Hydrol Earth Syst Sci 11(5):1633–1644. doi:10.5194/hess-11-1633-2007
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Designate the KGC types (using the related bioclimatic indices) # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.KGC <- cliKoppenGrid(temp, prec, verbose = TRUE) rs.KGC })
# Loading mandatory data for the Example 'Climate Normal Grid' data(inp_exClnrGrid) # Designate the KGC types (using the related bioclimatic indices) # for Csongrad-Csanad County (for the normal period 1981-2010) with(inp_exClnrGrid, { rs.KGC <- cliKoppenGrid(temp, prec, verbose = TRUE) rs.KGC })
Calculates the values of bioclimatic indices used in the Köppen-Geiger classification (KGC) system (Köppen 1936), and designates the KGC type using these values, by using the monthly time series of temperature and precipitation. The classification scheme is based on the procedure described by Köppen (1936) and follows the modifications described by Peel et al. (2007).
cliKoppenPoints(temp, prec, verbose = FALSE)
cliKoppenPoints(temp, prec, verbose = FALSE)
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
verbose |
'logical' scalar that indicates whether or not values of the bioclimatic indices used should be added to the output. |
To classify vegetation, the KGC system developed by Köppen (1936) and fine-tuned by Peel. et al. (2007) uses the values of the following 13 bioclimatic indices:
tap
: Total Annual Precipitation (in mm)
mat
: Mean Annual Temperature (in °C)
tw
: Mean Temperature of the Warmest Month (in °C)
tc
: Mean Temperature of the Coldest Month (in °C)
tm10
: Number of Months with Mean Temperature above 10°C (dimensionless)
pdry
: Precipitation Sum of the Driest Month (in mm)
psdry
: Precipitation Sum of the Driest Month in the Summer Half-Year (in mm)
pwdry
: Precipitation Sum of the Driest Month in the Winter Half-Year (in mm)
pswet
: Precipitation Sum of the Wettest Month in the Summer Half-Year (in mm)
pwwet
: Precipitation Sum of the Wettest Month in the Winter Half-Year (in mm)
ps
: Precipitation Sum of the Summer Half-Year (in mm)
pw
: Precipitation Sum of the Winter Half-Year (in mm)
pth
: Dryness Threshold (in mm)
For details about calculating bioclimatic indices, see the function
cliBioCliIdxPoints
. Since pth
is more of a technical measure, it is not
calculated by the function cliBioCliIdxPoints
. The value of pth
depends on
mean annual temperature and annual cycle of precipitation: pth = 2 * mat
if >70
in winter half-year, (b) pth = 2 * mat + 28
if >70
otherwise pth = 2 * mat + 14
. For this index, the same definitions are used for seasons as in the
function cliBioCliIdxPoints
, i.e., summer (winter) half-year is defined as the
warmer (cooler) six month period of AMJJAS (from April to September) and ONDJFM (from October to March).
Numerous variants of the Köppen classification system are known (e.g., Köppen-Geiger classification: Köppen
1936; Köppen-Trewartha classification: Trewartha and Horn 1980). Here, one of the most widely used versions of
the Köppen-Geiger classification system is implemented, in accordance with works of Peel et al. (2007) and
Beck et al. (2018). This classification system is the same as that presented by Köppen (1936) with three
differences. First, classes 'C'
(temperate) and 'D'
(cold) are distinguished using a 0°C
threshold instead of a -3°C threshold, following Russell (1931). Second, the sub-classes of the class
'B'
(arid) are identified depending on whether 70
half-year. Third, the sub-classes 's'
(dry summer) and 'w'
(dry winter) within the classes
'C'
and 'D'
are made mutually exclusive by assigning 's'
when more precipitation falls in
winter than in summer and assigning 'w'
otherwise. In this version, a total of 30 KGC types are
distinguished (see vegClsNumCodes
).
Depending on the setting, a data frame with one or more columns where the KGC types are stored in the
last (character) column, while the additional columns contain the values of bioclimatic indices used. The
abbreviations of KGC types can be found in the data frame vegClsNumCodes
. If
verbose = FALSE
, the return object is a one-column data frame with the KGC types.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'temp'
(one-year time series of monthly mean air temperature), and 'prec'
(one-year
time series of monthly precipitation sum). The objects 'temp'
and 'pre'
must be either vectors
of length 12 or 12-column matrices. The first dimensions of these matrices have to be the same length. The
function automatically converts vectors into single-row matrices during the error handling, and then uses
these matrices. The first dimensions of these matrices determines the number of rows in the result matrix.
Beck HE, Zimmermann NE, McVicar TR, Vergopolan N, Berg A, Wood EF (2018) Present and future Köppen-Geiger climate classification maps at 1-km resolution. Sci Data 5:180214. doi:10.1038/sdata.2018.214
Köppen W (1936) Das geographische System der Klimate. In: Köppen W, Geiger R (eds) Handbuch der Klimatologie. Verlag von Gebrüder Borntraeger, Berlin, Germany, pp 1–44
Peel MC, Finlayson BL, McMahon TA (2007) Updated world map of the Köppen-Geiger climate classification. Hydrol Earth Syst Sci 11(5):1633–1644. doi:10.5194/hess-11-1633-2007
Russell RJ (1931) Dry Climates of the United States: I. Climatic Map. University of California, Publications in Geography 5:1–41
Trewartha GT, Horn LH (1980) An Introduction to Climate. Fifth Edition. McGraw-Hill, New York, NY
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the KGC type (using the related bioclimatic indices), # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { KGC <- cliKoppenPoints(colMeans(temp), colMeans(prec), verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.KGC, identical, KGC[, "vegCls"])) cbind(KGC[,-c(14)], vegClsNumCodes[numCode, c("Name.KGC", "Code.KGC")]) })
# Loading mandatory data for the Example 'Points' data(inp_exPoints) # Designate the KGC type (using the related bioclimatic indices), # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) with(inp_exPoints, { KGC <- cliKoppenPoints(colMeans(temp), colMeans(prec), verbose = TRUE) numCode <- which(sapply(vegClsNumCodes$Code.KGC, identical, KGC[, "vegCls"])) cbind(KGC[,-c(14)], vegClsNumCodes[numCode, c("Name.KGC", "Code.KGC")]) })
Estimates the daily amounts of energy and water fluxes and the associated monthly bioclimatic variables, by using the SPLASH algorithm described by Davis et al. (2017). This version of the algorithm is directly suitable for paleoclimate applications because it takes into account the time variability of the Earth's orbital elements, and thus changes in the seasonal cycle of insolation.
dlyEngWtrFluxPoints( TEMP, PREC, BSDF, lat, elv, year = 2000, MSMC = 150, daily = TRUE, mlyOpVar = c("EET", "PET", "AET") )
dlyEngWtrFluxPoints( TEMP, PREC, BSDF, lat, elv, year = 2000, MSMC = 150, daily = TRUE, mlyOpVar = c("EET", "PET", "AET") )
TEMP |
'numeric' R object with one-year time series of daily mean air temperature (in °C) |
PREC |
'numeric' R object with one-year time series of daily precipitation sum (in mm) |
BSDF |
'numeric' R object with one-year time series of daily fractional sunshine duration (dimensionless) |
lat |
'numeric' vector with the latitude coordinates (in decimal degrees) |
elv |
'numeric' vector with the elevation values (in meters above sea level) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
MSMC |
'numeric' vector with values of the maximum soil moisture capacity (aka 'bucket size') (in mm) |
daily |
'logical' scalar that indicates whether or not daily values should also be computed. |
mlyOpVar |
'character' vector of at least one length that indicates the bioclimatic variable(s) for which
monthly time series are to be calculated. Valid values are as follows: |
To estimate the daily radiation, evapotranspiration and soil moisture for an equilibrium year, the SPLASH
algorithm described by Davis et al. (2017) is implemented with two slight amendments. In accordance with Davis
et al. (2017), daily insolation (incoming solar radiation at the top of the atmosphere) is estimated by using
Eq 1.10.3 in Duffie and Beckman (1991), with the remark that orbital parameters of the Earth are not assumed
to be constant. Temporal variability of orbital parameters is considered through the implementation of the
procedure as proposed by Berger and Loutre (1991). To simulate seasonal changes in the climatic water balance,
the simple 'bucket model' proposed by Cramer and Prentice (1988) is applied in accordance with the SPLASH
v.1.0 model. In this model, the daily value of actual evapotranspiration is estimated as an the analytical
integral of the minimum of the instantaneous evaporative supply and demand rates over a single day (see Eq 27
in Davis et al. (2017)). The SPLASH algorithm is modified in a further aspect: in the 'bucket model', the
'bucket size' is freely changeable, i.e., it can be specified regionally. Its value is set to 150 mm by
default, in accordance with Cramer and Prentice (1988).
The function provides daily estimates for the following key quantities: daily insolation
('H_0_J.m2.dy1'
), daily net surface radiation ('H_np_J.m2.dy1'
, and 'H_nn_J.m2.dy1'
);
photosynthetic photon flux density ('PPFD_mol.m2.dy1'
); daily condensation, soil moisture and runoff
('CN_mm.dy1'
, 'SM_mm.dy1'
, and 'RO_mm.dy1'
, respectively); and daily equilibrium,
potential, and actual evapotranspiration ('EET_mm.dy1'
, 'PET_mm.dy1'
, and 'AET_mm.dy1'
).
It also integrates daily data for bioclimatic variables relevant to ecoclimatological studies at a monthly
timescale: monthly equilibrium, potential and actual evapotranspiration ('EET_mo_mm.mo1'
,
'PET _mo_mm.mo1'
, and 'AET_mo_mm.mo1'
), monthly Priestley–Taylor coefficient ('PTC_mo'
),
monthly climatic water deficit ('CWD_mo_mm.mo1'
).
If daily values are also requested (daily = TRUE
), the function returns a list of lists with daily
and monthly data. If daily = FALSE
, the return object is a list with the monthly values. The character
vector 'mlyOpVar'
determines for which variables are integrated at monthly scale (for explanations see
'Details'). Daily data is available for the following quantities:
H_0_J.m2.dy1
: daily solar irradiation (in J m-2)
H_np_J.m2.dy1
: daily positive (daytime) net surface radiation (in J m-2)
H_nn_J.m2.dy1
: daily negative (nighttime) net surface radiation (in J m-2)
PPFD_mol.m2.dy1
: daily photosynthetically active radiation (in mol m-2)
CN_mm.dy1
: daily condensation (in mm)
SM_mm.dy1
: daily soil moisture (in mm)
RO_mm.dy1
: daily runoff (in mm)
EET_mm.dy1
: daily equilibrium evapotranspiration (in mm)
PET_mm.dy1
: daily potential evapotranspiration (in mm)
AET_mm.dy1
: daily actual evapotranspiration (in mm)
Each matrix in the list of daily data consists of 365 or 366 columns, while monthly data are available, of
course, as 12-column matrices. The former are accessible in the list 'dly'
, while the latter can be
found in the list labelled as 'mly'
.
As with any function with a point mode, a set of basic input data is defined here. In this case, they are as
follows: 'TEMP'
(one-year time series of daily mean air temperature), 'PREC'
(one-year time series
of daily precipitation sum), and 'BSDF'
(one-year time series of daily mean relative sunshine
duration). The objects 'TEMP'
, 'PREC'
and 'BSDF'
must be either vectors of length 365 (or
366) or 365-column (or 366-column) matrices. The first dimensions of these matrices have to be the same length.
The function automatically converts vectors into single-row matrices during the error handling, and then uses
these matrices. The first dimensions of these matrices determines the number of rows in the result matrices. In
the case of arguments that do not affect the course of the calculation procedure or the structure of the
return object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, they are as
follows: 'lat'
(latitude coordinates in decimal degrees), 'elv'
(elevation in meters above sea
level), 'year'
(year using astronomical year numbering), and 'MSMC'
('bucket size' in mm). These
scalars are converted to vectors by the function during the error handling, and these vectors are applied in
the further calculations. If these data are stored in vectors of length at least 2, their length must be the
same size of first dimension of the matrices containing the basic data.
Berger A, Loutre MF (1991) Insolation values for the climate of the last 10 million years. Quat Sci Rev 10(4):297-317. doi:10.1016/0277-3791(91)90033-Q
Cramer W, Prentice IC (1988) Simulation of regional soil moisture deficits on a European scale. Nor J Geogr 42(2-3):149–151. doi:10.1080/00291958808552193
Davis TW, Prentice IC, Stocker BD, Thomas RT, Whitley RJ, Wang H, Evans BJ, Gallego-Sala AV, Sykes MT, Cramer W (2017) Simple process-led algorithms for simulating habitats (SPLASH v.1.0): robust indices of radiation, evapotranspiration and plant-available moisture. Geosci Model Dev 10(2):689–708. doi:10.5194/gmd-10-689-2017
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
library(graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) with(inp_exPoints, { # Estimates the daily amounts of energy and water fluxes with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) year <- trunc(mean(seq(1981, 2010))) wea <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), year = year) ewf <- dlyEngWtrFluxPoints(wea$TEMP, wea$PREC, wea$BSDF, lat, lon, elv, year = year) # Check daily energy and water fluxes opar <- par(no.readonly = TRUE) par(mfrow = c(4, 1)) var <- list(t(ewf$dly$H_np_J.m2.dy1) * 1e-6, t(ewf$dly$SM_mm.dy1), t(wea$PREC)) lbl <- list(expression(italic(H[N])~(MJ~m^{-2})), expression(italic(SM[n])~(mm)), expression(italic(P[n])~(mm))) at <- list(seq(0, 16, 4), seq(0, 80, 20), seq(0, 4)) txt <- list("(a)", "(b)", "(c)") for (i in 1 : length(var)) { par(mar = c(1, 5, 1, 1)) plot(var[[i]], type = "l", lwd = 2, xlab = NA, ylab = NA, axes = FALSE) axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = at[[i]]) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = at[[i]]) mtext(side = 2, lbl[[i]], line = 3, cex = 1.1) text(-12, max(at[[i]]) / 4, txt[[i]], pos = 4, cex = 1.7) } par(mar = c(2, 5, 1, 1)) plot(t(ewf$dly$PET_mm.dy1), type = "l", lwd = 2, xlab = NA, ylab = NA, axes = FALSE, ylim = c(0, max(t(ewf$dly$PET_mm.dy1)))) lines(t(ewf$dly$AET_mm.dy1), lty = 2, lwd = 2, col = "green") axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 1, las = 1, lwd = 0, line = -0.4, at = seq(-60, 720, 30), cex.axis = 1.6) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = seq(-1, 6, 1)) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = seq(-1, 6, 1)) legend("topright", legend = c(expression(italic(E[n]^{q})), expression(italic(E[n]^{a}))), col = c("black", "green"), lty = c(1, 2), cex = 1.6, inset = 0.02, adj = c(0.5, 0.5), lwd = c(2, 2), horiz = TRUE, bty = "n", seg.len = 1) mtext(side = 2, expression(italic(E[n])~(mm)), line = 3, cex = 1.1) text(-12, 1.5, "(d)", pos = 4, cex = 1.7) par(opar) # Check monthly water balance quantities plot(t(ewf$mly$PET_mo_mm.mo1), type = "l", lwd = 2, ylim = c(0, 1.1 * max(ewf$mly$PET_mo_mm.mo1)), xlab = NA, ylab = NA, axes = FALSE) lines(t(ewf$mly$EET_mo_mm.mo1), lty = 1, lwd = 2, col = "green") lines(t(ewf$mly$AET_mo_mm.mo1), lty = 2, lwd = 2, col = "blue") box(lwd = 2) axis(side = 1, las = 1, tck = -0.02, labels = NA, at = seq(1, 12)) axis(side = 1, las = 1, lwd = 0, line = -0.4, labels = month.abb, at = seq(1, 12), cex.axis = 1.2) axis(side = 2, las = 1, tck = -0.02, labels = NA, at = seq(-20, 200, 20)) axis(side = 2, las = 1, lwd = 0, line = -0.4, at = seq(-20, 200, 20), cex.axis = 1.2) mtext(side = 2, expression(list(Evapotranspiration, mm~month^{-1})), line = 2, cex = 1.2) legend("top", legend = c("Potential", "Equilibrium", "Actual"), col = c("black", "green", "blue"), lty = c(1, 1, 2), lwd = c(2, 2, 2), inset = 0.01, x.intersp = 1.1, y.intersp = 2.0, horiz = TRUE, bty = "n", cex = 1.2) })
library(graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) with(inp_exPoints, { # Estimates the daily amounts of energy and water fluxes with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) year <- trunc(mean(seq(1981, 2010))) wea <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), year = year) ewf <- dlyEngWtrFluxPoints(wea$TEMP, wea$PREC, wea$BSDF, lat, lon, elv, year = year) # Check daily energy and water fluxes opar <- par(no.readonly = TRUE) par(mfrow = c(4, 1)) var <- list(t(ewf$dly$H_np_J.m2.dy1) * 1e-6, t(ewf$dly$SM_mm.dy1), t(wea$PREC)) lbl <- list(expression(italic(H[N])~(MJ~m^{-2})), expression(italic(SM[n])~(mm)), expression(italic(P[n])~(mm))) at <- list(seq(0, 16, 4), seq(0, 80, 20), seq(0, 4)) txt <- list("(a)", "(b)", "(c)") for (i in 1 : length(var)) { par(mar = c(1, 5, 1, 1)) plot(var[[i]], type = "l", lwd = 2, xlab = NA, ylab = NA, axes = FALSE) axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = at[[i]]) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = at[[i]]) mtext(side = 2, lbl[[i]], line = 3, cex = 1.1) text(-12, max(at[[i]]) / 4, txt[[i]], pos = 4, cex = 1.7) } par(mar = c(2, 5, 1, 1)) plot(t(ewf$dly$PET_mm.dy1), type = "l", lwd = 2, xlab = NA, ylab = NA, axes = FALSE, ylim = c(0, max(t(ewf$dly$PET_mm.dy1)))) lines(t(ewf$dly$AET_mm.dy1), lty = 2, lwd = 2, col = "green") axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 1, las = 1, lwd = 0, line = -0.4, at = seq(-60, 720, 30), cex.axis = 1.6) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = seq(-1, 6, 1)) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = seq(-1, 6, 1)) legend("topright", legend = c(expression(italic(E[n]^{q})), expression(italic(E[n]^{a}))), col = c("black", "green"), lty = c(1, 2), cex = 1.6, inset = 0.02, adj = c(0.5, 0.5), lwd = c(2, 2), horiz = TRUE, bty = "n", seg.len = 1) mtext(side = 2, expression(italic(E[n])~(mm)), line = 3, cex = 1.1) text(-12, 1.5, "(d)", pos = 4, cex = 1.7) par(opar) # Check monthly water balance quantities plot(t(ewf$mly$PET_mo_mm.mo1), type = "l", lwd = 2, ylim = c(0, 1.1 * max(ewf$mly$PET_mo_mm.mo1)), xlab = NA, ylab = NA, axes = FALSE) lines(t(ewf$mly$EET_mo_mm.mo1), lty = 1, lwd = 2, col = "green") lines(t(ewf$mly$AET_mo_mm.mo1), lty = 2, lwd = 2, col = "blue") box(lwd = 2) axis(side = 1, las = 1, tck = -0.02, labels = NA, at = seq(1, 12)) axis(side = 1, las = 1, lwd = 0, line = -0.4, labels = month.abb, at = seq(1, 12), cex.axis = 1.2) axis(side = 2, las = 1, tck = -0.02, labels = NA, at = seq(-20, 200, 20)) axis(side = 2, las = 1, lwd = 0, line = -0.4, at = seq(-20, 200, 20), cex.axis = 1.2) mtext(side = 2, expression(list(Evapotranspiration, mm~month^{-1})), line = 2, cex = 1.2) legend("top", legend = c("Potential", "Equilibrium", "Actual"), col = c("black", "green", "blue"), lty = c(1, 1, 2), lwd = c(2, 2, 2), inset = 0.01, x.intersp = 1.1, y.intersp = 2.0, horiz = TRUE, bty = "n", cex = 1.2) })
Generates quasi-daily time series from the monthly mean values of temperature, precipitation and sunshine data.
dlyWeaGenPoints( temp, prec, bsdf, year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), argCkd = FALSE )
dlyWeaGenPoints( temp, prec, bsdf, year = 2000, aprchTEMP = c("hip", "tsi", "const"), aprchPREC = c("tsi", "hip", "const"), aprchBSDF = c("hip", "const"), dvTEMP = rep(0.7, 12), dvPREC = rep(0.7, 12), argCkd = FALSE )
temp |
'numeric' R object with one-year time series of monthly mean air temperature (in °C) |
prec |
'numeric' R object with one-year time series of monthly precipitation sum (in mm) |
bsdf |
'numeric' R object with one-year time series of monthly mean relative sunshine duration (dimensionless) |
year |
'numeric' vector with values of the year (using astronomical year numbering) |
aprchTEMP |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily mean air temperature for a specific year. Valid values are as follows: |
aprchPREC |
'character' vector of length 1 that indicates the scheme to generate daily values of the
daily precipitation sum. Valid values are as follows: |
aprchBSDF |
'character' vector of length 1 that indicates the scheme used to generate daily values of the
daily fractional sunshine duration for a specific year. Valid values are as follows: |
dvTEMP |
'numeric' vector of length 12 with monthly values of the damping variable for the air temperature data. |
dvPREC |
'numeric' vector of length 12 with monthly values of the damping variable for the precipitation data. |
argCkd |
'logical' scalar that indicates whether or not the checking and correction of arguments can be omitted. |
For relative sunshine duration and air temperature, it is recommended the 'harmonic' interpolation
technique ('hip'
) described by Epstein (1991), with a correction of physically impossible values. This
technique can also be used to values of the mean precipitation intensity, however, in the case of
precipitation, the temporal scaling ('tsi'
) using an iterative interpolation technique described by
Lüdeke et al. (1994) is recommended, with a damping variable of 0.7 for each month. The damping variable can
be set separately for each month and must be between 0 and 1. This iterative scheme can also be applied to
monthly mean data of air temperature. Furthermore, for all three climate variables, it is possible to ignore
intra-month variability. For this, the setting 'const'
must be used.
A list with three 365- or 366-column matrices that contain quasi-daily time series for the three basic climate variables:
TEMP
: daily mean air temperature (in °C)
PREC
: daily precipitation sum (in mm)
BSDF
: daily fractional sunshine duration (dimensionless)
As with any point function, a set of basic input data is defined here. In this case, they are as follows:
'temp'
(one-year time series of monthly mean air temperature), 'prec'
(one-year time series
of monthly precipitation sum), and 'bsdf'
(one-year time series of monthly mean relative sunshine
duration.) The objects 'temp'
, 'prec'
and 'bsdf'
must be either vectors of length 12 or
12-column matrices. The first dimensions of these matrices have to be the same length. The function
automatically converts vectors into single-row matrices during the error handling, and then uses these
matrices. The first dimensions of these matrices determines the number of rows in the result matrix. In the
case of arguments that do not affect the course of the calculation procedure or the structure of the return
object, scalar values (i.e., 'numeric' vector of length 1) may also be allowed. In this case, it is as
follow: 'year'
(year using astronomical year numbering). This scalar is converted to a vector by the
function during the error handling, and this vector is applied in the further calculations. If these data are
stored in vectors of length at least 2, their length must be the same size of first dimension of the matrices
containing the basic data.
Epstein ES (1991) On Obtaining Daily Climatological Values from Monthly Means. J Clim 4(3):365–368. doi:10.1175/1520-0442(1991)004<0365:OODCVF>2.0.CO;2
Lüdeke MKB, Badeck FW, Otto RD, Häger C, Dönges S, Kindermann J, Würth G, Lang T, Jäkel U, Klaudius A, Ramge P, Habermehl S, Kohlmaier GH (1994) The Frankfurt Biosphere Model: A global process-oriented model of seasonal and long-term CO2 exchange between terrestrial ecosystems and the atmosphere. I. Model description and illustrative results for cold deciduous and boreal forests. Clim Res 4(2):143-166. doi:10.3354/cr004143
library(graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) with(inp_exPoints, { # Generate quasi-daily time series for basic climate variables with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) year <- trunc(mean(seq(1981, 2010))) wea01 <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), year = year) # Modify the daily weather data generation techniques # To temperature data, apply the iterative interpolation technique with basic settings # To precipitation data, change the value of the damping variable, over the whole year # To sunshine data, assume that its values are constant within each month wea02 <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), aprchTEMP = "tsi", aprchBSDF = "const", dvPREC = rep(0.6, 12), year = year) # Check the differences vars <- c("TEMP", "PREC", "BSDF") lbls <- list(expression(italic(T[a])~(~degree*C)), expression(italic(P[n])~(mm)), expression(italic(S[f])~(unitless))) ys <- c(20, 2.5, 0.6) ats <- list(seq(-4, 24, 4), seq(0, 3, 0.5), seq(0., 0.8, 0.2)) cols <- c("black", "green") opar <- par(no.readonly = TRUE) par(mfrow = c(3, 1)) for (i in 1 : length(vars)) { par(mar = c(2, 5, 1, 1)) matplot(t(rbind(wea01[[vars[i]]], wea02[[vars[i]]])), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = NA, ylab = NA, axes = FALSE) axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = ats[[i]]) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = ats[[i]]) if (i == length(vars)) { axis(side = 1, las = 1, lwd = 0, line = -0.4, at = seq(-60, 720, 30), cex.axis = 1.6) } mtext(side = 2, lbls[[i]], line = 3, cex = 1.1) legend(1, ys[i], legend = c("default", "modified"), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) } par(opar) })
library(graphics) # Loading mandatory data for the Example 'Points' data(inp_exPoints) with(inp_exPoints, { # Generate quasi-daily time series for basic climate variables with default settings, # at a grid cell near Szeged, Hungary (46.3N, 20.2E) (for the normal period 1981-2010) year <- trunc(mean(seq(1981, 2010))) wea01 <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), year = year) # Modify the daily weather data generation techniques # To temperature data, apply the iterative interpolation technique with basic settings # To precipitation data, change the value of the damping variable, over the whole year # To sunshine data, assume that its values are constant within each month wea02 <- dlyWeaGenPoints(colMeans(temp), colMeans(prec), colMeans(bsdf), aprchTEMP = "tsi", aprchBSDF = "const", dvPREC = rep(0.6, 12), year = year) # Check the differences vars <- c("TEMP", "PREC", "BSDF") lbls <- list(expression(italic(T[a])~(~degree*C)), expression(italic(P[n])~(mm)), expression(italic(S[f])~(unitless))) ys <- c(20, 2.5, 0.6) ats <- list(seq(-4, 24, 4), seq(0, 3, 0.5), seq(0., 0.8, 0.2)) cols <- c("black", "green") opar <- par(no.readonly = TRUE) par(mfrow = c(3, 1)) for (i in 1 : length(vars)) { par(mar = c(2, 5, 1, 1)) matplot(t(rbind(wea01[[vars[i]]], wea02[[vars[i]]])), type = "l", lwd = 2, col = cols, xaxt = "n", xlab = NA, ylab = NA, axes = FALSE) axis(side = 1, las = 1, tck = -0.03, labels = NA, at = seq(-60, 720, 30)) axis(side = 2, las = 1, tck = -0.03, labels = NA, at = ats[[i]]) axis(side = 2, las = 1, lwd = 0, line = -0.4, cex.axis = 1.6, at = ats[[i]]) if (i == length(vars)) { axis(side = 1, las = 1, lwd = 0, line = -0.4, at = seq(-60, 720, 30), cex.axis = 1.6) } mtext(side = 2, lbls[[i]], line = 3, cex = 1.1) legend(1, ys[i], legend = c("default", "modified"), col = cols, lty = 1 : 2, lwd = 2, xpd = TRUE) } par(opar) })
Data needed to demonstrate the working of functions with a grid mode. Average monthly time series of
three measured basic climate variables for the normal period 1981-2010 retrieved from the the CarpatClim
database (Spinoni et al. 2015), for Csongrád-Csanád County; supplemented with a digital elevation model.
Monthly mean relative sunshine duration has been obtained as a ratio of monthly total of sunshine duration and
maximum potential number of sunshine hours under clear-sky conditions. Daylength (accumulated hours of
daylight) was calculated via Eq 1.6.11 in Duffie and Beckman (1991), according to the SPLASH radiation model
(see cliAvgDlySolIrrPoints
). For all grids, the WGS84 (EPSG:4326) coordinate system was used
with a horizontal resolution of 0.1°.
A list with three RasterBricks and one RasterLayer.
Each of the RasterBricks contains a one-year average monthly time series for the normal period 1981-2010, for the following climate variables:
temp
: mean air temperature (in °C)
prec
: precipitation sum (in mm)
bsdf
: mean relative sunshine duration (dimensionless)
Elevation data can be extracted from a single RasterLayer: elv
.
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Spinoni J, Szalai S, Szentimrey T, Lakatos M, Bihari Z, Nagy A, Németh Á, Kovács T, Mihic D, Dacic M, Petrovic P, Kržič A, Hiebl J, Auer I, Milkovic J, Štepánek P, Zahradnícek P, Kilar P, Limanowka D, Pyrc R, Cheval S, Birsan M-V, Dumitrescu A, Deak G, Matei M, Antolovic I, Nejedlík P, Štastný P, Kajaba P, Bochnícek O, Galo D, Mikulová K, Nabyvanets Y, Skrynyk O, Krakovska S, Gnatiuk N, Tolasz R, Antofie T, Vogt J (2015) Climate of the Carpathian Region in the period 1961–2010: climatologies and trends of 10 variables. Int J Climatol 35(7):1322-1341. doi:10.1002/joc.4059
data(inp_exClnrGrid) str(inp_exClnrGrid)
data(inp_exClnrGrid) str(inp_exClnrGrid)
Data needed to demonstrate the working of functions with a point mode. Measured monthly time series
of three basic climate variables retrieved from the CarpatClim database (Spinoni et al. 2015), at a grid cell
near Szeged, Hungary (46.3° N, 20.2° E), for the period 1981-2010; supplemented with the associated
geographical data. Monthly mean relative sunshine duration has been obtained as a ratio of monthly total of
sunshine duration and maximum potential number of sunshine hours under clear-sky conditions. Daylength
(accumulated hours of daylight) was calculated via Eq 1.6.11 in Duffie and Beckman (1991), according to the
SPLASH radiation algorithm (see cliAvgDlySolIrrPoints
).
A list with three data frames and three numeric scalars.
Data frames contain one-year monthly time series for the period 1981-2010, for the following climate variables:
temp
: mean air temperature (in °C)
prec
: precipitation sum (in mm)
bsdf
: mean relative sunshine duration (dimensionless)
The following geographical parameters can be extracted from the numeric scalars:
lat
: latitude coordinate (in decimal degrees)
lon
: longitude coordinate (in decimal degrees)
elv
: elevation (in meters above sea level)
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Spinoni J, Szalai S, Szentimrey T, Lakatos M, Bihari Z, Nagy A, Németh Á, Kovács T, Mihic D, Dacic M, Petrovic P, Kržič A, Hiebl J, Auer I, Milkovic J, Štepánek P, Zahradnícek P, Kilar P, Limanowka D, Pyrc R, Cheval S, Birsan M-V, Dumitrescu A, Deak G, Matei M, Antolovic I, Nejedlík P, Štastný P, Kajaba P, Bochnícek O, Galo D, Mikulová K, Nabyvanets Y, Skrynyk O, Krakovska S, Gnatiuk N, Tolasz R, Antofie T, Vogt J (2015) Climate of the Carpathian Region in the period 1961–2010: climatologies and trends of 10 variables. Int J Climatol 35(7):1322-1341. doi:10.1002/joc.4059
data(inp_exPoints) str(inp_exPoints)
data(inp_exPoints) str(inp_exPoints)
Data needed to demonstrate the working of functions with a grid mode. Measured monthly time series of
the year 2010 for three basic climate variables retrieved from the the CarpatClim database
(Spinoni et al. 2015), for Csongrád-Csanád County; supplemented with a digital elevation model. Monthly mean
relative sunshine duration has been obtained as a ratio of monthly total of sunshine duration and maximum
potential number of sunshine hours under clear-sky conditions. Daylength (accumulated hours of daylight) was
calculated via Eq 1.6.11 in Duffie and Beckman (1991), according to the SPLASH radiation model
(see cliAvgDlySolIrrPoints
). For all grids, the WGS84 (EPSG:4326) coordinate system was used
with a horizontal resolution of 0.1°.
A list with three RasterBricks and one RasterLayer.
Each of the RasterBricks contains a one-year monthly time series for the year 2010, for the following climate variables:
temp
: mean air temperature (in °C)
prec
: precipitation sum (in mm)
bsdf
: mean relative sunshine duration (dimensionless)
Elevation data can be extracted from a single RasterLayer: elv
.
Duffie JA, Beckman WA (1991) Solar Engineering of Thermal Processes. Second Edition. Wiley-Interscience, New York, NY
Spinoni J, Szalai S, Szentimrey T, Lakatos M, Bihari Z, Nagy A, Németh Á, Kovács T, Mihic D, Dacic M, Petrovic P, Kržič A, Hiebl J, Auer I, Milkovic J, Štepánek P, Zahradnícek P, Kilar P, Limanowka D, Pyrc R, Cheval S, Birsan M-V, Dumitrescu A, Deak G, Matei M, Antolovic I, Nejedlík P, Štastný P, Kajaba P, Bochnícek O, Galo D, Mikulová K, Nabyvanets Y, Skrynyk O, Krakovska S, Gnatiuk N, Tolasz R, Antofie T, Vogt J (2015) Climate of the Carpathian Region in the period 1961–2010: climatologies and trends of 10 variables. Int J Climatol 35(7):1322-1341. doi:10.1002/joc.4059
data(inp_exSglyGrid) str(inp_exSglyGrid)
data(inp_exSglyGrid) str(inp_exSglyGrid)
The key to the classes used by climate-based vegetation classifiers implemented here. Currently, three bioclimatic vegetation classification approaches are implemented:
HLZ
: a version with no altitudinal belts of the Holdridge life zone (HLZ) system (Holdridge
1947, 1967), in accordance with works of Szelepcsényi et al. (2014, 2018)
KGC
: the Köppen-Geiger classification (KGC) system (Köppen 1936) with some modifications
suggested by Peel et al. (2007)
BIOME
: the initial version of the BIOME model developed by Prentice et al. (1992)
A data frame that allows for interpreting the return objects provided by climate-based vegetation
classifiers implemented here. Two columns belong to each vegetation classification approach. Columns whose
names begin with the string 'Name.'
contain the full names of the vegetation classes. While columns
whose names begin with the string 'Code.'
summarize the abbreviations used by functions with a point
mode. Row numbers of the data frame have a special role because they are the same as the numbers returned by
the functions with a grid mode.
Holdridge LR (1947) Determination of World Plant Formations From Simple Climatic Data. Science 105(2727):367–368. doi:10.1126/science.105.2727.367
Holdridge LR (1967) Life zone ecology. Tropical Science Center, San Jose, Costa Rica
Köppen W (1936) Das geographische System der Klimate. In: Köppen W, Geiger R (eds) Handbuch der Klimatologie. Verlag von Gebrüder Borntraeger, Berlin, Germany, pp 1–44
Peel MC, Finlayson BL, McMahon TA (2007) Updated world map of the Köppen-Geiger climate classification. Hydrol Earth Syst Sci 11(5):1633–1644. doi:10.5194/hess-11-1633-2007
Prentice IC, Cramer W, Harrison SP, Leemans R, Monserud RA, Solomon AM (1992) A global biome model based on plant physiology and dominance, soil properties and climate. J Biogeogr 19(2):117–134. doi:10.2307/2845499
Szelepcsényi Z, Breuer H, Sümegi P (2014) The climate of Carpathian Region in the 20th century based on the original and modified Holdridge life zone system. Cent Eur J Geosci 6(3):293–307. doi:10.2478/s13533-012-0189-5
Szelepcsényi Z, Breuer H, Kis A, Pongrácz R, Sümegi P (2018) Assessment of projected climate change in the Carpathian Region using the Holdridge life zone system. Theor Appl Climatol 131(1–2):593–610. doi:10.1007/s00704-016-1987-3
data(vegClsNumCodes) str(vegClsNumCodes)
data(vegClsNumCodes) str(vegClsNumCodes)