Monday, August 24, 2015

Wildland fire and air quality data sources

In this post I will outline some of the resources I use when I am trying to understand the wildfires and resulting air quality impacts in my area. My hope is that this post be a one stop shop of resources for people concerned about wildfires.

The first thing I want to know is where fires are located. There are two means of obtaining fire locations. 1) Automated satellite based detection tools. 2) Human generated reports of fire locations. The weakness of the first is that satellites generally only detect large fires and have resolution limits that can limit the utility of the perimeter information provided. The weakness of the later is humans only detect fires where there are humans. The upshot of this is that these are often the fires we who recreate or own homes in the wildland urban interface (WUI) care most about.

First look, USGS wildfire GeoMAC mapping tool: Provides near real time fire perimeter data using both satellite and from incident intelligence sources. The interface has active fire, past fire, and fire boundary data layers that can be displayed on satellite imagery or topographic maps. Fire incidents can be clicked on to get basic information like name of fire and area burned. The map is easy enough to use but behaves differently than Google Maps (for some reason?) so there is a bit of a learning curve for most users. 

Incident Information System:
After I have identified the fires that are of interest to me I usually head over to http://inciweb.nwcg.gov/ for more detailed information. In the top right corner of the homepage, there is an incident scroll down menu. Scroll down and select the fire you want to learn more about.
If you are monitoring a fire that may pose a risk to you or your property this is probably the most valuable website to keep an eye on. Inciweb provides road closure and evacuation notices, evacuation shelter locations, projected fire activity, planned actions by fire agencies, and up to date fire perimeter .kml files (for viewing in Google Earth). This information is updated regularly for large fires. Unfortunately information for small fires can be slow to update or not available (but lets just remember that these agencies have limited resources).
Table 1: Example of Basic Information summary table provided by inciweb for the Wolverine Fire in Washington State. Screen shot from Monday 8/14/2015.   


Air quality alerts:
To find out if an air quality alert is in affect in your area go to weather.gov. The homepage will show a map of the US and current alerts issued by county. 

From the map you will be able to see if any significant weather or air quality alerts are in affect where you live. You can either click on your county on the map or enter your city and state in the search bar on the left side of the page (recommended). If there is an air quality alert where you live there will be a special alert bar at the top of the page after you enter your city and state. 

The alert bar will look like this. 

Click on the link for detailed information about air quality and recommended precautionary actions. If you prefer looking at more user friendly websites or a smartphone application that provides this information wunderground.com and their associated applications posts alerts made by the National Weather Service. Many popular smart phone applications (looking at you iphone default "weather" app) do not provide this information. So if the weather application you use does not show you an air quality alert that does not mean there isn't one! 

Past and real time air quality monitoring data:

Sometimes smoke can affect air quality and have adverse health affects before the Weather Service issues a warning (or any mention of smoke) in the standard forecast webpage. Because of this shortfall I like to check a new air quality monitoring system available from the US Forest Service AirFire team. http://smoke.airfire.org/monitoring/#/ allows easy access to particulate matter (smoke particle concentrations) monitoring data near you. Simply click on a monitor nearest you and select the "Use AQI Colors" to put the concentrations into context.

Example of output from the AirFire monitoring display system.  Screen shot taken 8/24/2015.


Washington State University Smoke Forecast:
WSU provides daily smoke forecasts for ID, OR, and WA. This is a remarkable achievement given the complexity of each step involved in trying to make a smoke forecast. Below is a simplified list of what needs to be done to produce a smoke forecast.

  1. Fuel data. Trees, grass, shrubs, and different species of each emit different gasses and particles when burnt. In order to have an idea of what is put into the air when an area of land burns you need to know what burned and what type of emissions the fuel produces.
  2. Fire data. Once you know the amount and composition of the smoke a given acre of land will produce when it is burned you need to know what is actually burning. To get at an amount of smoke in the air you multiply burn area by the expected emissions for a given acre of land.
  3. Computer simulations. At this point we have a good idea of what gasses and particles will be emitted by a given fire. The pathway of that smoke is predicted using high resolution weather forecasts. The evolution of the particles and gasses within a smoke plume are computed using a model that accounts for the chemical and physical processes within a smoke plume. 



Combining these steps using state of the science technology enables the prediction of smoke concentrations. The WSU AIRPACT system uses the UW high resolution WRF weather model combined with the EPA Community Model for Air Quality (CMAQ) to predict the concentration of particles (number/volume) with a diameter less than 2.5 microns (referred to as PM2.5). The system is still under development but is currently working remarkable well. 
Sample of the smoke forecast visible product available from WSU. 


NASA MODIS visible satellite imagery: 

MODIS is a polar orbiting (orbits Earth generally passing near the poles) NASA satellite that provides daily images of the US lower 48. This resource provides an appreciation for the spatial scope smoke from fires can have. Air quality analysis use these images to assist them in deciding where to issue air quality warnings. The images are also stunning.

Visible image taken by NASA MODIS satellite on 8/24/2015. Areas of grey in the Northwest and extending along the Rocky Mountains through Colorado are from wildfire smoke. 


NOAA Hazard Mapping System Fire and Smoke Product
  • Fire location analysis available in jpeg kml. 
  • Good resource to find nice satellite loops for visible geostationary and polar orbiting imagery.






Wednesday, May 6, 2015

Humans vs. climate change. What starts more fires?

The EPA is interested in quantifying what future particulate matter (PM) concentrations might be in the future. In the U.S. intermountain west both extreme PM events and background PM concentrations are closely linked to wildfire activity. Once you start digging through fire science or air quality literature you don't get far before someone mentions the expectation that wildfire occurrence and area will increase with climate change. This of course makes sense, as the West warms and dries it is perfectly reasonable to expect the number of wildfires to increase (and this has been shown in many studies). However, humans have a much more direct and complicated relationship with fire than warming the planet by pumping green house gasses into the atmosphere. Other major ways we interact with fires include: 1) Fighting them. Depending on where a fire is located we don't let them burn without a fight. 2) Land management including fuel reduction, logging activity, and controlled burns. 3) We start them! There are of course other ways we interact with fire and earth system but I want to focus on the third one I just mentioned. Humans start a lot of fires. How many fires? I decided to take a look at the data to start to get an idea of what the human contribution is.
fireStart
 
This clearly shows that humans do our fair share or starting fires. Smokey the Bear must be devastated. This figure includes all 50 states in the U.S. If we subset the data to include only western states it seems likely that Natural could start to close the gap with humans.
We have seen that humans start a lot of fires, more than nature does. How many acres of burned land are we responsible for?
burnAreaAttributed
 
I was hoping humans weren't going to be the leader in this category as well. These two figures combined seems to suggest that humans start a lot of fires but the fires we do start are generally small. It is also possible that a small number of fires for each start type account for a large fraction of total burned area.
Lets transition to looking at only western states. The states included in the following plots are Washington, Idaho, Nevada, Utah, California,
Montana, Oregon, Colorado, and Wyoming. First lets reproduce the two plots limited to data from these states.
fireStartWest
burnAreaAttributedWest
In the western states there are more natural causes of fires than humans. This makes sense now that we are in the more arid, mountainous part of the country, where there are far fewer people than the more densely populated eastern States. The area burned by natural fires is about double that of human started fires. What do the burn area totals look like if we look at the data on an annual basis?
acreasBurnedTimeSeries
 
Lets look at the exact same data but in cumulative form.
acreasBurnedCumulative
 
The take home message is humans are responsible four A LOT of burning. When worrying about future PM emissions from fire it seems inappropriate to focus purely on the impact of climate change. Fires started by humans should be considered low hanging fruit in any effort to reduce burn area and the (somewhat) proportional emissions that follow.

R code and data used to make plots provided below

# load libraries
library(ggplot2)
library(sp)
library(rgdal)
library(rgeos)

# Data : http://wildfire.cr.usgs.gov/firehistory/data/fh_all.zip
# metadata : http://wildfire.cr.usgs.gov/firehistory/data.html

# Download the data
localDir <- getwd()
url <- 'http://wildfire.cr.usgs.gov/firehistory/data/fh_all.zip'
file <- paste(localDir, basename(url),sep='/')
if (!file.exists(file)) {
 download.file(url, file)
 unzip(file,exdir=localDir)
}

# create a layer name for the shapefiles (text before file extension)
layerName <- "firehistory_1980_2013_allagencies"

localDir <- "firehistory_1980_2013_allagencies"
# read data into a SpatialPolygonsDataFrame object
dataProjected <- readOGR(dsn=localDir, layer=layerName)

# Could use names(data_projected@data) or just:
names(dataProjected)

# Ok lets find out what burn area can be attributed to each of the start types
# first lets show the three catigories total count
cause <- dataProjected$CAUSE
naturalMask <- cause == "Natural"
humanMask <- cause == "Human"
NAMask <- is.na(cause)
 
nNatural <- sum(naturalMask, na.rm=TRUE)
nHuman <- sum(humanMask, na.rm=TRUE)
nNA <- sum(NAMask)

png(filename="fireStart.png")
par(las=1)
height = c(nHuman,nNatural,nNA)
barplot(height,
 names.arg=c("Human","Natural","unkown"),
 col="blue")
title("Cause of wild fires in U.S. 1980 - 2013")
dev.off()


burnArea <- dataProjected$TOTALACRES
humanArea <- sum(burnArea[humanMask], na.rm=TRUE)
naturalArea <- sum(burnArea[naturalMask], na.rm=TRUE)
NAArea <- sum(burnArea[NAMask], na.rm=TRUE)

png(filename="burnAreaAttributed.png")
par(las=1)
height = c(humanArea,naturalArea,NAArea)
barplot(height,
 names.arg=c("Human","Natural","unkown"),
 col="blue")
title("Total acres burned by cause of wild fires, U.S. 1980 - 2013")
dev.off()


# TODO: Show these catigories as total by year over time


# The next natural step is to do the same thing only for a subset of states we 
# are interested in

# states of interest, we want to create a mask where dataProjected is TRUE
# for any of these states
states <- dataProjected$STATE
statesOfInterest <- c("Washington","Idaho","Nevada","Utah","California",
 "Montana","Oregon","Colorado","Wyoming")

stateMask <- rep(FALSE,length(states))
for (state in statesOfInterest){
 stateMask[state == states] <- TRUE
}


dataProjectedSubset <- dataProjected[stateMask, ]


# Ok lets find out what burn area can be attributed to each of the start types
# first lets show the three catigories total count
cause <- dataProjectedSubset$CAUSE
naturalMask <- cause == "Natural"
humanMask <- cause == "Human"
NAMask <- is.na(cause)

nNatural <- sum(naturalMask, na.rm=TRUE)
nHuman <- sum(humanMask, na.rm=TRUE)
nNA <- sum(NAMask)

png(filename="fireStartWest.png")
par(las=1)
height = c(nHuman,nNatural,nNA)
barplot(height,
 names.arg=c("Human","Natural","unkown"),
 col="blue")
title("Cause of wild fires in U.S. western states 1980 - 2013")
dev.off()


burnArea <- dataProjectedSubset$TOTALACRES
humanArea <- sum(burnArea[humanMask], na.rm=TRUE)
naturalArea <- sum(burnArea[naturalMask], na.rm=TRUE)
NAArea <- sum(burnArea[NAMask], na.rm=TRUE)

png(filename="burnAreaAttributedWest.png")
par(las=1)
height = c(humanArea,naturalArea,NAArea)
barplot(height,
 names.arg=c("Human","Natural","unkown"),
 col="blue")
title("Total acres burned by cause of wild fires")
title(line=0.5, "western states 1980 - 2013")
dev.off()

# loop through years to see how area burned can be attributed over time
endDate <- as.POSIXlt(dataProjectedSubset$OUTDATED, format="%Y/%m/%d")

naturalAreaBurned <- rep(NA, length(1980:2013))
humanAreaBurned <- rep(NA, length(1980:2013))
NAAreaBurned <- rep(NA, length(1980:2013))

# Loop through and count total area burned for each
years <- 1980:2013
for (i in 1:length(years)){
 year <- years[i]
 yearMask <- (endDate$year+1900) == year 
 
 # count the years total burn by start type
 naturalAreaBurned[i] <- sum(burnArea[naturalMask & yearMask], na.rm=TRUE)
 humanAreaBurned[i] <- sum(burnArea[humanMask & yearMask], na.rm=TRUE)
 NAAreaBurned[i] <- sum(burnArea[NAMask & yearMask], na.rm=TRUE)
}

png(filename="acreasBurnedTimeSeries.png")
par(mgp= c(3, 1, 0))
plot(years, naturalAreaBurned, col="black", pch=19,
 ylab="acres",
 xlab="Year")

lines(years, naturalAreaBurned, col="black")
points(years, humanAreaBurned, col="red", pch=19)
lines(years, humanAreaBurned, col="red")
points(years, NAAreaBurned, col="magenta")

legendText <- c("Natural", "Human", "unknown")
legend("topleft", legend=legendText,
 col=c("black","red", "magenta"),
 pch=c(19,19,1),
 cex=1.8
 )
title("Acres burned in the western states by fire cause")
dev.off()

humanAreaCumulative <- cumsum(humanAreaBurned)
naturalAreaCumulative <- cumsum(naturalAreaBurned)
NAAreaAreaCumulative <- cumsum(NAAreaBurned)

png(filename="acreasBurnedCumulative.png")
par(mgp= c(3, 1, 0))
plot(years, naturalAreaCumulative, col="black", pch=19,
 ylab="acres",
 xlab="Year")

lines(years, naturalAreaCumulative, col="black")
points(years, humanAreaCumulative, col="red", pch=19)
lines(years, humanAreaCumulative, col="red")
points(years, NAAreaAreaCumulative, col="magenta")

legendText <- c("Natural", "Human", "unknown")
legend("topleft", legend=legendText,
 col=c("black","red", "magenta"),
 pch=c(19,19,1),
 cex=1.8
)
title("Cumulative acres burned in the western states by fire cause")
dev.off()