Getting Started

Compute a Rate of Spread

Use the Rothermel (1972) model with one of the 53 standard fuel models (13 NFFL + 40 Scott & Burgan):

# Fuel moisture (fraction, 0-1) for each size class
moisture = FuelClasses(d1=0.06, d10=0.07, d100=0.08, herb=0.0, wood=0.0)

# Rate of spread in m/min
rate_of_spread(SHORT_GRASS, moisture=moisture, wind=8.0, slope=0.0)
31.119112730486354

See the Rothermel page for details on fuel models and parameters.

Build a Fire Spread Model

The SpreadModel module lets you compose a FireSpreadModel from pluggable wind, moisture, and terrain components:

model = FireSpreadModel(
    SHORT_GRASS,                     # fuel model
    UniformWind(speed=8.0),          # 8 km/h wind
    UniformMoisture(moisture),       # uniform moisture from above
    FlatTerrain()                    # no slope
)

# Evaluate at a point: returns spread rate in m/min
model(0.0, 100.0, 100.0)
31.119112730486354

Run a Fire Spread Simulation

Create a level set grid, ignite, and simulate:

# 200x200 grid, 30m resolution -> 6km x 6km domain
grid = LevelSetGrid(200, 200, dx=30.0)

# Ignite a 50m-radius circle at the center
ignite!(grid, 3000.0, 3000.0, 50.0)

# Simulate 100 steps of 0.5 min each (50 min total)
simulate!(grid, model, steps=100, dt=0.5)

grid
LevelSetGrid{Float64} 200×200 (t=50.0, burned=702/40000, ignited=702)

Visualize

fig = Figure()
ax = Axis(fig[1, 1], title="t = $(grid.t) min", aspect=DataAspect(),
    xlabel="x (m)", ylabel="y (m)")
fireplot!(ax, grid)
fig

Next Steps

  • Rothermel — fuel models, parameter sensitivity, and the physics behind rate of spread
  • Level Set — boundary conditions, reinitialization, plotting options, and the numerical scheme
  • Spread Model — dynamic moisture, custom wind/terrain components, and simulation parameters
  • GPU — running simulations on CUDA, ROCm, or Metal backends
  • PINN Solver — mesh-free fire spread via physics-informed neural networks
  • API Reference — full documentation of all exported functions and types