Model 1: Short Grass (1 ft)
Model 2: Timber (Grass & Understory)
Model 4: Chaparral (High Intensity)
Model 8: Closed Timber Litter
Model 9: Hardwood Litter
Model 10: Timber (Litter & Understory)
Calculation Results
Rate of Spread (Chains/hr):0 ch/hr
Rate of Spread (Ft/min):0 ft/min
Estimated Flame Length:0 ft
Perimeter Growth (1 hr):0 chains
function calculateFireSpread() {
var fuelModel = document.getElementById('fuelModel').value;
var slopePct = parseFloat(document.getElementById('slopePercent').value);
var windMph = parseFloat(document.getElementById('windSpeed').value);
var moisture = parseFloat(document.getElementById('fuelMoisture').value);
// Validation
if (isNaN(slopePct)) slopePct = 0;
if (isNaN(windMph)) windMph = 0;
if (isNaN(moisture) || moisture <= 0) moisture = 5;
// Constants based on simplified Rothermel logic for specific NFFL models
// Parameters: [A (Wind Coeff), B (Wind Exp), C (Slope Coeff), FuelLoadFactor, PackingRatio]
// This is a simplified approximation for a web-based tool, not a full BehavePlus engine.
var baseRate = 0;
var windFactor = 0;
var slopeFactor = 0;
var heatPerUnitArea = 0;
// Simplified characteristic logic
if (fuelModel === "1") { // Grass
// Highly sensitive to wind and fine fuel moisture
var moistureDamping = Math.max(0, 1 – (moisture / 12));
baseRate = 3.0 * moistureDamping; // Base rate without wind/slope
windFactor = Math.pow(windMph, 1.4) * 0.8;
heatPerUnitArea = 200;
} else if (fuelModel === "2") { // Grass/Timber
var moistureDamping = Math.max(0, 1 – (moisture / 15));
baseRate = 1.5 * moistureDamping;
windFactor = Math.pow(windMph, 1.3) * 0.5;
heatPerUnitArea = 400;
} else if (fuelModel === "4") { // Chaparral
var moistureDamping = Math.max(0, 1 – (moisture / 20));
baseRate = 5.0 * moistureDamping; // High intensity
windFactor = Math.pow(windMph, 1.2) * 0.7;
heatPerUnitArea = 1500;
} else if (fuelModel === "8") { // Timber Litter
var moistureDamping = Math.max(0, 1 – (moisture / 25));
baseRate = 0.5 * moistureDamping; // Slow
windFactor = Math.pow(windMph, 1.0) * 0.2;
heatPerUnitArea = 300;
} else if (fuelModel === "9") { // Hardwood Litter
var moistureDamping = Math.max(0, 1 – (moisture / 20));
baseRate = 0.8 * moistureDamping;
windFactor = Math.pow(windMph, 1.1) * 0.3;
heatPerUnitArea = 400;
} else if (fuelModel === "10") { // Timber Understory
var moistureDamping = Math.max(0, 1 – (moisture / 25));
baseRate = 1.2 * moistureDamping;
windFactor = Math.pow(windMph, 1.2) * 0.4;
heatPerUnitArea = 800;
}
// Slope Factor Logic (Simplified Phi Slope)
// Formula approx: PhiS = 5.275 * beta^-0.3 * tan(phi)^2 (Rothermel)
// Using a general exponential approximation for web usability
var slopeTan = slopePct / 100;
slopeFactor = 5 * Math.pow(slopeTan, 2);
// Total Spread Rate (R = R0 * (1 + PhiW + PhiS))
// We treat baseRate as R0 usually, but here we construct it from components for simplicity
// Let's use: ROS = Base * (1 + WindFactor + SlopeFactor)
var rosFtMin = baseRate * (1 + windFactor + slopeFactor);
// Safety cap for extreme inputs in a simplified model
if (rosFtMin simplified
// FL = 0.45 * I^0.46
var fireIntensity = (heatPerUnitArea * rosFtMin);
var flameLength = 0.45 * Math.pow(fireIntensity, 0.46);
// Perimeter Growth Approximation (Ellipse model, simplified)
// P approx = 2 * PI * ROS_Time
// Rough estimate for 1 hour of growth assuming constant conditions
var perimeterChains = rosChainsHr * 2.5; // Factor accounting for flank/backing spread ratio
// Update DOM
document.getElementById('resChains').innerHTML = rosChainsHr.toFixed(2) + " ch/hr";
document.getElementById('resFtMin').innerHTML = rosFtMin.toFixed(1) + " ft/min";
document.getElementById('resFlame').innerHTML = flameLength.toFixed(1) + " ft";
document.getElementById('resPerimeter').innerHTML = "~" + perimeterChains.toFixed(0) + " chains";
document.getElementById('result').style.display = 'block';
}
Understanding Fire Rate of Spread (ROS)
The rate at which a wildland fire spreads is one of the most critical metrics for fire behavior analysts, forestry professionals, and firefighters. The Rate of Spread (ROS) determines how quickly a fire perimeter expands and directly influences safety zones, escape routes, and suppression strategies.
Key Factors Used in This Calculator
This calculator utilizes concepts derived from the Rothermel surface fire spread model, focusing on four primary variables:
Fuel Model: Different vegetation types burn differently. We use standard NFFL (National Forest Fire Laboratory) models. For example, Model 1 (Short Grass) reacts explosively to wind, while Model 8 (Timber Litter) is slower and more consistent.
Slope (%): Fire spreads faster uphill because the flames angle closer to the unburned fuel, pre-heating it. Steep slopes can dramatically increase the spread rate even without wind.
Midflame Wind Speed: Wind provides oxygen and tilts the flame forward. Note that this calculator asks for "Midflame" wind speed, which is the wind acting directly on the fire, usually lower than the 20-foot general wind speed forecast.
1-Hr Dead Fuel Moisture: This represents the moisture content of fine dead fuels (under 1/4 inch diameter). Lower moisture percentages (e.g., 2-5%) result in significantly higher ignition rates and spread speeds.
Interpreting the Results
The calculator outputs three distinct metrics to help visualize the fire's behavior:
Chains per Hour (ch/hr): The standard unit in forestry. One chain equals 66 feet. A fire spreading at 20 ch/hr is moving 1,320 feet every hour.
Feet per Minute (ft/min): Useful for tactical decision-making on the ground. It helps visualize how fast the fire front moves relative to walking speed (avg walking speed is ~264 ft/min on flat ground).
Flame Length: An indicator of fire intensity. Flame lengths under 4 feet can generally be attacked by hand crews. Flame lengths over 8-11 feet often require heavy equipment or aerial support.
⚠️ SAFETY DISCLAIMER: This tool provides theoretical estimates based on simplified mathematical models. Real-world fire behavior is influenced by complex local topography, spotting (embers flying ahead), atmospheric instability, and fuel continuity. Never use this calculator as the sole basis for life-safety decisions during an active wildfire incident. Always rely on official briefings and observations.