Title: Determine Thermal Vegetation Periods
Version: 0.4.0
Description: Collection of common methods to determine growing season length in a simple manner. Start and end dates of the vegetation periods are calculated solely based on daily mean temperatures and the day of the year.
License: GPL (≥ 3)
URL: https://rnuske.github.io/vegperiod/, https://github.com/rnuske/vegperiod
BugReports: https://github.com/rnuske/vegperiod/issues
Encoding: UTF-8
NeedsCompilation: no
Depends: R (≥ 3.2.0)
Imports: utils
Suggests: curl, tinytest
RoxygenNote: 7.2.1
Packaged: 2022-11-01 09:25:38 UTC; rnuske
Author: Robert Nuske ORCID iD [aut, cre], Nordwestdeutsche Forstliche Versuchsanstalt (NW-FVA) [cph, fnd]
Maintainer: Robert Nuske <robert.nuske@mailbox.org>
Repository: CRAN
Date/Publication: 2022-11-01 16:30:13 UTC

Ten years of daily average air temperature

Description

A dataset containing ten years (2001-01-01 - 2010-12-31) of average air temperature measured at the weather station Goettingen. The data is the result of a reanalysis of observed data using the STARS model (cf. Orlowsky et al. 2008). They were provided by Prof. Dr. Peter Werner (PIK).

Usage

data(goe)

Format

A data frame with 3652 rows and 6 variables:

Variable Description
date calendar date as object of class Date
year years as integer
month month as integer
day day of month as integer
doy day of year as integer
t average air temperature

Source

Prof. Dr. Peter Werner (PIK)

References

Orlowsky, B., Gerstengarbe, F. W., Werner, P. C. (2008) A resampling scheme for regional climate simulations and its performance compared to a dynamical RCM. Theoretical and Applied Climatology, 92(3–4), 209–223. doi:10.1007/s00704-007-0352-y

Examples

data(goe)
str(goe)

Vegetation Start and End Method "ETCCDI"

Description

The ETCCDI or StdMeteo method was defined by Expert Team on Climate Change Detection and Indices and is often known as Growing season Length (GSL) and widely used in climate change studies.

Calculation

Implementation of start

first span of at least 6 consecutive days with daily mean temperature TG > 5°C

# mark days warmer than 5°C
df$period <- ifelse(df$Tavg > Tmin, 1, 0)

# find first six day span per year
start <- tapply(df$period, df$year, FUN=function(x){
  sixer <- as.numeric(stats::filter(x, rep(1, 6), sides=1))
  doy <- which(!is.na(sixer) & sixer == 6)
  ifelse(length(doy) == 0, NA, min(doy))
})

Implementation of end

first span after July 1st of 6 consecutive days with TG < 5°C.

# 1. July is DOY 182 and DOY 183 in leap years
years <- unique(df$year)
leap_year <- ifelse((years%%4==0 & years%%100!=0) | years%%400==0, TRUE, FALSE)
jul1 <- ifelse(leap_year, 183L, 182L)

# mark days colder than 5°C
df$period <- ifelse(df$Tavg < Tmin, 1, 0)

# find first six day span per year
end <- ifelse(leap_year, 366L, 365L)
for(i in seq_along(years)){
  temp <- df[df$year == years[i] & df$DOY > jul1[i], ]
  temp$six <-  as.numeric(stats::filter(temp$period, rep(1, 6), sides=1))
  possible.end <- temp[!is.na(temp$six) & temp$six == 6, "DOY"]
  if(length(possible.end) > 0)
    end[i] <- min(possible.end)
}

References

Definition recommended by the CCl/CLIVAR/JCOMM Expert Team on Climate Change Detection and Indices (ETCCDI) http://etccdi.pacificclimate.org/list_27_indices.shtml http://www.climdex.org/indices.html

European Climate Assessment (ECA) http://eca.knmi.nl/indicesextremes/indicesdictionary.php

ETCCDI (2009) Climate Change Indices: Definitions of the 27 core indices. http://etccdi.pacificclimate.org/list_27_indices.shtml Frich, P., Alexander, L., Della-Marta, P., Gleason, B., Haylock, M., Klein Tank, A. and Peterson, T. (2002) Observed coherent changes in climatic extremes during the second half of the twentieth century. Climate Research, 19, 193–212. https://doi.org/10.3354/cr019193. http://www.climateknowledge.org/heat_waves/Doc2004_Frich_Extremes_Index_ClimResearch_2002.pdf

Zhang, X., Alexander, L., Hegerl, G. C., Jones, P., Tank, A. K., Peterson, T. C., Trewin, B. and Zwiers, F. W. (2011) Indices for monitoring changes in extremes based on daily temperature and precipitation data. Wiley Interdisciplinary Reviews: Climate Change, 2(6), 851–870. https://doi.org/10.1002/wcc.147.


Vegetation End Method "LWF-BROOK90"

Description

The method LWF-BROOK90 is -for the sake of convenience- a reimplementation of the LWF-BROOK90 VBA (version 3.4) variant of "vonWilpert" (Hammel and Kennel 2001). Their interpretation of von Wilpert (1990) and the somewhat lower precision of VBA was mimicked.

Calculations

- starting search at June 1st
- propose end if 7-day moving average temperature is below 10°C
  on 5 consecutive days
- restart search for end if there is a warm periode (7-day moving average
  temperature above 10°C for 5 consecutive days
- nevertheless the vegetation periode stops latest at DOY 279

References

Hammel, K. and Kennel, M. (2001) Charakterisierung und Analyse der Wasserverfügbarkeit und des Wasserhaushalts von Waldstandorten in Bayern mit dem Simulationsmodell BROOK90. Forstliche Forschungsberichte München.

von Wilpert, K. (1990) Die Jahrringstruktur von Fichten in Abhängigkeit vom Bodenwasserhaushalt auf Pseudogley und Parabraunerde: Ein Methodenkonzept zur Erfassung standortsspezifischer Wasserstreßdispostion. Freiburger Bodenkundliche Abhandlungen.


Vegetation Start Method "Menzel"

Description

The method "Menzel" implements the algorithm described in Menzel (1997). The method is parameterized for 10 common tree species ( Larix decidua, Picea abies (frueh), Picea abies (spaet), Picea abies (noerdl.), Picea omorika, Pinus sylvestris, Betula pubescens, Quercus robur, Quercus petraea, Fagus sylvatica). It needs previous year's chill days.

Calculations

 - counting chill days in Nov & Dec of previous year if previous year available else estimate previous year's chill days
 - count chill days in current year
 - determine critical temperature per days using regression equation fitted by Menzel 1997
 - calculate HeatSum starting from Feb
 - vegetation start if HeatSum >= criticalTemp

References

Menzel, A. (1997) Phänologie von Waldbäumen unter sich ändernden Klimabedingungen - Auswertung der Beobachtungen in den Internationalen Phänologischen Gärten und Möglichkeiten der Modellierung von Phänodaten. Forstliche Forschungsberichte München.


Vegetation End Method "NuskeAlbert"

Description

The method NuskeAlbert provides a very simple method which is inspired by standard climatological procedures but employs a 7 day moving average and a 5 °C threshold (cf. Walther and Linderholm 2006).

Calculations

2 criteria: temperature & short day criterion

Temperature criterion

7 day moving average of daily mean temperatures end if 5 consecutive days under under 5° C start the search at 1st of July / vegetation start

Short day criterion

last day of the vegetation period is 5th of October

References

Walther, A. and Linderholm, H. W. (2006) A comparison of growing season indices for the Greater Baltic Area. International Journal of Biometeorology, 51(2), 107–118. doi:10.1007/s00484-006-0048-5.


Vegetation Start Method "Ribes uva-crispa"

Description

The method ⁠Ribes uva-crispa⁠ is based on leaf-out of gooseberry (Janssen 2009). It was developed by the Germany's National Meteorological Service (Deutscher Wetterdienst, DWD) and is more robust against early starts than common simple meteorological procedures.

Calculation

starting from 18th February sum all day degrees above 0 °C (daily average air temperature). Vegetetaion period starts at the day when 164 is crossed.

# start day: February 18th == 49 doy
# only Tavg over 0°C are summed
df[df$DOY < 49 | df$Tavg < 0, 'Tavg'] <- 0

# find day where cum day degrees cross 164
start <- tapply(df$Tavg, df$year, FUN=function(x){
  x <- cumsum(x)
  min(which(x > 164))
})

References

Janssen, W. (2009) Definition des Vegetationsanfanges. Internal Report, Deutscher Wetterdienst, Abteilung Agrarmeteorologie.


Vegetation End Method "vonWilpert"

Description

The method vonWilpert is based on von Wilpert (1990). It was originally developed for "Picea abies" in the Black Forest but is commonly used for all tree species throughout Germany. As usual, the rules regarding the soilmatrix are neglected in this implementation.

Calculations

Orthodox are 3 criteria: short day, temperature and drought criterion we consider -as usual- only short day and temperature citerion

Temperature criterion:

Short day criterion

References

von Wilpert, K. (1990) Die Jahrringstruktur von Fichten in Abhängigkeit vom Bodenwasserhaushalt auf Pseudogley und Parabraunerde: Ein Methodenkonzept zur Erfassung standortsspezifischer Wasserstreßdispostion. Freiburger Bodenkundliche Abhandlungen. Pages 106–108.


Fetch meteo data of DWD weather stations

Description

Fetch observed meteorological data of German weather stations from freely accessible part of the Climate Data Center of Germany's National Meteorological Service (Deutscher Wetterdienst, DWD).

Usage

read.DWDdata(
  id,
  type = "climate",
  period = "recent",
  resolution = "daily",
  file = NULL,
  destdir = NULL,
  quiet = FALSE
)

Arguments

id

integer. A valid station id (cf. read.DWDstations).

type

string. Stations can be of type ‘⁠"climate"⁠’ offering a range of meteorological parameters or of type ‘⁠"precipitation"⁠’ solely recording rainfall. There are about 400 ‘⁠climate⁠’ and 2000 ‘⁠precipitation⁠’ stations.

period

string specifying a time span. The last 1.5 years are called ‘⁠"recent"⁠’. Data from the individual beginning of measurements up to a year ago are labelled ‘⁠"historical"⁠’. ‘⁠"recent"⁠’ data have not yet gone through the full quality control procedure. ‘⁠"historical"⁠’ data have completed the operational quality control. But be aware there still might be gaps and inhomogeneities.

resolution

string. Temporal resolution of the data can be ‘⁠"daily"⁠’ or ‘⁠"monthly"⁠’. ‘⁠"daily"⁠’ being the common resolution.

file

a string specifying the location of a dataset. ‘⁠"file"⁠’ may point to a file on a FTP server or on the local file system. If the file lives on a FTP server the string must start with 'ftp://'. If it is NULL (the default), data will be downloaded from DWD's FTP server.

destdir

directory (string) where intermediate data (downloaded *.zip file) are stored. If it is NULL (the default) a subdirectory ‘⁠downloaded_packages⁠’ of the session temporary directory will be used (and the files will be deleted at the end of the session). It might be advisable to keep the .zip file since it contains the stations documentation and metadata (e.g. station shift, used devices, downtimes etc.).

quiet

If TRUE, suppress status messages (if any), and the progress bar.

Details

An introduction to the data available at the Climate Data Center can be found in the German Liesmich_intro_CDC_ftp or the translated Readme_intro_CDC_ftp.

The freely accessible part of the Climate Data Center of Germany's National Meteorological Service (Deutscher Wetterdienst, DWD) is part of the DWD's mandate for basic supply of information (termed "Grundversorgung"). These services may be used without any restrictions (no fees will be charged and in general there are no restrictions for the use the data), provided that the source is indicated as laid down in the "GeoNutzV" ordinance. The source reference shall roughly meet the following rules:

A more detailed description of the rules can be found in the official and legally binding German Nutzungsbedingungen or the translated Terms of use.

Value

A data.frame with the observed weather data. Beware of gaps and inhomogeneities! ‘⁠colnames⁠’ contains the original header and hence German terms.

Content of 'climate'-data.frame:

Name Description
STATIONS_ID station id
MESS_DATUM date
QN_3 quality level of next columns (-)
FX daily maximum of wind gust (m/s)
FM daily mean of wind velocity (m/s)
QN_4 quality level of next columns (-)
RSK daily precipitation height (mm)
RSKF precipitation form (-)
SDK daily sunshine duration (h)
SHK_TAG daily snow depth (cm)
NM daily mean of cloud cover (1/8)
VPM daily mean of vapor pressure (hPa)
PM daily mean of pressure (hPa)
TMK daily mean of temperature (°C)
UPM daily mean of relative humidity (%)
TXK daily maximum of temperature at 2m height (°C)
TNK daily minimum of temperature at 2m height (°C)
TGK daily minimum of air temperature at 5cm above ground (°C)

Content of 'precipitation'-data.frame:

Name Description
STATIONS_ID station id
MESS_DATUM date
QN_6 quality level of next columns (-)
RS daily precipitation height (mm)
RSF precipitation form (-)
SH_TAG daily height of snow pack (cm)

References

Freely accessible DWD data available via the Climate Data Center.

Examples

## Not run: 
# fetch last 500 days worth of data from station Göttingen
clim <- read.DWDdata(id=1691)

# save data & metadata (documentation about devices, downtimes etc.)
clim <- read.DWDdata(id=1691, destdir='.')

# find and download historical data from the Brocken
stat.hist <- read.DWDstations(period='historical')
brocken.id <- stat.hist[grep("^Brock", stat.hist$name), ]$id
clim.brocken <- read.DWDdata(id=brocken.id, period='historical')

## End(Not run)


Fetch list of DWD weather stations

Description

Get a listing of advertised stations of Germany's National Meteorological Service (Deutscher Wetterdienst, DWD). The list differs for station type, time period and resolution. The list of advertised stations is usually not identical with currently available stations.

Usage

read.DWDstations(type = "climate", period = "recent", resolution = "daily")

Arguments

type

string. Stations can be of type ‘⁠"climate"⁠’ offering a range of meteorological parameters or of type ‘⁠"precipitation"⁠’ solely recording rainfall.

period

string specifying a time span. The last 1.5 years are called ‘⁠"recent"⁠’. Data from the individual beginning of measurements up to a year ago are labelled ‘⁠"historical"⁠’.

resolution

string. Temporal resolution of the data can be ‘⁠"daily"⁠’ or ‘⁠"monthly"⁠’. ‘⁠"daily"⁠’ being the common resolution.

Details

The freely accessible part of the Climate Data Center of Germany's National Meteorological Service (Deutscher Wetterdienst, DWD) is part of DWD's mandate for basic supply of information (termed "Grundversorgung"). This service may be used without any restrictions (no fees will be charged and in general there are no restrictions for the use the data), provided that the source is indicated as laid down in the "GeoNutzV" ordinance. The source reference shall roughly meet the following rules:

A more detailed description of the rules can be found in the official and legally binding German Nutzungsbedingungen or the translated Terms of use.

Value

A data.frame with all weather stations. It's not guaranteed that all advertised staions are available for download. Watch out for the end data of observation. Stations with recent data have a current end date. The data.frame contains the variables id, from, to, elev, lat, long, name, state.

References

Freely accessible DWD data available via the Climate Data Center.

Examples

## Not run: 
# stations with daily climate data
stations <- read.DWDstations()

# precipitation stations with monthly historical data
precip <- read.DWDstations(type='precip', period='historical',
                           resolution='monthly')

# list stations with daily data updated within last week
stat.daily <- read.DWDstations(period='recent')
stat.daily.recent <- stat.daily[stat.daily$to > (Sys.Date() - 7), ]

## End(Not run)


Determine vegetation period

Description

Calculate start and end date of vegetation periods based on daily average air temperature and the day of the year (DOY). The sum of day degrees within the vegetation period is included for convenience.

Usage

vegperiod(
  dates,
  Tavg,
  start.method,
  end.method,
  Tsum.out = FALSE,
  Tsum.crit = 0,
  species = NULL,
  est.prev = 0,
  check.data = TRUE
)

Arguments

dates

vector of calendar dates (objects of class Date or something understood by as.Date()). Must contain entire years if est.prev > 0 else the first year may comprise only November and December.

Tavg

vector of daily average air temperatures in degree Celsius. Same length as dates.

start.method

name of method to use for vegetation start. One of "Menzel" (needs additional argument species, see below), "StdMeteo" resp. "ETCCDI", "Ribes uva-crispa". Can be abbreviated (partial matching). For further discussion see Details.

end.method

name of method to use for vegetation end. One of "vonWilpert", "LWF-BROOK90", "NuskeAlbert" and "StdMeteo" resp. "ETCCDI". Can be abbreviated (partial matching). For further discussion see Details.

Tsum.out

boolean. Return the sum of daily mean temperatures above Tsum.crit within vegetation period, also known as growing day degrees.

Tsum.crit

threshold for sum of day degrees. Only daily mean temperatures ⁠> Tsum.crit⁠ will be tallied. The default of 0 prevents negative daily temperatures from reducing the sum. Climate change studies often use a threshold of 5.

species

name of tree species (required if start.method="Menzel" ignored otherwise).

Must be one of "Larix decidua", "Picea abies (frueh)", "Picea abies (spaet)", "Picea abies (noerdl.)", "Picea omorika", "Pinus sylvestris", "Betula pubescens", "Quercus robur", "Quercus petraea", "Fagus sylvatica".

est.prev

number of years to estimate previous year's chill days for the first year (required if start.method="Menzel" ignored otherwise).

Menzel requires the number of chill days of previous November and December. If est.prev = 0 the first year is used to get the previous year's chill days and dropped afterwards. Thus, a year from the time series is lost. To avoid losing a year, est.prev = n estimates the previous year's chill days for the first year from the average of n first years of the time series.

check.data

Performs plausibility checks on the temperature data to ensure that the temperatures have not been multiplied by ten. Plausible range is -35 to +40°C.

Details

Common methods for determining the onset and end of thermal vegetation periods are provided, for details see next sections. Popular choices with regard to forest trees in Germany are Menzel and vonWilpert. Climate change impact studies at NW-FVA are frequently conducted using Menzel with "Picea abies (frueh)" and NuskeAlbert for all tree species; with tree species specifics accounted for in subsequent statistical models.

Start methods:

The method Menzel implements the algorithm described in Menzel (1997). The method is parameterized for 10 common tree species. It needs previous year's chill days. ETCCDI resp. StdMeteo is a simple threshold based procedure as defined by the Expert Team on Climate Change Detection and Indices (cf. ETCCDI 2009, Frich et al. 2002, Zhang et al. 2011) leading to quite early vegetation starts. This method is widely used in climate change studies. The method Ribes uva-crispa is based on leaf-out of gooseberry (Janssen 2009). It was developed by the Germany's National Meteorological Service (Deutscher Wetterdienst, DWD) and is more robust against early starts than common simple meteorological procedures.

End methods:

The end method vonWilpert is based on von Wilpert (1990). It was originally developed for Picea abies in the Black Forest but is commonly used for all tree species throughout Germany. As usual, the rules regarding the soilmatrix are neglected in this implementation. LWF-BROOK90 is -for the sake of convenience- a reimplementation of the LWF-BROOK90 VBA (version 3.4) variant of "vonWilpert" (Hammel and Kennel 2001). Their interpretation of von Wilpert (1990) and the somewhat lower precision of VBA was mimicked. NuskeAlbert provide a very simple method which is inspired by standard climatological procedures but employs a 7 day moving average and a 5 °C threshold (cf. Walther and Linderholm 2006). ETCCDI resp. StdMeteo is a simple threshold based procedure as defined by the Expert Team on Climate Change Detection and Indices (cf. ETCCDI 2009, Frich et al. 2002, Zhang et al. 2011) leading to quite late vegetation ends.

Value

A data.frame with year and DOY of start and end day of vegetation period. If Tsum.out=TRUE, the data.frame contains an additional column with the sum of day degrees within vegetation periods.

References

ETCCDI (2009) Climate Change Indices: Definitions of the 27 core indices. http://etccdi.pacificclimate.org/list_27_indices.shtml

Frich, P., Alexander, L., Della-Marta, P., Gleason, B., Haylock, M., Klein Tank, A. and Peterson, T. (2002) Observed coherent changes in climatic extremes during the second half of the twentieth century. Climate Research, 19, 193–212. doi:10.3354/cr019193.

Hammel, K. and Kennel, M. (2001) Charakterisierung und Analyse der Wasserverfügbarkeit und des Wasserhaushalts von Waldstandorten in Bayern mit dem Simulationsmodell BROOK90. Forstliche Forschungsberichte München.

Janssen, W. (2009) Definition des Vegetationsanfanges. Internal Report, Deutscher Wetterdienst, Abteilung Agrarmeteorologie.

Menzel, A. (1997) Phänologie von Waldbäumen unter sich ändernden Klimabedingungen - Auswertung der Beobachtungen in den Internationalen Phänologischen Gärten und Möglichkeiten der Modellierung von Phänodaten. Forstliche Forschungsberichte München.

von Wilpert, K. (1990) Die Jahrringstruktur von Fichten in Abhängigkeit vom Bodenwasserhaushalt auf Pseudogley und Parabraunerde: Ein Methodenkonzept zur Erfassung standortsspezifischer Wasserstreßdispostion. Freiburger Bodenkundliche Abhandlungen.

Walther, A. and Linderholm, H. W. (2006) A comparison of growing season indices for the Greater Baltic Area. International Journal of Biometeorology, 51(2), 107–118. doi:10.1007/s00484-006-0048-5.

Zhang, X., Alexander, L., Hegerl, G. C., Jones, P., Tank, A. K., Peterson, T. C., Trewin, B. and Zwiers, F. W. (2011) Indices for monitoring changes in extremes based on daily temperature and precipitation data. Wiley Interdisciplinary Reviews: Climate Change, 2(6), 851–870. doi:10.1002/wcc.147.

Examples

data(goe)
vegperiod(dates=goe$date, Tavg=goe$t,
          start.method="Menzel", end.method="vonWilpert",
          species="Picea abies (frueh)", est.prev=5)

# take chill days from first year, which is then dropped
vegperiod(dates=goe$date, Tavg=goe$t, start="Menzel", end="vonWilpert",
          species="Picea abies (frueh)", est.prev=0)

# add column with sum of day degrees in vegetation periods
vegperiod(dates=goe$date, Tavg=goe$t, Tsum.out=TRUE,
          start="StdMeteo", end="StdMeteo")