Simple empirical fire model: Difference between revisions
Appearance
| Line 34: | Line 34: | ||
Global Constants: | Global Constants: | ||
MaxTSF = 200 | MaxTSF = 200 | ||
Output Model Bounds: | Output Model Bounds: | ||
TimeSinceFire: MaxTSF | TimeSinceFire: MaxTSF | ||
| Line 44: | Line 43: | ||
oldFireCycle = FireCycle OFF | oldFireCycle = FireCycle OFF | ||
Output Frequency: 365.250000 | Output Frequency: 365.250000 | ||
===Fire.lse=== | ===Fire.lse=== | ||
Revision as of 15:49, 14 November 2006
Summary
Screenshot
Download Model
Download the .scn, .sel and .lse files by clicking on the following link: File:SimpleFireModel.zip
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
Seles Model Information initialTimeSinceFire = ..\gisData\cell\initialTSF1 Model Dimensions: initialTimeSinceFire FireModel.sel Minimize Initial State Tile
Model.sel
Seles Model Information Time Units: Day Year 365.25 Landscape Events: Succession.lse Fire.lse Variable-Input View Maps: TimeSinceFire = initialTimeSinceFire Variable-Output View Maps: TimeSinceFire Global Constants: MaxTSF = 200 Output Model Bounds: TimeSinceFire: MaxTSF Global Variables: ForestSize = 250000 MeanFireSize = 100 MeanFiresPerYear = 10 FireCycle = ForestSize /(MeanFireSize * MeanFiresPerYear) oldFireCycle = FireCycle OFF Output Frequency: 365.250000
Fire.lse
SEVENT: SimpleFire
DEFINITIONS LAYER: TimeSinceFire GLOBAL VARIABLE: ForestSize, MeanFireSize, MeanFiresPerYear, FireCycle, oldFireCycle
CLUSTER VARIABLE: Extent 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 NUMCLUSTERS = ROUND(NEGEXP(MeanFiresPerYear))
// For each pick a size Extent = ROUND(NEGEXP(MeanFireSize)) 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)
// Set the time since fire to 0 TimeSinceFire = 0
// Decrement the number of cells remaining to burn for this opening Extent = Extent - 1 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
Suggested Experiments
To explore this cellular automata model further, try the following:
