Species models
The ecological submodel in Persefone simulates a range of taxa in agricultural landscapes.
Birds
Persefone.#1358#fun — Function
Initialise a bird individual. Selects migration dates and checks if the bird should currently be on migration. Also sets other individual-specific variables.
Persefone.#1382#fun — Function
Non-breeding adults move around with other individuals and check for migration.
Persefone.#1383#fun — Function
Males returning from migration move around to look for suitable habitats to establish a territory.
Persefone.#1430#fun — Function
Once a male has found a territory, he remains in it until the breeding season is over. (It should adjust it to new conditions when and as necessary, but this is not yet implemented.)
Persefone.#1431#fun — Function
Females returning from migration move around to look for a suitable partner with a territory.
Persefone.#1501#fun — Function
Females that have found a partner build a nest and lay eggs in a suitable location.
Persefone.#1525#fun — Function
Females that have laid eggs take care of their chicks, restarting the nesting process once the chicks are independent or in case of brood loss.
Persefone.allowsnestingskylark — Method
allowsnestingskylark(animal, model, pos)Check whether the given position is suitable for nesting for skylarks.
Persefone.birdrandommove! — Function
birdrandommove!(self, model, ttl=10)The bird checks random spots within its movement range and moves to the first one that satisfies its forage habitat requirements. If ttl attempts are all unsuccessful, it stays where it is. Returns true if the move is successful, false if not.
Persefone.circularterritory — Function
circularterritory(animal, model, increment=5m, gridspacing=2m)Attempt to build a territory surrounding the bird's current location. The territory is constructed as a circle covering the species' minimum territory size, and expanded incrementally until the required effective size (i.e. area weighted by habitat quality) is reached. If this cannot be done without infringing on another territory, return nothing, otherwise return the resulting geometry.
Persefone.destroynest! — Method
destroynest!(animal, model, reason)Remove the bird's nest and offspring due to disturbance or predation.
Persefone.dynamicterritory — Function
dynamicterritory(animal, model, blocksize=10m)Attempt to build a territory surrounding the bird's current location by successively adding square blocks concentrically around it, as long as they don't infringe on another territory. Keeps adding territory blocks until the required effective territory size (area weighted by habitat quality) is reached, then returns the geometry. Returns nothing if there is insufficient space.
Persefone.effectivesize — Function
effectivesize(self, model, territory, gridspacing=2m)Calculate the functional area of the territory, weighting the absolute size by the local forage quality. Works by superimposing a grid of points over the territory and summing up the quality rating of each point.
Persefone.foragequalityskylark — Method
foragequalityskylark(animal, model, pos)Calculate the relative quality of the habitat at this position for foraging for a skylark. This assumes that open habitat is best (quality = 1.0), and steadily decreases as vegetation height and/or cover increase. (Linear regressions based on Püttmanns et al., 2021; Jeromin, 2002; Jenny, 1990b.)
Butterflies
Persefone.#1693#fun — Function
Initialise a butterfly individual. Mainly defines the time this individual will spend in each phase. (This ought to be temperature-dependent rather than random, but I don't have data for that.)
Persefone.#1786#fun — Function
Juvenile individuals (i.e. eggs, larvae, pupae) simply wait for the eclosing day.
Persefone.#1787#fun — Function
Juvenile individuals (i.e. eggs, larvae, pupae) simply wait for the eclosing day.
Persefone.#1788#fun — Function
Juvenile individuals (i.e. eggs, larvae, pupae) simply wait for the eclosing day.
Persefone.#1789#fun — Function
Adult butterflies (we only simulate females) fly around more or less randomly on days with good weather, laying eggs on suitable habitat.
Movement
Adults move a given number of steps each day, depending on the temperature (see below). Each step, an individual moves to a random location within its perceptual range that matches its habitat requirements (i.e. either arable or extensive grassland with plant heights within the required range of 30-60cm). Here, the individual lays an egg if it has not yet laid all its eggs for that day. Locations that are not suitable habitat may still be chosen to move to with a certain probability (given by the habitatpreference parameter), but without subsequent oviposition.
Temperature
Temperature affects both the distance moved and the number of eggs laid each day. The optimal temperature is taken to be the midway point between the species' minimum and maximum temperatures (i.e. 24°C). Outside the species' temperature range (18-30°C), neither movement nor oviposition take place. Within that range, the number of steps each day peaks at the optimum temperature and declines linearly on either side of it. (cf. Evans et al., 2019). The number of eggs laid declines linearly if the temperature is below the optimum, but stays stable above it (cf. Gotthard et al., 2007). The daily mean temperatures are used as the basis for calculation (using the maximum temperature produces wrong model results during heat waves).
Note: this is quite specific to Melanargia galathea and likely needs to be adjusted in future.
Persefone.butterflyrandommove! — Function
butterflyrandommove!(butterfly, model)The butterfly randomly inspects points within its field of view and moves to the first suitable spot it finds. Depending on the habitatpreference parameter, spots that are not suitable habitat may also be selected. Spots with higher population densities are more likely to be avoided (avoidance increases linearly up to 100% at maxdensity). Returns true if the move is successful. Otherwise, the butterfly moves to any spot in its perception range and returns false.
Persefone.habitatcategory — Method
habitatcategory(butterfly, model)Return the habitat category of the butterfly's current location (using a taxon-specific classification).
Persefone.recordlifestats — Method
recordlifestats(butterfly, model)Save this butterfly's life stats to file.