The FireSucc model

Download Model
Download the .scn, .sel and .lse files by clicking on the following link:

Note that this particular model can be found in the FireSucc folder under the SimpleFireModel file. For More information, please see SELES FireSuccession Lab Handout in the Handout folder.

Model Code Exploration
In the following sections we will examine all of the model files for this model. Note that instead of downloading the zip file above, you could just copy the text in the boxes below into a text editor and save it with the appropriate name (Section title). Opening the resulting .scn file in the SELES simulator would run this model.

Fire.scn
Scenario Information initialTimeSinceFire = ..\gisData\cell\initialTSF1 initialSpecies = ..\gisData\cell\initialSpecies1 Model Dimensions: initialSpecies FireSuccModel.sel // Fire cycle: 100 years // MeanFireSize: 5000ha // MeanFiresPerYear: 0.5 Minimize Initial State Minimize TimeSinceFire Tile

Fire.lse
LSEVENT: SimpleFire DEFINITIONS LAYER: TimeSinceFire, Species GLOBAL VARIABLE: ForestSize, MeanFireSize, MeanFiresPerYear, FireCycle, oldFireCycle GLOBAL VARIABLE: ObsMeanFireSize,ObsMeanFiresPerYear GLOBAL CONSTANT: rAspen, rPine, rSpruce, rBalsam CLUSTER VARIABLE: Extent, preferredSpecies ENDDEF RETURNTIME RETURNTIME = 365.25 // In case the user tries to change this... ForestSize = NUMCELLS impliedForestSize = MeanFireSize * MeanFiresPerYear * FireCycle IF (impliedForestSize NEQ ForestSize) // If the user didn't change fire cycle: adjust it. IF oldFireCycle EQ FireCycle oldFireCycle = FireCycle FireCycle = ForestSize / (MeanFireSize * MeanFiresPerYear) DISPLAY RECORD DECISION (oldFireCycle NEQ 0) OR (FireCycle NEQ 0) ForestSize: ForestSize impliedForestSize: impliedForestSize ratio: impliedForestSize/ ForestSize oldFireCycle: oldFireCycle newFireCycle: FireCycle ENDFN oldFireCycle = FireCycle // Otherwise, the fire cycle was changed so adjust num fires instead ELSE oldFireCycle = FireCycle oldMFPY = MeanFiresPerYear MeanFiresPerYear = ForestSize / (MeanFireSize * FireCycle) DISPLAY RECORD ForestSize: ForestSize impliedForestSize: impliedForestSize ratio: impliedForestSize/ ForestSize oldMeanFiresPerYear: oldMFPY newMeanFiresPerYear: MeanFiresPerYear ENDFN ENDFN ENDFN ENDRT // Pick number of fires // with random ignition NUMCLUSTERS ObsMeanFiresPerYear = ROUND(NEGEXP(MeanFiresPerYear)) //  NUMCLUSTERS = ROUND(NEGEXP(MeanFiresPerYear)) NUMCLUSTERS = ObsMeanFiresPerYear // For each pick a size Extent = ROUND(NEGEXP(MeanFireSize)) ObsMeanFireSize = ObsMeanFireSize + Extent // accumulate Extents for output // At the fire patch level: prefer to change spruce to pine or aspen (to create more  contagious patches) // 70% chance of becoming aspen 30% chance of becoming pine preferredSpecies = IF UNIFORM(0,1) <= 0.7 THEN rAspen ELSE rPine ENDNC TRANSITIONS // Make a transition only if there is still extent to be burned // AND if the stand didn't just burn during this event TRANSITIONS = (Extent >= 1) AND (TimeSinceFire > 0) prevTimeSinceFire = TimeSinceFire // Set the time since fire to 0 TimeSinceFire = 0 // Decrement the number of cells remaining to burn for this opening Extent = Extent - 1 // change the Species Species = CLASSIFY(Species) rAspen: rAspen // aspen stays aspen //            rPine: rPine  // pine stays pine rPine: IF prevTimeSinceFire <= 20 THEN rAspen ELSE rPine //             rSpruce: IF UNIFORM(0,1) <= 0.7 THEN rAspen ELSE rPine  // Spruce: 70%   chance of becoming aspen 30% chance of becoming pine rSpruce: preferredSpecies // just use preferred species rBalsam: rPine // Balsam becomes pine ENDFN ENDTR // Spread time not relevant SPREADTIMESTEP = 0 /* Allow spread to the 4 cardinal neighbours: up, down, left and right */ SPREADLOCATION REGION CENTRED(1,1) DECISION TimeSinceFire > 0 ENDSL NUMSPREADRECIPIENTS /* Mid-Complex shapes. This is the number of neighbours to */ /* spread to from a burning cell. Lower mean gives more complex shapes. */ /* Higher standard deviation gives more variety of shapes. */ NUMSPREADRECIPIENTS = CLAMP(NORMAL(0.5,1), 1,3) ENDNR

Succession.lse
LSEVENT: SimpleSuccession DEFINITIONS GLOBAL CONSTANT: MaxTSF GLOBAL VARIABLE: PatchBased,SProbAspen2Spruce, SProbPine, SProbPine2Spruce LAYER: TimeSinceFire, Species, Visited GLOBAL CONSTANT: rAspen, rPine, rSpruce, rBalsam CLUSTER VARIABLE: patchSpecies, patchTSF, newPatchSpecies ENDDEF // Succession is modelled every year RETURNTIME RETURNTIME = 365.25 Visited = 0 ENDRT PROBINIT TimeSinceFire = MIN(TimeSinceFire + 1, MaxTSF) // Only non-zero probabilities for aspen and pine PROBINIT = (((Species EQ rAspen) OR (Species EQ rPine)) AND (TimeSinceFire >= 100)) // At the patch level: prefer to change pine to spruce or balsam (to create more contagious patches) // 50% chance of becoming spruce 50% chance of becoming balsam newPatchSpecies = CLASSIFY(Species) rAspen: IF UNIFORM(0,1) <= SProbAspen2Spruce THEN rSpruce // 10% chance for aspen ELSE rAspen rPine: IF UNIFORM(0,1) <= SProbPine // 1% chance for pine THEN IF UNIFORM(0,1) <= SProbPine2Spruce THEN rSpruce ELSE rBalsam ELSE rPine ENDFN // To identify patch patchSpecies = Species patchTSF = TimeSinceFire ENDPI TRANSITIONS IF (Visited EQ 0) Species = newPatchSpecies ENDFN TRANSITIONS = (PatchBased > 0) AND (Visited EQ 0) Visited = 1 ENDTR SPREADTIMESTEP = -2 // Spread to other cells in patch SPREADLOCATION REGION CENTRED(1,1.5,EUCLIDEAN) DECISION (Species EQ patchSpecies) AND (patchTSF EQ TimeSinceFire) ENDSL SPREADPROB = 1

FireSuccModel.sel
Seles Model Information Time Units: Day Year 365.25 Landscape Events: Succession.lse Fire.lse ReportResults.lse Variable-Input View Maps: Species = initialSpecies TimeSinceFire = initialTimeSinceFire Variable-Output View Maps: Species TimeSinceFire Global Constants: MaxTSF = 200 rAspen = 1 rPine = 2 rSpruce = 3 rBalsam = 4 Aspen = 1 Pine = 2 Spruce = 3 Balsam = 4 Output Model Bounds: TimeSinceFire: MaxTSF Species: 4 Global Variables: ForestSize = 250000 MeanFireSize = 100 MeanFiresPerYear = 10 FireCycle = ForestSize /(MeanFireSize * MeanFiresPerYear) oldFireCycle = FireCycle OFF PatchBased = TRUE SProbAspen2Spruce = 0.1 SProbPine = 0.01 SProbPine2Spruce = 0.5 RecordResults = TRUE Output Frequency: 365.250000

Suggested Experiments
To explore this cellular automata model further, try the following: