Evaluates forest dynamics over a landscape including climate and management scenarios

  meteo = NULL,
  volume_function = NULL,
  volume_arguments = NULL,
  local_control = defaultControl(),
  dates = NULL,
  CO2ByYear = numeric(0),
  fire_regime = NULL,
  summary_function = NULL,
  summary_arguments = NULL,
  parallelize = FALSE,
  num_cores = detectCores() - 1,
  chunk_size = NULL,
  progress = TRUE



An object of class sf with the following columns:

  • geometry: Spatial geometry.

  • id: Stand identifiers.

  • elevation: Elevation above sea level (in m).

  • slope: Slope (in degrees).

  • aspect: Aspect (in degrees).

  • forest: Objects of class forest.

  • soil: Objects of class soil.

  • state: Objects of class spwbInput or growthInput (optional).

  • meteo: Data frames with weather data (required if parameter meteo = NULL).

  • management_unit: Management unit corresponding to each stand.

  • represented_area_ha: Area represented by each stand in hectares.

  • ignition_weights: Relative weights to determine stands to be burned. Optional, relevant when fire_regime is supplied only).

Alternatively, the user may supply the result of a previous call to fordyn_scenario, where to continue simulations.


A data frame with species parameters (see SpParamsMED).


Meteorology data (see fordyn_spatial).


A list defining the management scenario (see create_management_scenario)


A function accepting a forest object or a tree data table, and a species parameter table, as input and returning the wood volume (m3/ha) corresponding to each tree cohort. The function may accept additional arguments. If NULL, the default volume function is used (not recommended!).


List with additional arguments for the volume function.


A list of local model control parameters (see defaultControl).


A Date object with the days of the period to be simulated. If NULL, then the whole period of meteo is used.


A named numeric vector with years as names and atmospheric CO2 concentration (in ppm) as values. Used to specify annual changes in CO2 concentration along the simulation (as an alternative to specifying daily values in meteo).


A list of parameters defining the fire regime (see create_fire_regime) or a matrix representing a fire regime instance (see fire_regime_instance). If NULL, wildfires are not simulated. Details are given in fordyn_spatial.


An appropriate function to calculate summaries from an object of class 'fordyn' (e.g., summary.fordyn).


List with additional arguments for the summary function.


Boolean flag to try parallelization (will use all clusters minus one).


Integer with the number of cores to be used for parallel computation.


Integer indicating the size of chunks to be sent to different processes (by default, the number of spatial elements divided by the number of cores).


Boolean flag to display progress information for simulations.


An list of class 'fordyn_scenario' with the following elements:

  • result_sf: An object of class 'sf' using a UTM projection and containing four elements:

    • geometry: Spatial geometry.

    • id: Stand id, taken from the input.

    • tree_table: A list of data frames for each simulated stand, containing the living trees at each time step.

    • shrub_table: A list of data frames for each simulated stand, containing the living shrub at each time step.

    • dead_tree_table: A list of data frames for each simulated stand, containing the dead trees at each time step.

    • dead_shrub_table: A list of data frames for each simulated stand, containing the dead shrub at each time step.

    • cut_tree_table: A list of data frames for each simulated stand, containing the cut trees at each time step.

    • cut_shrub_table: A list of data frames for each simulated stand, containing the cut shrub at each time step.

    • summary: A list of model output summaries for each simulated stand (if summary_function was not NULL).

  • result_volumes: A data frame with initial, growth, extracted and final volumes (m3) by year. In demand-based scenarios volumes corresponding to species with demand are also included.

  • result_volumes_spp: A data frame with growth and extracted volumes (m3) by species and year.

  • result_volumes_demand: In demand-based scenarios target volumes are also included, a data frame with growth, target and extracted volumes (m3) by demand entity and year. .

  • next_sf: An object of class 'sf' to continue simulations in subsequent calls to fordyn_scenario.

  • next_demand: In demand-based scenarios, a list with information (i.e. demand offset by species and last volume growth) to modify demand in subsequent calls to fordyn_scenario.


This function allows coordinating the dynamics of simulated forest stands via a management scenario defined at the landscape/regional level (see different kinds of scenarios and how to specify them in create_management_scenario).

The input 'sf' object has to be in a Universal Transverse Mercator (UTM) coordinate system (or any other projection using meters as length unit) for appropriate behavior of dispersal sub-model.

For each year to be simulated, the function determines which forest stands will be managed, possibly depending on the demand, and then calls function fordyn_spatial for one year (normally including parallelization). If the simulation of some stands results in an error, the function will try to restore the previous state of the forest stand for the next year steps. Finally, the function evaluates how much of the specified demand has been fulfilled and stores the results, including demand offsets to be applied the year after.

Management is implemented using the defaultManagementFunction in medfate, meaning that management parameters need to follow the structure of defaultManagementArguments

Details about the inclusion of fire regimes in simulations are explained in fordyn_spatial.


Miquel De Cáceres Ainsa, CREAF

Aitor Améztegui, UdL


if (FALSE) {
# Load example landscape data
# Load example meteo data frame from package meteoland
#Prepare a three-year meteorological data in two blocks
meteo_01_02 <- rbind(examplemeteo, examplemeteo)
row.names(meteo_01_02) <- seq(as.Date("2001-01-01"), 
                              as.Date("2002-12-31"), by="day")
meteo_03 <- examplemeteo
row.names(meteo_03) <- seq(as.Date("2003-01-01"), 
                           as.Date("2003-12-31"), by="day")
# Load default medfate parameters

# Creates scenario with one management unit and annual demand for P. nigra 
scen <- create_management_scenario(1, c("Pinus nigra/Pinus sylvestris" = 2300))

# Assign management unit to all stands
example_ifn$management_unit <- 1 

# Assume that each stand represents 1km2 = 100 ha
example_ifn$represented_area_ha <- 100

# Transform to UTM31 (necessary for dispersal)
example_ifn_utm31 <- sf::st_transform(example_ifn, crs = 32631)

# Launch simulation scenario (years 2001 and 2002)
fs_12 <- fordyn_scenario(example_ifn_utm31, SpParamsMED, meteo = meteo_01_02, 
                       volume_function = NULL, management_scenario = scen,
                       parallelize = TRUE)
# Continue simulation scenario 1 (year 2003)
fs_3 <- fordyn_scenario(fs_12, SpParamsMED, meteo = meteo_03, 
                       volume_function = NULL, management_scenario = scen,
                       parallelize = TRUE)