3.5. Static modelling with point operations: forest fire

3.5.1. Introduction and gradient calculation

In a static model, we can calculate the time that the front of a forest fire reaches a certain cell location using weighted (relative) distance calculation, assuming the fire spreading is restricted to neighbouring cells in uphill direction only. This approach, further explained in the next section, requires a map with cell values representing the velocity of the forest fire spreading at that cell, given in hours per metre distance. The value of this velocity (h/m) is calculated as:

h = bes/a

with, b, a parameter, s, the gradient of the topographical surface (m/m), a a parameter, and h velocity of forest fire spreading at the cell. The value of b is known, b = 0.002, and it is assumed here that the gradient can be calculated from the digitial elevation model (assumed to have zero uncertainty). The value of a is known with a certain uncertainty, and thus a is modelled as a stochastic parameter (constant over the whole area and over time) with a probability distribution, defined by a mean of 0.5 and a variance of 0.01.

Go to the folder fire and display all maps in the folder, including dem.map, the digital elevation model that can be used to calculate the gradient. Open the script stochStaticMod.py. Add statements to calculate a variable gradient containing the slope of the topographical surface, write to disk under the file name gradient. Save and run the script, and display gradient.


Question: Where did you type the statements?

  1. In the premcloop.

  2. In the initial.

  3. In the postmcloop.

  4. At the top of the script, below the from.. statements.

Correct answers: a.

Feedback:

The gradient is calculated in the premcloop method, because it is a deterministic map, that needs to be derived only before the Monte Carlo simulations.

from pcraster import *
from pcraster.framework import *

class MyFirstModel(StaticModel, MonteCarloModel):
  def __init__(self):
    StaticModel.__init__(self)
    MonteCarloModel.__init__(self)
    setclone('clone.map')

  def premcloop(self):
    dem=self.readmap('dem')
    self.gradient=slope(dem)
    self.report(self.gradient,'gradient')

  def initial(self):
    pass
  
  def postmcloop(self):
    pass

nrOfSamples = 100
myModel = MyFirstModel()
staticModel = StaticFramework(myModel)
mcModel = MonteCarloFramework(staticModel, nrOfSamples)
mcModel.run()

3.5.2. Point operation to calculate fire front velocity

In stochStaticMod.py, add a statement that calculates realizations of a. Use the variable name a written to disk with a file name a. You will need to use the function mapnormal. Save the script and run. Check the output.

Calculate the mean, variance, and percentiles of a in the postmcloop. Save the script and run. Display the output. Be sure to check whether the mean and variance of a are correct.

Calculate h, save the variable as hpm (i.e., hours per minute) and calculate mean, variance, and percentiles. Display the output.


Question: What is the probability density distribution of the velocity of the forest fire, i.e. what is the shape? Explain the shape using the equation used to calculate it.

  1. The probability density distribution has a zero standard deviation, due to the exponent, reducing the variation.

  2. The shape of the probability density distribution is normal, because the equation uses a normally distributed variable in the exponent of a natural logarithm.

  3. The shape of the probability density distribution is log-normal, because the equation uses a normally distributed variable in the exponent of a natural logarithm.

  4. The shape of the probability density distribution is uniform, which is due to the exponent.

Correct answers: c.

Feedback:

from pcraster import *
from pcraster.framework import *

class MyFirstModel(StaticModel, MonteCarloModel):
  def __init__(self):
    StaticModel.__init__(self)
    MonteCarloModel.__init__(self)
    setclone('clone.map')

  def premcloop(self):
    dem=self.readmap('dem')
    self.gradient=slope(dem)
    self.report(self.gradient,'gradient')

  def initial(self):
    a=max(0.5+mapnormal()/10,0.0001)
    self.report(a,'a')

    hoursPerMetre=0.002*exp(self.gradient/a)
    self.report(hoursPerMetre,'hpm')

  def postmcloop(self):
    names=['a','hpm']
    sampleNumbers=self.sampleNumbers()
    print(sampleNumbers)
    timeSteps=[0]
    mcaveragevariance(names,sampleNumbers,timeSteps)
    percentiles=[0.025,0.05,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.95,0.975]
    mcpercentiles(names,percentiles,sampleNumbers,timeSteps)

nrOfSamples = 100
myModel = MyFirstModel()
staticModel = StaticFramework(myModel)
mcModel = MonteCarloFramework(staticModel, nrOfSamples)
mcModel.run()


Question: What is the variance and the standard deviation of the velocity of forest fire (h/m) at the gridcell location indicated on house.map? Write down and store, you will need it later on.

  1. average = 0.045, variance = 0.43·10-9, standard deviation = 2·1-10

  2. average = 0.45, variance = 4.3·10-9, standard deviation = 2·1-9

  3. average = 0.0045, variance = 7.6·10-7, standard deviation = 8.7·10-4

  4. average = 0.0045, variance = 4.3·10-9, standard deviation = 2·1-9

Correct answers: c.

Feedback: none



Question: Display hpm together with the slope map gradient. Plot the 95% confidence interval for a (threshold) value of 0.005. A velocity below 0.005 is considered a high forest fire front spreading velocity. For what areas in terms of slope values is it not distinguishable whether the value is above or below the threshold?

  1. For areas with a slope of about 0.1.

  2. For areas with a slope of about 0.2.

  3. For areas with a slope of about 0.5.

  4. For areas with a slope of about 0.7.

Correct answers: c.

Feedback: none