Determine Thermal Vegetation Periods

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.

Travis-CI Build Status AppVeyor Build Status Package-License DOI

The vegetation period, or growing season, is the period of the year when the weather conditions are sufficient for plants to grow. This package collects climatological or thermal growing seasons that can be calculated from daily mean temperatures and the day of the year (DOY). Because of their simplicity, they are commonly used in plant growth models and climate change impact assessments.

The concept of a temperature driven vegetation period holds mostly for the temperate climate zone. At lower latitudes, other factors such as precipitation and evaporation can be more decisive. Some methods such as GSL of ETCCDI are employed globally (with a half year shift in the southern hemisphere). Others have a smaller area of application as they have been parameterized with local to regional observations. Menzel and vonWilpert are used throughout Germany.

The package also includes functions for downloading open meteo data from Germany's National Meteorological Service (Deutscher Wetterdienst, DWD).


A development version of the package vegperiod can be installed from Github using the package devtools.

# install.packages("devtools")


Vegetation periods a calculated using the function vegperiod(). One has to choose at least a start and end method. Some methods, such as 'Menzel', require additional arguments.

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

Implemented start and end methods

Some common methods for calculating the onset and end of vegetation periods are already implemented. Popular choices with regard to forest trees in Germany are 'Menzel' and 'vonWilpert'.

Start methods

  • Menzel implemented as described in Menzel (1997). Parameterized for 10 common tree species. Needs previous years chill days.
  • StdMeteo / ETCCDI a simple threshold based procedure as defined by the Expert Team on Climate Change Detection and Indices (cf. ETCCDI 2009 and Frich et al. 2002). Leading to quite early vegetation starts.
  • Ribes uva-crispa using leaf out of gooseberry as indicator. Developed by Germany's National Meteorological Service (Deutscher Wetterdienst, DWD). Presented in the section forestry of DWD's 'Climate Atlas'. It is more robust against early starts than common simple meteorological procedures.

End methods

  • vonWilpert based on von Wilpert (1990). Originally developed for "Picea abies" in the Black Forest but currently used for all tree species throughout Germany.
  • LWF-BROOK90 a reimplementation of the LWF-BROOK90 VBA version of vonWilpert (Hammel and Kennel 2001).
  • NuskeAlbert a very simple method inspired by standard climatological practices.
  • StdMeteo / ETCCDI a simple threshold based procedure as defined by the Expert Team on Climate Change Detection and Indices (cf. ETCCDI 2009 and Frich et al., 2002). Leading to quite late vegetation ends.

Downloading data from DWD

Germany's National Meteorological Service offers open meteo data in its Climate Data Center. The files are organized in deep folder structures and end with an arcane/legacy EOF character. The Function read.DWDdata()deals with all of that and returns a data.frame. Beware there might be missing values and inhomogeneities.

Note: Downloading 'historical' data from DWD with read.DWDdata() requires the package 'curl'.


Further start and end methods or download functions are more than welcome!


News for Package vegperiod

Version 0.2.5

  • replaced package 'RCurl' with 'curl' for downloading DWD Data
  • stopped importing package 'methods'
  • fixed read.DWDstations() because DWD changed layout of station list
  • updated documentation of read.DWDdata() because DWD changed column order of climate data files

Version 0.2.4

  • vegperiod() checks if Tavg (daily mean temperature) is between -25 and 35 to catch temperatures multiplied by 10. Sometimes done to store as integers. (thanks to Ronald Bialozyt for reporting a crash)

Version 0.2.3

  • vegperiod() reports end of vegetation period always as integer
  • new parameter 'quiet' to readDWDdata to suppress messages and progessbar of download
  • started unit testing with package 'testthat'

Version 0.2.2

  • start.method='Ribes uva-crispa' using leaf out of gooseberry as indicator. Developed by Germany's National Meteorological Service (DWD).
  • est.prev can now be equal to number of provided years
  • proper error message if only one year of data provided and previous year's chill days requested

Version 0.2.1

  • cleaned up mangled output of start.method='StdMeteo'. StdMeteo now behaves properly and returns a vector.
  • use stats::filter() in the package to protected filter() against getting run over by package dplyr (thanks to Cristabel Duran for reporting).

Version 0.2.0

New Features

  • read.DWDdata() reads open meteo data from the Climate Data Center (CDC) of Germany's National Meteorological Service (Deutscher Wetterdienst, DWD).
  • read.DWDstations() fetches information about available DWD stations

Major Changes

  • renamed arguments in vegperiod() to clarify meaning / easier tab completion:
    • first.avg -> est.prev
    • temp.sum -> Tsum.out
    • method.start -> start.method
    • method.end -> end.method
  • renamed method StdClimatolgy to StdMeteo / ETCCDI in vegperiod() and brought calculations into compliance with ETCCDI standard

Bug fixes and minor improvements

  • added a hack in method LWF-BROOK90 of vegperiod() to adjust for different arithmetic precision in VBA version (thanks to Paul Schmidt-Walter for providing files for comparision and help finding the bug)
  • fixed bug leading to crash of vegperiod() if argument first.avg=0 (thanks to Ronald Bialozyt for reporting)
  • the argument "dates" of vegperiod() accepts now also character strings understood by as.Date()
  • rewrote help-page of vegperiod() and added references for all methods

Version 0.1.0

  • Intial version

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.2.6 by Robert Nuske, 3 months ago

Report a bug at

Browse source code at

Authors: Robert Nuske [aut, cre]

Documentation:   PDF Manual  

GPL (>= 3) license

Imports utils

Suggests curl, testthat

See at CRAN