vegperiod: Determine Thermal Vegetation Periods

R-CMD-check Drone Build Status Package-License CRAN Dependencies 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 methods to calculate climatological or thermal growing seasons solely based on 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).


The stable version can be installed from CRAN


and the development version is available from Github using the package remotes



Vegetation periods are calculated using the function vegperiod(). One has to choose at least a start and an 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=3)

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

End methods

Download climate data from DWD (German Meteorological Service)

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’.


Implementations of further start and end methods or download functions are more than welcome!