Santoni2011
Description
The Santoni wildfire spread model, presented by Santoni et al. in 2011 [1], is a physics-based approach developed to simulate wildfire dynamics in Mediterranean shrubland and forest fuels. The model distinguishes between dead and live fuels, a feature uncommon in typical rate of spread models, and integrates fundamental heat transfer mechanisms, such as radiation, to describe flame geometry, fuel consumption, and fire front propagation. By explicitly accounting for these physical processes, the Santoni model reliably predicts fire behavior in heterogeneous vegetation scenarios. The FireBench implementation follows [2].
Parameters
Input table
Variable name in model |
Unit |
Standard Variable Name |
type |
Bounds |
|---|---|---|---|---|
dead_fuel_ratio |
- |
fuel_load_dead_ratio |
float64 |
$\(]0, 1]\)$ |
fuel_dens_dead |
kg m-3 |
fuel_density_dead |
float64 |
$\(]0, \infty[\)$ |
fueldens_live |
kg m-3 |
fuel_density_live |
float64 |
$\(]0, \infty[\)$ |
fueldepth |
m |
fuel_height |
float64 |
$\(]0, \infty[\)$ |
fuel_load_dry_total |
kg m-2 |
fuel_load_dry_total |
float64 |
$\(]0, \infty[\)$ |
fmc_dead |
% |
fuel_moisture_content_dead |
float64 |
$\([0, 200]\)$ |
fmc_live |
% |
fuel_moisture_content_live |
float64 |
$\([0, 500]\)$ |
savr_dead |
m-1 |
fuel_surface_area_volume_ratio_dead |
float64 |
$\(]0, \infty[\)$ |
savr_live |
m-1 |
fuel_surface_area_volume_ratio_live |
float64 |
$\(]0, \infty[\)$ |
slope |
deg |
slope_angle |
float64 |
$\(]-90, 90[\)$ |
wind |
- |
wind_speed |
float64 |
$\(]-\infty, \infty[\)$ |
Outputs
Variable name in model |
Unit |
Standard Variable Name |
type |
Bounds |
|---|---|---|---|---|
ros |
m s-1 |
rate_of_spread |
float64 |
$\([0, 6]\)$ |
Optional input table
Name in model |
Standard Variable Name |
Unit |
Value |
|---|---|---|---|
dens_air |
air_density |
kg m-3 |
$\(1.125\)$ |
temp_air |
air_temperature |
K |
$\(300\)$ |
temp_ign |
fuel_temperature_ignition |
K |
$\(600\)$ |
Internal parameters
Name in model |
Description |
Unit |
Value |
|---|---|---|---|
base_LAI |
Base leaf area index |
- |
$\(4\)$ |
boltz |
Stefan-Boltzman constant |
W m-2 K-4 |
$\(5.670373 \cdot 10^{-8}\)$ |
chi0 |
Radiative factor |
- |
$\(0.3\)$ |
Cp |
Specific heat of fuel |
J kg-1 K-1 |
$\(1200\)$ |
Cpa |
Specific heat of air |
J kg-1 K-1 |
$\(1150\)$ |
delta_h |
Heat of latent evaporation |
J kg-1 |
$\(2.3 \cdot 10^6\)$ |
delta_H |
Heat of combustion |
J kg-1 |
$\(1.7433 \cdot 10^7\)$ |
r00 |
Model parameter |
$\(2.5 \cdot 10^{-5}\)$ |
|
stoich_coeff |
Stoichiometric coefficient |
- |
$\(8.3\)$ |
tau0 |
Anderson’s residence time coefficient |
s m-1 |
$\(75591\)$ |
Usage
General use
The Santoni_2011 model is a class derived from firebench.ros_models.RateOfSpreadModel.
# Import rate of spread package from firebench
import firebench.ros_models as rm
# create the input dictionnary with the inputs listed above
model_inputs = {...}
# compute the rate of spread
ros = rm.Santoni_2011.compute_ros(model_inputs)
# compute the rate of spread with fuel category
ros = rm.Santoni_2011.compute_ros(model_inputs, fuel_cat = 1)
Use with Anderson13 fuel model
The Anderson13 fuel model provides a set of fuel properties that can be linked to Santoni’s inputs. An example of use of Anderson fuel model with Santoni_2011:
import firebench as fb
# Define constant values as fb.Quantity (not pint.Quantity that does not share the same unit registry)
wind_speed_20ft = fb.Quantity(3.0, "m/s")
fuel_moisture_dead = fb.Quantity(12, "percent")
fuel_moisture_live = fb.Quantity(120, "percent")
slope = fb.Quantity(0, "degree")
fuel_class = 3 # one based index of the fuel class
# Select the rate of spread model class
ros_model = fb.ros_models.Santoni_2011
# Import Anderson data
fuel_data = fb.tools.import_anderson_13_fuel_model(add_complementary_fields=True)
# Use wind reduction factor from fuel model
wind_speed_midflame = fb.wind_interpolation.apply_wind_reduction_factor(
wind_speed=wind_speed_20ft,
wind_reduction_factor=fuel_data[fb.svn.FUEL_WIND_REDUCTION_FACTOR],
fuel_cat=fuel_class,
)
# assume dead and live surface area to volume ratio is the same
savr_dead = fb.tools.get_value_by_category(fuel_data[fb.svn.FUEL_SURFACE_AREA_VOLUME_RATIO], fuel_class)
savr_live = fb.tools.get_value_by_category(fuel_data[fb.svn.FUEL_SURFACE_AREA_VOLUME_RATIO], fuel_class)
# assume dead and live fuel density ratio is the same
fuel_density_dead = fb.tools.get_value_by_category(fuel_data[fb.svn.FUEL_DENSITY], fuel_class)
fuel_density_live = fb.tools.get_value_by_category(fuel_data[fb.svn.FUEL_DENSITY], fuel_class)
# Merge the fuel dict and the constant inputs
input_dict = fb.tools.merge_dictionaries(
{
fb.svn.WIND_SPEED: wind_speed_midflame,
fb.svn.FUEL_MOISTURE_CONTENT_DEAD: fuel_moisture_dead,
fb.svn.FUEL_MOISTURE_CONTENT_LIVE: fuel_moisture_live,
fb.svn.FUEL_SURFACE_AREA_VOLUME_RATIO_DEAD: savr_dead,
fb.svn.FUEL_SURFACE_AREA_VOLUME_RATIO_LIVE: savr_live,
fb.svn.FUEL_DENSITY_DEAD: fuel_density_dead,
fb.svn.FUEL_DENSITY_LIVE: fuel_density_live,
fb.svn.SLOPE_ANGLE: slope,
},
fuel_data,
)
# perform checks, conversion and magnitude extraction
final_input = fb.tools.check_data_quality_ros_model(input_dict, ros_model)
# compute the rate of spread
ros = ros_model.compute_ros_with_units(final_input, fuel_cat=fuel_class)
print(ros)
Compatibility with fire models
Compatibility levels for fuel models:
Full: The data contained in the fuel model covers all the fuel input needed by the fire model
Partial: The data contained in the fuel model covers some of the fuel input needed by the fire model
None: The data contained in the fuel model covers none of the fuel input needed by the fire model
Fire model |
Category |
Compatibility level |
|---|---|---|
Anderson13 |
Fuel model |
Full |
ScottandBurgan40 |
Fuel model |
Full |