Elmfire.jl
A Julia Implementation of the ELMFIRE Wildfire Simulation Model
Overview
Elmfire.jl is a pure Julia implementation of the ELMFIRE (Eulerian Level Set Model of FIRE spread) wildfire simulation model. It provides high-performance fire spread modeling with support for:
- Rothermel Surface Fire Spread Model - Industry-standard fire behavior calculations
- Level Set Method - Efficient fire front propagation using the Eulerian approach
- Crown Fire Modeling - Passive and active crown fire transitions
- Ember Transport (Spotting) - Stochastic ember generation and transport
- Weather Interpolation - Spatially and temporally varying weather conditions
- Monte Carlo Ensembles - Probabilistic fire forecasting with parallel execution
- WUI (Wildland-Urban Interface) Models - Building ignition and urban fire spread
- Suppression Models - Fire containment line construction and resource management
- Geospatial I/O - GeoTIFF reading/writing for integration with GIS workflows
Features
Multi-Precision Support
Elmfire.jl supports both Float64 (default) and Float32 precision throughout the entire codebase, allowing you to trade off numerical precision for memory efficiency and potentially faster computation on certain hardware.
High Performance
- Narrow Band Method - Only computes fire spread near the active fire front
- Multi-threaded Ensemble Runs - Parallel execution of Monte Carlo simulations
- Efficient Memory Layout - Column-major arrays optimized for Julia
Comprehensive Fire Behavior
- 13 standard FBFM (Fire Behavior Fuel Models) included, with Scott & Burgan models loadable from CSV
- Custom fuel model support
- Dynamic fuel moisture effects
- Slope and aspect terrain effects
- Wind-driven elliptical spread patterns
Quick Start
using Elmfire
# Create a fire simulation state (100x100 grid, 30ft cells)
state = FireState{Float64}(100, 100, 30.0)
# Create standard fuel model table
fuel_table = create_standard_fuel_table(Float64)
# Set weather conditions
weather = ConstantWeather{Float64}(
wind_speed_mph = 15.0,
wind_direction = 270.0, # From west
M1 = 0.06, # 6% 1-hr fuel moisture
M10 = 0.08,
M100 = 0.10,
MLH = 0.60,
MLW = 0.90
)
# Ignite at center
ignite!(state, 50, 50, 0.0)
# Run for 60 minutes
simulate_uniform!(state, 1, fuel_table, weather, 0.0, 0.0, 0.0, 60.0)
# Get results
println("Burned area: ", get_burned_area_acres(state), " acres")Installation
using Pkg
Pkg.add(url="https://github.com/RallypointOne/Elmfire.jl")Documentation Structure
- Getting Started - Installation and first simulation
- Tutorials - Step-by-step guides with examples
- API Reference - Complete function and type documentation
Funding
This work was funded by the NSF CO-WY ASCEND Applied R&D Program.

License
Elmfire.jl is released under the MIT License.