Vegetation — Simple Vegetation Model#

This is a very simple implementation of a vegetation model. It is implemented as a stochastic cellular automaton on a grid, where the state of each cell is a double scalar representing the plant bio-mass on that cell. The only driver for a change in the plant bio-mass is rainfall, implemented as a Gauss-distributed random number drawn for each cell.

Model parameters#

  • rain_mean: mean rainfall \(\langle r \rangle\)

  • rain_std: rainfall standard deviation \(\sigma_r\)

  • growth_rate: growth rate \(g\)

  • seeding_rate: seeding rate \(s\)

Growth process#

In each time step, the plant bio-mass on a cell is increased according to a logistic growth model. Let \(m_{t,i}\) be the plant bio-mass on cell \(i\) at time \(t\) and \(r_{t,i}\) the rainfall at time \(t\) onto cell \(i\). The plant bio-mass at time \(t+1\) is then determined as

\(m_{t+1,i} = m_{t,i} + m_{t,i} \cdot g \cdot (1 - m_{t,i}/r_{t,i})\).

It is possible that the result yields a negative value. In this case, the population density is silenty set to zero, \(m_{t+1,i} = 0\).

Seeding process#

Since logistic growth will never start if the initial plant bio-mass is zero, a seeding process is included into the model. If \(m_{t,i} = 0\), the plant bio-mass at time \(t+1\) is then determined as

\(m_{t+1,i} = s \cdot r_{t,i}\).

Default configuration parameters#

Below are the default configuration parameters of the model:

# Space parameters
space:
  periodic: true

# grid settings
cell_manager:
  grid:
    structure: square
    resolution: 20

  neighborhood:
    mode: empty # model does not use neighborhood

# Rain parameters
# The actual rain value is drawn from the following normal distribution
rain_mean: 10
rain_std: 2

# Growth rate (used in logistic growth)
growth_rate: 0.1

# Seeding rate (used when plant mass is zero)
seeding_rate: 0.2

For these parameters and a grid size of 20 x 20, the system takes roughly 50 time steps to reach a dynamic equilibrium, in which the plant bio-mass on all cells fluctuates around 9.5.

Available plots#

The following plot configurations are available for the Vegetation model:

Default Plot Configuration#

# Mean plant mass over time
time_series/mean_plant_mass:
  based_on: time_series/mean_plant_mass


# Spatial development in the CA over time
plant_mass_spatial:
  based_on: plant_mass_spatial

Base Plot Configuration#

.variables:
  base_path: &base_path  data/Vegetation



# =============================================================================
#  ╔╦╗╔═╗╔╦╗╔═╗╦  ╔═╗╔╦╗╔═╗╔═╗
#   ║ ║╣ ║║║╠═╝║  ╠═╣ ║ ║╣ ╚═╗
#   ╩ ╚═╝╩ ╩╩  ╩═╝╩ ╩ ╩ ╚═╝╚═╝
# =============================================================================
# -- Overloads ----------------------------------------------------------------
# Overload some configs to insert model-specific settings

# Model-specific defaults
.defaults:
  based_on: .defaults

  # Can define something here ...


# .. Creators .................................................................
.creator.universe:
  based_on:
    - .creator.universe
    - .defaults

  dag_options:
    select_path_prefix: *base_path

.creator.multiverse:
  based_on:
    - .creator.multiverse
    - .defaults

  select_and_combine:
    base_path: *base_path





# =============================================================================
#  ╔═╗╦  ╔═╗╔╦╗╔═╗
#  ╠═╝║  ║ ║ ║ ╚═╗
#  ╩  ╩═╝╚═╝ ╩ ╚═╝
# =============================================================================
# Spatial development in the CA
plant_mass_spatial:
  based_on:
    - .creator.universe
    - .plot.ca

  select:
    plant_mass: plant_mass

  to_plot:
    plant_mass:
      title: Plant Biomass
      cmap: Greens
      vmin: 0
      vmax: max


# Mean plant mass (and std) over time
time_series/mean_plant_mass:
  based_on:
    - .creator.multiverse
    - .plot.facet_grid.with_auto_encoding
    - .plot.facet_grid.errorbands
    - .hlpr.kind.time_series
    - .hlpr.limits.y.from_zero

  select_and_combine:
    fields:
      plant_mass_mean:
        path: plant_mass
        transform:
          - .mean: [!dag_prev , [x, y]]
      plant_mass_std:
        path: plant_mass
        transform:
          - .std: [!dag_prev , [x, y]]

  transform:
    - xr.Dataset:
      - mean: !dag_tag plant_mass_mean
        std: !dag_tag plant_mass_std
      tag: data

  x: time
  y: mean
  yerr: std

  helpers:
    set_labels:
      y: Plant Biomass
      only_label_outer: true

For available base plots, see Base Plot Configuration Pool.