# Model Library

Here you can find a list of useful speed functions that can be used with Spark, submitted by users within CSIRO as well as partners outside the organisation. Feel free to use these models in your work, or modify them as you see fit. If you have created your own useful spread model, please feel free to submit it using the form at the bottom of the page, and we will publish it here for others to use.

Please note that these models may not be suitable to ‘plug and play’ for your specific applications. The models may not take certain things into account that are important for your application such as the slope of the terrain, the time of day, variability of input parameters and so on. Ensuring that the models are valid for the input parameters used is also important, we strongly recommend that you read the primary references to determine the applicability of the equations used.

A useful reference for fire spread models, ‘A Guide to Rate of Fire Spread Models for Australian Vegetation‘ is available online here.

Model name |
Submitted by |
Description |

Test | James Hilton (CSIRO) | Test case for constant speed plus wind. |

Dry Eucalypt (Vesta) | William Swedosh (CSIRO) | CSIRO and DPAW developed rate of spread model for dry eucalypt forests. |

CSIRO Grassland | William Swedosh (CSIRO) | CSIRO developed rate of spread models for Australian grasslands (including woodland and open forest). |

McArthur Eucalypt Forest | William Swedosh (CSIRO) | McArthur rate of spread for eucalypt forests. |

Buttongrass Moorlands | William Swedosh (CSIRO) | Marsden-Smedley and Catchpole rate of spread for buttongrass moorlands. |

Heathland | William Swedosh (CSIRO) | Anderson (2015) rate of spread for heathland. |

Rothermel | William Swedosh (CSIRO) | Rothermel (1972) rate of spread model for wildlands. |

Wet Eucalypt | William Swedosh (CSIRO) | Modified version of Vesta model. |

Semi-arid Mallee Heath | William Swedosh (CSIRO) | Cruz et al. (2013) model for semi-arid mallee heath. |

Spinifex | William Swedosh (CSIRO) | Burrows (2018) model for spinifex. |

Elliptical Template | William Swedosh (CSIRO) | Template for elliptical fire shapes. |

Slope Effects | William Swedosh (CSIRO) | McArthur and CSIRO Kataburn example. |

Build-up Phase | William Swedosh (CSIRO) | Logistic acceleration model for fire in build-up phase. |

## Writing Spark speed functions

Spark allows you to program the outward speed of the fire perimeter, allowing flexibility to use any rate-of-spread model or test your own. You can also program a user defined initialization step as well as user-defined post-processing step. Programs are written in the *C* programming language, using the OpenCL 1.1 API, which supports a wide range of built-in mathematics functions. All of these can be used in a program, including several functions specific to the Spark solver given in the table below. All valid OpenCL *C* code can be used in programs, except variables with leading underscores which are restricted for internal use. Local floating-point variables should also be defined with REAL, rather than double, which may not be available on all platforms. Likewise, vectors should be defined with REALVEC2. Otherwise, the programs can contain any valid combination of comments, functions, variables, layer names and branches. The Spark framework carries out limited checking on speed functions, so any errors should be returned by the OpenCL compiler (although, unfortunately, this is not the case with all compilers). The rate of spread program requires an additional ‘*speed =*‘ definition to set the outward speed. For example, a simple test case is given in the Test model.

Variable | Type | Description | Used in* |

easting | scalar | The cell easting value (m). | I |

northing | scalar | The cell northing value (m). | I |

speed | scalar | Required: sets the normal speed at the perimeter (m/s). | RP |

wind | scalar | The dot product of the wind and front normal, limited by zero. | R |

wind_vector | vector |
The wind vector. | R |

normal_vector | vector |
The normal vector of the perimeter. | R |

class | scalar | The current classification value. | IRP |

state | scalar | The current state of the cell. state = 1 is burnable, state = 0 is unburnable | IRP |

random | scalar | A random number from a uniform distribution between 0-1. | IRP |

output0 | scalar | Internal user-defined data layer, written to ‘output grid’ layer 0. | IRP |

output1 | scalar | Internal user-defined data layer, written to ‘output grid’ layer 1. | IRP |

output2 | scalar | Internal user-defined data layer, written to ‘output grid’ layer 2. (This goes up to output9) | IRP |

arrival | scalar | The ignition (arrival) time of the perimeter at the cell (s). No-data values indicate no recorded arrival time. | P |

time | scalar | The current solver time (s). | RP |

hour | scalar | The hour of the day of the simulation as would be read on a 24 hour clock. | R |

layername |
scalar | The interpolated value within the cell from the user-defined layer named layername. |
IRP |

dx(layername) |
scalar | The x-spatial derivative of the user-defined layer named layername. |
IR |

dy(layername) |
scalar | The y-spatial derivative of the user-defined layer named layername. |
IR |

grad(layername) |
vector |
The gradient of the user-defined layer named layername. |
IR |

* I: Initialization programs, R: Rate-of spread programs, P: Post-processing programs