Skip to content

Reframe ensembles as burn probability #172

Description

@HugoFara

Already in tools/TODO.md:10 as "a vector of fireDomains in session to perform ensembles", with the free-threading work as the enabling piece. What needs pushing is the framing.

The deliverable is not "run 500 simulations". It is one burn-probability map. A single deterministic run is operationally close to useless, because the wind forecast that dominates the answer is itself uncertain. Civil protection, insurance and catastrophe modelling, land managers — all need probability of burn, not a line on a map.

It also answers a credibility problem the repository already has

tests/runff/params.ff:6, and again in run.ff and rungeojson.ff:

setParameter[propagationSpeedAdjustmentFactor=0.6]
setParameter[windReductionFactor=0.4]

Two hand-tuned scalars applied multiplicatively to the rate of spread, chosen for Corsica, with no guidance for anywhere else. Every serious user eventually discovers their results hinge on them.

tools/TODO.md:17 already names the fix — "perform a reanalysis on several wildfires in europe, calibrate adjustment speeds with it" — and an ensemble framework is what makes that tractable: calibration is a search over exactly these parameters, scored against observed perimeters. That converts a liability into a citable dataset.

It also changes what to optimise. If the output is a probability map, per-run latency matters much less than throughput across runs, which makes thread-level parallelism the right investment and MPI largely irrelevant here — worth stating, since the positioning currently leads with HPC scaling.

Current state: greenfield. grep for vector<FireDomain or ensemble in src/ returns nothing.

Prerequisites, all already filed

Individually minor, collectively enough to make an ensemble driver unbuildable.

Suggested first step

Well short of the full framework: a Python driver that runs N simulations over sampled wind and the two adjustment factors, accumulates arrival-time rasters into a burn-probability grid, and writes it out. No C++ change, works today through pyforefire, and demonstrates the output format before anyone commits to a multi-domain session API.


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

EDIT: rewrote for human readability.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions