CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-xclim

Climate indices computation package based on Xarray with extensive climate analysis capabilities

Overview
Eval results
Files

fire-weather.mddocs/

Fire Weather Indices

Complete Canadian Forest Fire Weather Index System implementation for wildfire risk assessment and forest management applications. These indices are internationally recognized standards for fire weather monitoring.

Capabilities

Core Fire Weather Components

The fundamental components of the Canadian Forest Fire Weather Index System.

def fine_fuel_moisture_code(pr, tas, hurs, sfcwind, ffmc0=85.0, **kwargs):
    """
    Fine Fuel Moisture Code (FFMC) - moisture content of litter and fine fuels.
    
    Parameters:
    - pr: xr.DataArray, daily precipitation data
    - tas: xr.DataArray, daily temperature at noon
    - hurs: xr.DataArray, daily relative humidity at noon
    - sfcwind: xr.DataArray, daily wind speed at noon
    - ffmc0: float, initial FFMC value (default 85.0)
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Fine Fuel Moisture Code values
    """

def duff_moisture_code(pr, tas, hurs, dmc0=6.0, lat=None, **kwargs):
    """
    Duff Moisture Code (DMC) - moisture content of loosely compacted organic layers.
    
    Parameters:
    - pr: xr.DataArray, daily precipitation data
    - tas: xr.DataArray, daily temperature at noon
    - hurs: xr.DataArray, daily relative humidity at noon  
    - dmc0: float, initial DMC value (default 6.0)
    - lat: xr.DataArray, latitude for day length adjustment
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Duff Moisture Code values
    """

def drought_code(pr, tas, dc0=15.0, lat=None, **kwargs):
    """
    Drought Code (DC) - moisture content of deep, compact organic layers.
    
    Parameters:
    - pr: xr.DataArray, daily precipitation data
    - tas: xr.DataArray, daily temperature at noon
    - dc0: float, initial DC value (default 15.0)
    - lat: xr.DataArray, latitude for day length adjustment
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Drought Code values
    """

Fire Behavior Indices

Fire behavior and intensity indices derived from the core moisture codes.

def initial_spread_index(ffmc, sfcwind, **kwargs):
    """
    Initial Spread Index (ISI) - rate of fire spread without wind influence.
    
    Parameters:
    - ffmc: xr.DataArray, Fine Fuel Moisture Code values
    - sfcwind: xr.DataArray, daily wind speed at noon
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Initial Spread Index values
    """

def buildup_index(dmc, dc, **kwargs):
    """
    Buildup Index (BUI) - total fuel available for combustion.
    
    Parameters:
    - dmc: xr.DataArray, Duff Moisture Code values
    - dc: xr.DataArray, Drought Code values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Buildup Index values
    """

def fire_weather_index(isi, bui, **kwargs):
    """
    Fire Weather Index (FWI) - general fire intensity index.
    
    Parameters:
    - isi: xr.DataArray, Initial Spread Index values
    - bui: xr.DataArray, Buildup Index values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Fire Weather Index values
    """

def daily_severity_rating(fwi, **kwargs):
    """
    Daily Severity Rating (DSR) - relative measure of difficulty of fire suppression.
    
    Parameters:
    - fwi: xr.DataArray, Fire Weather Index values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Daily Severity Rating values
    """

Seasonal Fire Indices

Seasonal fire weather analysis and overwinter adjustments.

def overwintering_drought_code(dc_end, precipitation_winter, **kwargs):
    """
    Overwintering Drought Code for spring fire season initialization.
    
    Parameters:
    - dc_end: xr.DataArray, DC value at end of previous fire season
    - precipitation_winter: xr.DataArray, total winter precipitation
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Spring DC initialization values
    """

def fire_season(tas, method="wf93", **kwargs):
    """
    Determine fire season start and end dates.
    
    Parameters:
    - tas: xr.DataArray, daily temperature data
    - method: str, method for season determination ("wf93", "las08")
    - **kwargs: additional parameters
    
    Returns:
    xr.Dataset: Fire season start and end dates
    """

def fire_season_length(tas, method="wf93", freq="YS", **kwargs):
    """
    Calculate fire season length.
    
    Parameters:
    - tas: xr.DataArray, daily temperature data
    - method: str, method for season determination
    - freq: str, resampling frequency
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: Fire season length in days
    """

Fire Danger Classes

Classification of fire danger levels based on FWI system components.

def fire_danger_class(fwi, **kwargs):
    """
    Classify fire danger level based on FWI values.
    
    Parameters:
    - fwi: xr.DataArray, Fire Weather Index values
    - **kwargs: additional classification parameters
    
    Returns:
    xr.DataArray: Fire danger class (1=Low, 2=Moderate, 3=High, 4=Very High, 5=Extreme)
    """

def ffmc_danger_class(ffmc, **kwargs):
    """
    Classify fine fuel moisture danger level.
    
    Parameters:
    - ffmc: xr.DataArray, Fine Fuel Moisture Code values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: FFMC danger class
    """

def dmc_danger_class(dmc, **kwargs):
    """
    Classify duff moisture danger level.
    
    Parameters:
    - dmc: xr.DataArray, Duff Moisture Code values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: DMC danger class
    """

def dc_danger_class(dc, **kwargs):
    """
    Classify drought danger level.
    
    Parameters:
    - dc: xr.DataArray, Drought Code values
    - **kwargs: additional parameters
    
    Returns:
    xr.DataArray: DC danger class
    """

Usage Examples

Complete FWI System Calculation

import xarray as xr
import xclim.indices.fire as xcf

# Load weather data
ds = xr.open_dataset("weather_data.nc")
pr = ds.pr      # Daily precipitation
tas = ds.tas    # Daily temperature at noon
hurs = ds.hurs  # Daily relative humidity at noon  
sfcwind = ds.sfcwind  # Daily wind speed at noon
lat = ds.lat    # Latitude for day length correction

# Calculate moisture codes
ffmc = xcf.fine_fuel_moisture_code(pr, tas, hurs, sfcwind, ffmc0=85.0)
dmc = xcf.duff_moisture_code(pr, tas, hurs, dmc0=6.0, lat=lat)
dc = xcf.drought_code(pr, tas, dc0=15.0, lat=lat)

# Calculate fire behavior indices
isi = xcf.initial_spread_index(ffmc, sfcwind)
bui = xcf.buildup_index(dmc, dc)
fwi = xcf.fire_weather_index(isi, bui)
dsr = xcf.daily_severity_rating(fwi)

Fire Danger Classification

# Classify fire danger levels
danger_class = xcf.fire_danger_class(fwi)

# Component-specific danger levels
ffmc_class = xcf.ffmc_danger_class(ffmc)
dmc_class = xcf.dmc_danger_class(dmc)
dc_class = xcf.dc_danger_class(dc)

# Count extreme fire danger days
extreme_days = (danger_class == 5).sum(dim="time")

Seasonal Fire Analysis

# Determine fire season
fire_season_dates = xcf.fire_season(tas, method="wf93")
season_start = fire_season_dates.fire_season_start
season_end = fire_season_dates.fire_season_end

# Calculate season length
season_length = xcf.fire_season_length(tas, method="wf93", freq="YS")

# Seasonal FWI statistics (during fire season only)
seasonal_fwi_max = fwi.where(
    (fwi.time.dt.dayofyear >= season_start) & 
    (fwi.time.dt.dayofyear <= season_end)
).resample(time="YS").max()

Overwinter Adjustment

# Calculate overwinter DC adjustment for multi-year runs
winter_precip = pr.where(
    (pr.time.dt.month >= 11) | (pr.time.dt.month <= 3)
).resample(time="YS-NOV").sum()

# Get DC at end of fire season
dc_fall = dc.where(dc.time.dt.month == 10).resample(time="YS").last()

# Calculate spring DC initialization
dc_spring = xcf.overwintering_drought_code(dc_fall, winter_precip)

Fire Weather Thresholds

# High fire danger conditions
high_fwi_days = (fwi > 30).sum(dim="time")  # FWI > 30
extreme_fwi_days = (fwi > 50).sum(dim="time")  # FWI > 50

# Dry fuel conditions
dry_ffmc_days = (ffmc > 90).sum(dim="time")  # Very dry fine fuels
drought_dc_days = (dc > 600).sum(dim="time")  # Severe drought

# Combined severe conditions
severe_conditions = (
    (fwi > 30) & (ffmc > 90) & (dc > 400)
).sum(dim="time")

Install with Tessl CLI

npx tessl i tessl/pypi-xclim

docs

atmospheric-indicators.md

conversion-indicators.md

core-computation.md

ensemble-analysis.md

fire-weather.md

index.md

land-indicators.md

sea-ice-indicators.md

spatial-analogs.md

statistical-downscaling.md

statistical-indicators.md

utilities.md

tile.json