Mapping fuel accumulation patterns¶
We've written a package named sclero
to apply fuel accumulation curves to raster data. It's organized under forestobs-new/accumulation
. To install it, navigate to that directory and run pip install -e .
The main event is the script sclero-accumulate.py
. It produces a 4-band raster file encoding current fuel loads at four vertical strata: litter
, litter + near-surface
, elevated
and bark
.
sclero-accumulate.py [-h] -o output_file [--fuel-parameters csv_file] [--max-time years] [--dont-scale]
[--density] [--from-formations] [--classes raster] [--fcover raster] [--time-since-fire raster]
[--ladderfuels raster] [--canopycover raster] [--res xres yres] [--bounds xmin ymin xmax ymax]
[--crs projection] [--dstnodata nodata_val] [--dtype data_type]
Computes current fuel loads (tons) using data on vegetation type, cover, and time since fire.
optional arguments:
-h, --help show this help message and exit
-o output_file Output file path
--fuel-parameters csv_file
CSV file with fuel accumulation curve parameters
--max-time years Time since fire value to assign to unburned locations
--dont-scale Don't apply cover-based fuel accumulation scaling
--density Calculate tons/ha instead of absolute fuel load per
pixel
--from-formations Use formation-based accumulation curves. Make sure
--classes is pointing to a formations raster
--classes raster Path to the class or formation raster (1-band categorical)
--fcover raster Path to the fractional cover raster (3+band 0-100
continuous)
--time-since-fire raster
Path to the time-since-fire raster (1-band days-since-
last-fire)
--ladderfuels raster Path to the ladder fuels raster for scaling elevated
fuels (1-band continuous)
--canopycover raster Path to the canopy cover raster for scaling bark fuels
(1-band continuous)
--res xres yres Output resolution
--bounds xmin ymin xmax ymax
Output bounding extent
--crs projection Output coordinate reference system
--dstnodata nodata_val
Output nodata value
--dtype data_type Output numpy data type
File paths¶
This script reads fuel accumulation curve parameters, stored in sclero/config/accumulation-params.csv
, and applies them to maps of vegetation classes and fire history.
GCS paths to a series of default rasters are specified in the sclero
config, but these can be specified at runtime with --class-path
, --fcover-path
, and --time-since-fire-path
.
Configuring the output extent¶
You can specify a series of output raster configurations like the resolution, extent, projection, nodata value & data type.
It may be helpful to only apply the model in a specific area instead of across the full pilot extent, and you'd do this by configuring the --bounds {xmin} {ymin} {xmax} {ymax}
option.
Scaling by vegetation density¶
Accumulation curves are parameterized on a class-by-class basis, so applying them to categorical raster data produces blocky, uniform outputs.
The geographic distributions of fuel loads are typically much more heterogeneous than this method can estimate, however, so we developed a simple method to scale the default fuel density outputs based on vegetation density. We make the following assumptions:
- Fuel accumulation curves were parameterized with samples from representative field plots in different vegetation formations and classes. These were designed to represent the average conditions for each class.
- Average != uniform, however, and there is spatial variation in how fuel is spatially distributed across the landscape.
- Fuel accumulates faster in areas with higher-than-average vegetation cover, and slower in areas with lower-than-average cover.
Our method uses average values of vegetation cover—calculated separately for each class—to tune estimates of fuel density numbers based on the local vegetation density. We do this with our fractional cover raster, which you can specify with --fcover-path {path-to-new-dataset}
.
This method adds more spatial texture to the output fuel maps while preserving the landscape-scale fuel densities. It can be turned off at runtime with --dont-scale
.
Scaling by area¶
Accumulation models report fuel density in tons/hectare
. Since we map things like vegetation cover at scales finer than 1 hectare, we need to be able to rescale the units of our data based on the size of our pixels.
sclero-accumulate.py
converts data from tons/hectare
to tons
based on the resolution of the output file. So the value encoded in each pixel is the total mass of fuel in that pixel.
If you resample these data, however, make sure you do so with sum
resampling. This will aggregate the total fuel loads to the new resolution, which is critical for preserving the per-pixel unit allocation.
Using formations-based accumulation curves¶
The default script behavior is to assume the --classes
raster uses a fuel class map (which includes ~120 distinct classes.) You can instead set --from-formations
to average the fuel accumulation parameters from all subclasses within a formation, and apply those fuel curves instead (there are ~17 total formations).
You'll also need to pass the path to the formations raster using --classes {path_to_raster}
. By default, if the --from-formations
flag is set and--classes
is still the default value (as in, not specified by the user), it will automatically use the default formation raster path. The default paths for these datasets are defined in sclero/config/__init__.py
.