The bark beetle module is a disturbance sub-module of iLand. It handles the spread and impact of spruce bark beetles.

Parameters


Details of the module are configured in a special sub-section of the XML Project file.  This barkbeetle section needs to be placed as a sub-node of the modules.


The following table describes the parameters:

keydatatypedescription
enabledbooleanIf true, the barkbeetle module is active.
minimumDbhnumericminimum Dbh for spruce trees to be regarded as potential beetle host trees.
initialInfestationProbabilitynumericprobability that a pixel (containing host trees) is infested at startup. Outbreak duration for these pixels is randomly selected between 1 and 4 years.
backgroundInfestationProbability numericthe annual probability for the occurrence of a bark beetle outbreak per hectare. Note: this can be defined spatially explicit using the environment file mechanism.
stormInfestationProbabilitynumericthe probability that (suitable) wind-damaged pixels act beetle source. Default: 1 (i.e. all pixels are assumed being immediately infested)
baseWinterMortality numericprobabilty that the beetles on an infested pixels (10m) die during the winter. This reduces the number of infested pixels.
winterMortalityFormula stringThis formula gives the probability that infested pixels die as a function of the number of cold days (defined as number of days with the minimum temperature below a threshold of -15°C). This is evaluated (annually) for every infested pixel that passes the 'base mortality'. Formula parameter: days
spreadKernelFormula stringA formula that defines the spread kernel for bark beetles. The equation provides a probability for a distance x (in meters) from the origin. The given probability density function is limited to the area between 0 and the setting spreadKernelMaxDistance and is scaled internally to have a sum of 1.
spreadKernelMaxDistancenumericThe maximum distance beetles can fly in meters (see spreadKernelFormula).
cohortsPerGenerationnumericBeetles spread not as individual animals, but as 'packages' (numerous enough to having a small chance of successfully attacking a potential host pixel). This setting is the number of 'packages' that spread for each generation from an infested pixel (in random direction and a random distance selected from the spread kernel).
cohortsPerSisterbroodnumeric'packages' of beetles that can spread from an infested pixel if a full sisterbrood develops. The (lower) number of cohortsPerGeneration is used when the (potential) sisterbrood fails to develop fully.
colonizeProbabilityFormula stringThe formula expresses the probability that the attack of one beetle 'package' landed on a potential host pixel is successful. The parameter for the formula is the stress-level of the tree (SI).
deadTreeSelectivitynumericfactor determining how effectively beetles are attracted by dead trees (e.g. windthrown) (within a 5x5 pixel vicinity). 1: all beetles go into dead trees, 0: no effect of dead trees, default: 1
outbreakClimateSensitivityFormulastringThe formula calculates 'rc', the climate sensitivity factor modifying the backgroundInfestationProbability. 'rc' is a multiplier, i.e. 1=no change, 0.8: 20% reduction of the probability. The formula provides the following variables: Pspring, Psummer, Pautumn, Pwinter: the relative amount of seasonal precipitation compared to the seasonalPrecipSum (see referenceClimate), Tspring, Tsummer, Tautumn, Twinter: the difference between the seasonal mean temperature of the current year compared to the seasonalTemperatureAverage.
outbreakClimateMultiplierstringAn expression that (if provided) calculates a factor modulating the outbreak probability (similar to "outbreakClimateSensitivityFormula"). The factor is a multiplier, i.e. a value of 1 (the default) means no change, a value of e.g. 5 is 5x increase of the odds (roughly 5x of backgroundInfestationProbability). Variables: VPDjj = mean of VPD over June / July (kPa). Note that this factor is calculated for each resource unit (not only for a reference climate)
outbreakDurationMindoubleminimum duration of bark beetle outbreaks. See also outbreakDurationMax
outbreakDurationMaxdoublemaximum duration of bark beetle outbreaks. The actual outbreak duration is drawn each year randomly between outbreakDurationMin and outbreakDurationMax.
outbreakDurationMortalityFormulastringformula that calculates the mortality probability due to antagonists. Variable: relative outbreak duration (with 1=the actual outbreak duration, see above). Example: polygon(t, 0.8,0, 1,1)
referenceClimategroup
referenceClimate.tableNamestringThe table name in the current climate database that which defines the reference climate. iLand compares the climate given by that table with the values given in the referenceClimate section.
referenceClimate.seasonalPrecipSumlistcomma-delimited list of seasonal precipitation sums (spring, summer, autumn, winter). This data should be extracted from the baseline climate for which the bark beetle module is calibrated in the region (and should represent the correct tableName). Example: 212, 234, 190, 179
referenceClimate.seasonalTemperatureAveragelistcomma-delimited list of seasonal mean temperatures (see also seasonalPrecipSum). Seasons are: spring: March, April, May, summer: June, July, August, autumn: Sept., Oct., Nov., winter: Dec., Jan., Feb. Example: 7.6, 13.2, 6.9, 3.3
onafterBarkbeetlestringJavascript code that is executed after the bark beetle event. This can be used for automating the export of grids (see also the javascript section below). Default: empty.

Barkbeetle visualization

The bark beetle module adds several grids to the central iLand view whenever the module is enabled. Besides viewing, those grids can also be exported (see the Javascript section).

Specifically, those grids are:

namedescription
generationstotal number of bark beetle generations on 100m pixels.
dbhdiameter of the thickest spruce tree when on a 10m pixel. Value is 0 if the pixel is not considered as a potential host (no spruce trees, or diameter below threshold)
infestedreturns '1' for pixels that are currently infested, or '0' otherwise.
deadThe pixel value is -1 for non-host pixels, 0 for live pixels, and >0 for dead or infested pixels. The value (>0) indicates the iteration at which a pixel was killed. Newly infested pixels have a value of the max-iteration + 1 (i.e. they will be 'red').
killedValue is 1 for pixels that have been killed by bark beetles in the last year (0 otherwise).
p_killed(maximum) probability of infestation for a pixel. The value combines the effect of the number of beetles which landed on a pixel and the defense status of the trees on a pixel. Values are between 0..1. The value is cleared every year (or when BarkBeetle.clear() is called).
n_landedtotal number of bark beetle cohorts that landed on a pixel in the current year (sum over all generations).
nEventscumulative number of damages over the whole simulation on the respective cell. The counter is increased whenever trees are killed on the pixel in the current year
deadwood10: trees are killed by storm, 8: pixels are 'trap trees', 5: pixel is in (active) vicinity of dead or trap pixels, 0: no dead trees
outbreakAgeyear of the outbreak (simulation year) that lead to killing of the pixel
outbreakProbabilitybackground infestation probability (probability that outbreak starts at each of the 10m pixel per year) (this does not include the interannual climate sensitivity)
outbreakClimateMultiplierthe climate driven bark beetle outbreak multiplier for each RU (current year)

Bark beetle javascript


Most functionalities of the barkbeetle module can be accessed via an Javascript-API. The barkbeetle API can be accessed using the BarkBeetle object that is available in the global context when the module is enabled.

Methods

runBB(number iteration)
executes a full cycle of the bark beetle module if iteration is 0 (i.e.: calculate generations, fetch vegetation from iLand, and spread/ attack/ kill). If iteration is larger then 0, only spread/attack/killing is simulated. This can be used to simulate multiple barkbeetle iterations (years) with a static forest state (note, though, that trees are removed! - see also simulate, newYear

reloadSettings()
(Re-)load the parameters from the XML-settings. Can be used in conjunction with Globals.set() for quick (Javascript-based) tests. 

clear()
clears/resets the internal grids (10m cells, 100m cells), i.e. damage and spread data.

newYear()
increments the internal year counter - this is useful multiple years of bark beetles should be simulated without iLand running (which would synchronize the simulation year).

gridToFile(type, filename)
writes a grid of type type to a ESRI ASCII grid (filename). type is one of the available grids (see here). The project folder is the default location for filename.

grid(type)
retrieve a grid of the type type (see also gridToFile(), http://iland-model.org/apidoc/classes/Grid.html).

generations(x, y)
return the number of bark beetle generation at position x/y (indices on the 10m grid)

setInfested(x,y)
Initiate damage; sets pixel at (x/y) (grid indices) as infested, return true if pixel was a potential host pixel

__setInfestedFromMap(Map grid, key, probability, agerange)_
set all pixels on stand key on the map grid (with probability probability) as infested. If infested, an "age" for the infestation is randomly selected between 0 and agerange. See also: http://iland-model.org/apidoc/classes/Map.html)

setBackgroundInfestationProbability(x)
set the background infestation probability to 'x' for the whole landscape.

Properties


simulate - boolean
Tree killing is only simulated, if set to true. (default: false)

enabled - boolean
The bark beetle module can be (temporarily) disabled by setting enabled to false. (default: true)

Script Example

// movie mode: run 'n' iterations (slowly)
function rounds(n) 
{
  reset(); // see below
  for (var i=0;i < n;++i) {
    BarkBeetle.runBB(i);
    Globals.repaint();
    Globals.wait(100);
  }
}
function reset()
{
  // change settings of the module
  Globals.set("modules.barkbeetle.cohortsPerGeneration", 50);
  // now reload the bark beetle module, and enable 'simulation-mode'
  BarkBeetle.reloadSettings();
  BarkBeetle.clear();
  BarkBeetle.simulate = true;
}

// when setting the "onAfterBarkbeetle" event in the XML file to
// this function ("after_barkbeetle_damage()"), it is called
// automatically
function after_barkbeetle_damage() {
   BarkBeetle.gridToFile('dead', Globals.path("temp/bb_dead.asc"));
   console.log('event triggered...');
}


BarkBeetle module output

Table Name: barkbeetle
Barkbeetle related outputs per year. The outputs are created after each year (or spread event) and contain information about bark beetle generations, spread and damage for the total landscape.
For spatially explicit outputs, see also the script functions for extracting gridded data.

captiondatatypedescription
yearintegersimulation year
initialInfestedArea_hadoubleArea of infested pixels (ha) at the start of the iteration (i.e. before winter mortality or background activation happen).
backgroundMortality_hadoubleArea of infested pixels (ha) that die due to winter mortality.
backgroundActivation_hadoubleArea of (not infested) pixels (ha) that are 'ignited' and consequently a source of bark beetles.
stormActivation_hadoubleArea of (not infested) pixels (ha) that are 'ignited' by storm and consequently infested.
spreadCohortsdoubleNumber of bark beetle 'packages' (x1000) that are spread from the source pixels (kilo-cohorts).
landedCohortsdoubleNumber of bark beetle 'packages' (x1000) that reach potential hosts (cohorts x 1000).
landedArea_hadoubleArea (ha) of potential host trees where bark beetles landed.
infestedArea_hadoubleArea (ha) of newly infected host pixels.
killedTreesdoubletotal number of Norway spruce trees that were killed in this iteration.
killedBasalAreadoubleTotal Basal Area of killed trees in the current year.

citation

Seidl, R., Rammer, W., 2016. Climate change amplifies the interactions between wind and bark beetle disturbances in forest landscapes. Landscape Ecol (2016). doi:10.1007/s10980-016-0396-4