Fire Acceleration at Startup (Phase 12)
Physical Background
Small fires do not immediately achieve their quasi-steady-state (QSS) rate of spread due to energy and momentum limitations. The startup acceleration period depends on fire size, wind conditions, and fuel type; accurate representation of startup behavior is critical for predictions of early spread extent and spotfire timing. This module implements two optional models to scale the rate of spread during the acceleration phase until the fire reaches equilibrium.
Size-Based Model
The size-based model is the simpler option, appropriate when only the current fire extent is needed as a predictor. It scales the rate of spread by a factor that depends on the current burned area:
where:
\(r_{\text{fire}} = \sqrt{A_{\text{fire}} / \pi}\) is the effective fire radius derived from burned area [m]
\(A_{\text{fire}}\) is the total burned area [m²]
\(L_{\text{acc}}\) is the acceleration length scale [m] (ParmParse key:
erf.fire.accel.L_acc)\(R_{\text{QSS}}\) is the quasi-steady-state ROS from the active spread model [m/s]
When \(r_{\text{fire}} \gg L_{\text{acc}}\), \(\alpha \to 1\) and the full ROS is used without modification.
References:
Rothermel, R.C. (1983). How to predict the spread and intensity of forest and range fires. USDA Forest Service General Technical Report INT-143.
Catchpole, E.A., de Mestre, N.J. & Gill, A.M. (1992). Intensity of fire at its perimeter. Australian Journal of Ecology, 17(1), 1–4.
Temporal Model
The temporal model uses the acceleration equation of McAlpine and Wakimoto (1991):
where:
\(t\) is the elapsed time [s], whose meaning is set by the clock below
\(A\) is the acceleration constant [min⁻¹], converted to [s⁻¹] internally
\(R_E\) is the equilibrium ROS from the active spread model [m/s]
The acceleration constant is selected based on fire perimeter length:
\(A = A_{\text{point}}\) when perimeter length < \(L_{\text{perim}}\) (point ignition)
\(A = A_{\text{line}}\) when perimeter length ≥ \(L_{\text{perim}}\) (line fire)
The perimeter is the number of burned cells with an unburned 4-neighbour over the whole fire grid (across box and rank boundaries, and across a periodic seam), times the cell diagonal. Alexander et al. (1992) calibrated values are \(A_{\text{point}} = 0.115\ \text{min}^{-1}\) and \(A_{\text{line}} = 0.886\ \text{min}^{-1}\).
The equation describes a fire growing from its ignition, so \(t\) belongs to the fire, not to whichever cell happens to be burning. From a point ignition at a steady \(R_E\), the head of a fire that carries its ignition clock covers
of the distance it would cover without acceleration. erf.fire.accel.clock selects how \(t\) is kept.
Front clock
With erf.fire.accel.clock = "front", \(t\) is the time since ignition, carried with the front. Each cell holds the progress \(s = \int A\, dt\) of the fire that burned it (\(A t\) while \(A\) is constant):
a burned cell advances its own \(s\) by \(A \Delta t\);
an unburned cell within \(n = 2 + \lceil R_{E,\max} \Delta t / \Delta x \rceil\) cells of the burned region takes the largest \(s\) of its burned, or already reached, neighbours. This covers the cells the front can reach within the step plus the neighbours the propagation stencils read. A cell the front burns therefore continues the clock of the cells that ignited it;
a cell further out holds \(s = 0\). An ignition there (a spot landing, a scheduled, polygon or threshold ignition) starts a clock of its own; one inside the band joins the fire beside it;
a change of \(R_E\), in time or from cell to cell, leaves \(s\) alone, and the rate follows \(R_E\) at once;
when \(A\) switches from \(A_{\text{point}}\) to \(A_{\text{line}}\), \(s\), and so the rate, is continuous.
The rate written to fire_ros in the burned cells and the band is \(R_E\) times the mean of \(1 - e^{-s}\) over the step,
so a front at constant \(R_E\) covers exactly \(R_E \left(t - (1 - e^{-A t})/A\right)\) whatever the step. Cells beyond the band take the largest \(s\) of any burned cell, so the level set away from the front translates with it. Before any cell has burned the rate is zero.
The factor reaches every path. The FARSITE update and the isotropic and ellipse level-set paths read fire_ros. The directional, hybrid and Balbi level-set paths multiply the rate they rebuild in every Runge-Kutta stage by it. The crown-fire rate of the Cruz and Van Wagner proxy models takes it too; Rothermel (1991) scales the surface rate, which already carries it.
FARSITE restarts the acceleration of a perimeter vertex from its current rate when the vertex’s equilibrium rate rises (Finney 1998). The front clock does not, because ERF’s equilibrium rate changes at every step under two-way coupling or a resolved turbulent wind. For a fully accelerated fire with white step-to-step noise on \(R_E\) (\(\Delta t\) = 0.213 s), continuing from the current rate on every rise and dropping at once on every fall holds the mean rate at 0.997, 0.97 and 0.85 of the mean \(R_E\) for 0.1 %, 1 % and 5 % noise with \(A_{\text{point}}\) (0.998, 0.98 and 0.89 with \(A_{\text{line}}\)). The fire would run towards the lower edge of its own noise.
Legacy clock
With erf.fire.accel.clock = "legacy" (the default), each cell keeps its own clock. The clock starts when the cell burns and restarts whenever the cell’s equilibrium rate changes by more than \(10^{-6}\) of the larger of its new and previous values (or of 1 m/s); only burned cells are written. Consequences:
A cell starts again from \(R = 0\) when it burns, and unburned cells keep \(R_E\). The FARSITE
front_cellupdate takes the larger of a front cell’s own rate and its burned neighbours’, and the legacy FARSITE update also advances the first unburned row, so neither head is slowed.The directional, hybrid and Balbi level-set paths never read
fire_rosand spread as if acceleration were off.On the isotropic level set, the newly burned side restarts while the unburned side runs at \(R_E\). A planar front from a line of burned cells lagged the curve by 11 % after 100 s (35.8 m for 40.1 m, unit test
FireAcceleration.LevelSetFrontCoversTheAcceleratedDistance).When \(R_E\) changes at every step, burned cells run at about \(A \Delta t\, R_E\) (0.0004 \(R_E\) with \(A_{\text{point}}\) at \(\Delta t\) = 0.213 s).
It is kept to reproduce results from before 2026-09, and it is the only clock the wind lag below works with.
Measured
Exec/RegTests/FireAccelerationClock burns a 50 m disc of short grass in a uniform 3 m/s wind with \(A\) = 1 min⁻¹. It measures each head against the same path without acceleration, the FARSITE path on its default front_cell update. The table gives the share of the unaccelerated advance covered by time \(t\):
t [s] |
\(S(t)\) |
FARSITE, legacy |
FARSITE, front |
level set, legacy |
level set, front |
|---|---|---|---|---|---|
120 |
0.568 |
1.000 |
0.569 |
1.000 |
0.621 |
240 |
0.755 |
1.000 |
0.755 |
1.000 |
0.795 |
600 |
0.900 |
1.000 |
0.897 |
1.000 |
0.909 |
On the legacy FARSITE update the front clock gives 0.599, 0.797 and 0.907, and the legacy clock 1.039, 1.017 and 1.000.
Wind-Lag Sub-Section
With the legacy clock, when erf.fire.accel.enable_wind_lag = true and the equilibrium rate increases, the target equilibrium ROS is not updated instantaneously. It approaches the new equilibrium with time constant \(\tau_{\text{wind}}\) [s]:
Wind decreases are applied immediately (no lag). The lag restarts the cell’s clock on every rise, and the front clock follows \(R_E\) at once instead, so the run aborts at start-up when enable_wind_lag is combined with clock = "front".
References:
McAlpine, R.S. & Wakimoto, R.H. (1991). The acceleration of fire from point source to equilibrium spread. Forest Science, 37(5), 1314–1337.
Alexander, M.E., Stocks, B.J. & Lawson, B.D. (1992). Fire behavior in Black Spruce-lichen woodland. Information Report NOR-X-310. Canadian Forest Service.
Finney, M.A. (1998/2004). FARSITE: Fire Area Simulator — Model Development and Evaluation. USDA Forest Service Research Paper RMRS-RP-4.
Input Parameters
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
bool |
false |
Master on/off switch; when false, acceleration is disabled |
|
bool |
false |
false = size-based model, true = temporal model |
|
Real [m] |
50.0 |
Size-based: acceleration length scale [m] |
|
Real [1/min] |
0.115 |
Temporal: acceleration constant for point ignitions [1/min] |
|
Real [1/min] |
0.886 |
Temporal: acceleration constant for line ignitions [1/min] |
|
Real [m] |
500.0 |
Temporal: perimeter length threshold [m] for switching from A_point to A_line |
|
string |
“legacy” |
Temporal: “legacy” a clock per burned cell, written to burned cells only; “front” the time since ignition, carried with the front and applied to the rate that moves it |
|
bool |
false |
Temporal, legacy clock only: apply exponential lag on wind speed increases |
|
Real [s] |
60.0 |
Temporal: wind-lag time constant [s] |
Usage Example
Size-based model (simpler, uses fire area only):
erf.fire.accel.enable = true
erf.fire.accel.use_temporal = false
erf.fire.accel.L_acc = 100.0
Temporal model with the clock carried by the front:
erf.fire.accel.enable = true
erf.fire.accel.use_temporal = true
erf.fire.accel.clock = "front"
erf.fire.accel.A_point = 0.115
erf.fire.accel.A_line = 0.886
erf.fire.accel.perim_limit = 500.0
Limitations
Both models are disabled by default (
accel.enable = false); enabling has zero runtime cost when disabled.The size-based model uses a single global scaling factor; cells near the fire centre and cells at the expanding perimeter receive the same alpha.
The acceleration constant is one value for the whole domain, switched by the total burned perimeter.
Front clock: an ignition within the band of an existing fire (a few cells) joins that fire’s clock instead of starting its own.
fire_rosholds the accelerated rate, zero everywhere before the first cell burns.Legacy clock: the clock restarts whenever the equilibrium ROS changes by more than a threshold (relative threshold: 1.0e-6 times the maximum of the new and previous ROS values, or of 1 m/s); this threshold applies to both wind changes and fuel changes. The wind-lag model applies only to wind speed increases; wind decreases update the target ROS immediately.
The temporal model requires allocating a 3-component per-cell
fire_accel_stateMultiFab, checkpointed asFireAccelState: the accelerated rate, the elapsed time (legacy) or progress \(A t\) (front), and the equilibrium rate (legacy) or the factor applied (front). A restart must use the clock the checkpoint was written with. The size-based model does not allocate any additional storage.Neither model adjusts the fire perimeter shape — only the magnitude of ROS is scaled.
References
Rothermel, R.C. (1983). How to predict the spread and intensity of forest and range fires. USDA Forest Service General Technical Report INT-143.
Catchpole, E.A., de Mestre, N.J. & Gill, A.M. (1992). Intensity of fire at its perimeter. Australian Journal of Ecology, 17(1), 1–4.
McAlpine, R.S. & Wakimoto, R.H. (1991). The acceleration of fire from point source to equilibrium spread. Forest Science, 37(5), 1314–1337.
Alexander, M.E., Stocks, B.J. & Lawson, B.D. (1992). Fire behavior in Black Spruce-lichen woodland. Information Report NOR-X-310. Canadian Forest Service.
Finney, M.A. (1998/2004). FARSITE: Fire Area Simulator — Model Development and Evaluation. USDA Forest Service Research Paper RMRS-RP-4.