Skip to content

Add Wind-Driven Forest Fire example#312

Open
liyuezha wants to merge 3 commits intomesa:mainfrom
liyuezha:add-wind-driven-fire
Open

Add Wind-Driven Forest Fire example#312
liyuezha wants to merge 3 commits intomesa:mainfrom
liyuezha:add-wind-driven-fire

Conversation

@liyuezha
Copy link
Contributor

Summary

This PR adds a new model example: Wind-Driven Forest Fire.

Compared to forest fire model which focuses on critical thresholds, this model introduces anisotropy caused by wind. It demonstrates how to implement directional bias in grid-based models and explicitly measures the Rate of Spread (ROS) for both the fire head (downwind) and the flank (crosswind).

Motive

Modeling Anisotropy
The model implements a wind-biased ignition probability formula based on the angle between the wind vector and the neighbor direction:
$$p = p_{\text{spread}} \cdot (1 + \text{strength} \cdot \cos(\theta))$$

Implementation

Instead of just counting "burned trees," this model calculates spatial metrics:

  • Head Distance: The furthest distance the fire has traveled downwind.
  • Flank Width: The lateral width of the fire scar perpendicular to the wind.
  • ROS (Rate of Spread): Real-time calculation of the fire front's speed.

Usage Examples

strong wind

Additional Notes

@EwoutH
Copy link
Member

EwoutH commented Jan 25, 2026

Cool concept, thanks!

Instead of a complete new model, could we also add a wind argument(s) to the existing model? That can be optionally enabled?

@EwoutH
Copy link
Member

EwoutH commented Feb 12, 2026

Instead of a complete new model, could we also add a wind argument(s) to the existing model? That can be optionally enabled?

@liyuezha what do you think of this?

@liyuezha
Copy link
Contributor Author

Hi, @EwoutH

Thanks for the suggestion! I agree these features could be integrated.

For context, the original forest_fire model:

  • Randomly fills cells with trees (probability = density)
  • Sets all trees in the left column (x=0) on fire
  • Uses uniform propagation probability

The main differences in my wind demo are:

  1. Center Ignition: Fire starts from a 3×3 block in the center (instead of the left edge), which better illustrates directional wind effects
  2. Wind-weighted spread: Full grid of trees with fire spread governed by wind-influenced probabilities (rather than uniform probability)

I think these could be integrated as optional modes while keeping current behavior as default:

ignition_mode = "edge" | "center"
spread_mode = "uniform" | "wind_weighted"

Wind parameters would only be active when spread_mode="wind_weighted".

This way wind becomes an optional advanced extension. If that sounds aligned with the project's style, I'm happy to refactor accordingly!

@EwoutH
Copy link
Member

EwoutH commented Feb 12, 2026

Sounds good! It’s always great to have some options in a model to play with and see what it does.

@liyuezha liyuezha force-pushed the add-wind-driven-fire branch 4 times, most recently from 6c4b411 to e67c748 Compare February 14, 2026 20:48
@liyuezha liyuezha force-pushed the add-wind-driven-fire branch from c59acb0 to 7135dba Compare February 14, 2026 21:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants