Skip to content

BalbiNov2011 rate of spread rises with live fuel moisture, at the shipped fuel values #166

Description

@HugoFara

BalbiNov2011 computes xsi = (Ml - Md)·(Sd/Sl)·(Deltah/DeltaH), the share of combustion energy spent vaporising the moisture the live fuel carries in excess of the dead fuel. For fuel 1 of tests/runff/fuels.csv, xsi crosses 1 near Ml ≈ 0.8. Past that, (1 - xsi) is negative, so flame temperature T drops below ambient — and R00 ∝ T⁴ turns that back into a positive, growing number.

Measured on dev, standard fuel, still air, flat ground, sweeping Ml with Md = 0.1:

MlROS (m/s)
0.10.0227
0.59.06e-4falling correctly
0.82.34e-8minimum
1.08.16e-5shipped default
1.50.0175rising
2.00.15967× the bone-dry rate

Soaking-wet live fuel spreads seven times faster than bone-dry live fuel.

fuels.csv ships Ml = 1.0, which is inside the broken region — so this is not an edge case reachable only by unusual inputs. It is the default.

It is isolated to this one model

I swept the whole family under identical conditions:

ModelMl=0.1Ml=1.0Ml=2.0Monotonic?
Balbi20150.022450.0042630.0001431yes
BalbiNov2011Curv0.022450.0042640.0001431yes
BalbiUnsteady0.022450.0042630.0001431yes
BalbiNov20110.022738.161e-050.1596NO — inverts
Balbi20200.014280.014280.01428does not respond to Ml
BalbiNov2011TMdMl0.022730.022730.02273does not respond to Ml
Rothermel0.029310.029310.02931does not respond to Ml

Three siblings that do respond to live moisture agree with each other to four significant figures across the whole range. BalbiNov2011 is the only one that inverts.

The difference is one coefficient.BalbiNov2011 uses Sd/Sl where Balbi2015 uses Sigmal/Sigmad — and Balbi2015 stays monotonic. That is the first thing to check against Santoni et al. (2011).

Worth a second look separately: BalbiNov2011TMdMl is named for Md/Ml yet its output does not move with Ml at all under these conditions.

Relationship to #158

That PR clamps xsi at zero, fixing the other end — dead fuel wetter than live. It deliberately does not clamp at 1, because unlike the lower clamp that would change results at the default fuel values, moving pinned rates of spread and possibly runff output. That is a physics decision, not a bug-fix decision, which is why it is here as its own issue. The numbers above are identical before and after #158.

Options: clamp xsi at 1; revisit the Sd/Sl coefficient; or establish that Ml = 1.0 is out of range for this model and validate inputs against that. Related to the closed #35 and #99.


Drafted by Claude Opus 5 from a codebase audit. Reviewed by a maintainer before filing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions