knitr::opts_chunk$set(
  echo = FALSE
)

On August 26, 2017, Hurricane Harvey made landfall along the central Texas gulf coast as a category four hurricane. The storm weakened but remained stationary in southeast Texas spawing dozens of tornadoes and dropping over 30 inches of rain in many locations with isolated amounts of over 50 inches.

Harvey was the first major hurricane to strike the Texas coast since Hurricane Rita in 2005; the first category four hurricane to make landfall since Hurricane Bret in 1999.

In early September, National Weather Service (NWS) offices in Brownsville, Corpus Christi, San Antonio, and Houston, Texas, and Lake Charles, Louisiana released preliminary data reports on Hurricane Harvey. The following data has been extracted from those reports.

library(ggrepel)
library(knitr)
library(lubridate)
library(rrricanes)
library(rrricanesdata)
library(tidyverse)
source(here::here("./R/functions.R"))
input <- knitr::current_input()
load(file = here::here("./output/rain_df.rda"))
load(file = here::here("./output/slp_df.rda"))
load(file = here::here("./output/tor_df.rda"))
# Draw a base plot
bp <- 
  al_tracking_chart(
    color = "black", 
    fill = "white", 
    size = 0.1, 
    res = 50
  ) +
  labs(x = "Lon", y = "Lat") + 
  theme(
    legend.position = "bottom", 
    legend.direction = "horizontal"
  )

Hurricane Harvey

# Group Harvey advisories into two stages
AL092017 <- 
  adv %>% 
  filter(Key == "AL092017") %>% 
  mutate(
    Group = if_else(Adv <= 11, 1, 2), 
    Class = factor(
      saffir(Wind), 
      levels = c("TD", "TS", "HU1", "HU2", "HU3", "HU4", "HU5"), 
      labels = c(
        "Tropical Depression", "Tropical Storm", "Category 1", 
        "Category 2", "Category 3", "Category 4", "Category 5"
      )
    )
  )

# Harvey advs in Gulf
AL09017_gulf <- filter(AL092017, Adv >= 12)

# Landfall
lf.AL092017 <-
  data.frame(
    "Date" = c(
      ymd_hm("2017-08-26 06:00", tz = "UTC"), 
      ymd_hm("2017-08-30 09:00", tz = "UTC")
    ), 
    "Location" = c("Copano Bay, TX", "Cameron, LA"), 
    "Lat" = c(28.08, 29.77), 
    "Lon" = c(-96.88, -93.37),
    "Wind" = c(110, 45)
  )

Advisories were initiated on Potential Tropical Cyclone Nine on the morning of August 17. Shortly thereafter, the cyclone was upgraded to a tropical storm but would not see additional strengthening as it moved into the eastern Caribbean Sea.

By the evening of August 19, Harvey had degenerated from a cyclone to a tropical wave (no closed center of circulation) and the National Hurricane Center discontinued issuing advisories on the system.

The full track of Hurricane Harvey is shown in Figure 1.

bp + 
  geom_point(data = AL092017, aes(x = Lon, y = Lat, color = Class)) + 
  geom_path(
    data = AL092017, aes(x = Lon, y = Lat, color = Class, group = Group)
  ) + 
  guides(color = guide_legend(title = NULL, nrow = 1)) + 
  scale_color_brewer(type = "qual", palette = "Set1", direction = -1) +
  # scale_color_viridis(discrete = TRUE) + 
  coord_equal(
    xlim = c(min(AL092017$Lon), max(AL092017$Lon)), 
    ylim = c(min(AL092017$Lat), max(AL092017$Lat))
  ) + 
  labs(
    title = "Hurricane Harvey - Full Track", 
    subtitle = "Harvey's track from August 17 to August 31, 2017"
  )

By midday August 23, the remnants of Harvey had regenerated back into a tropical depression while in the southern Gulf of Mexico. The NHC began reissuing advisories on the system.

Figure 2 shows the track of Hurricane Harvey after regeneration in the Gulf of Mexico. Once the cyclone redeveloped, it quickly began strengthening as it moved north and north-northwest towards the central Texas coastline. Figure 3 and Figure 5 show how the pressure and wind of Harvey changed rapidly as the storm intensified.

bp + 
  geom_point(data = AL09017_gulf, aes(x = Lon, y = Lat, color = Class)) + 
  geom_path(
    data = AL09017_gulf, aes(x = Lon, y = Lat, color = Class, group = Group)
  ) + 
  guides(color = guide_legend(title = NULL, nrow = 1)) + 
  scale_color_brewer(type = "qual", palette = "Set1", direction = -1) +
  coord_equal(
    xlim = c(min(AL09017_gulf$Lon) - 3, max(AL09017_gulf$Lon) + 3), 
    ylim = c(min(AL09017_gulf$Lat), max(AL09017_gulf$Lat))
  ) + 
  labs(
    title = "Hurricane Harvey - Gulf of Mexico", 
    subtitle = "Harvey's track from August 23 to August 31, 2017"
  )

Barometric Pressure

Barometric pressure is the lowest atmospheric pressure either estimated or recorded in the center of a tropical cyclone. Generally speaking, the lower the barometric pressure, the stronger the cyclone.

Figure 3 shows the barometric pressure observations over 6-hour intervals during the life cycle of the cyclone. The gap from August 21 to August 23 is due to the system temporarily losing cyclone characteristics in the Caribbean Sea.

AL092017 %>% 
  ggplot(aes(x = Date, y = Pressure, group = Group)) + 
  geom_line() + 
  geom_point(aes(color = Class), size = 3) + 
  guides(color = guide_legend(title = NULL, nrow = 1)) + 
  scale_color_brewer(type = "qual", palette = "Set1", direction = -1) +
  theme_bw() + 
  theme(
    legend.position = "bottom", 
    legend.box = "vertical"
  ) +
  labs(
    title = "Hurricane Harvey Pressure Profile", 
    subtitle = "Central barometric pressure observations over 6-hour intervals", 
    y = "Pressure (mb)"
  )

Figure 4 shows the lowest pressure observations as reported by the respective local NWS offices. As expected, the lowest values were recorded just north of Corpus Christi, Texas near the Rockport area where some locations reported pressure in the 940's (mb). Table 1 shows the five lowest pressure observations recorded.

bp + 
  geom_point(
    data = filter(slp_df, !is.na(Pres)) %>% 
      arrange(desc(Pres)), 
    aes(x = Lon, y = Lat, color = Pres), shape = 7) + 
  scale_color_gradientn(
    colors = terrain.colors(10), 
    breaks = c(940, 975, 1010), 
    limits = c(940, 1010)
  ) + 
  coord_equal(
    xlim = c(min(slp_df$Lon, na.rm = TRUE), 
             max(slp_df$Lon, na.rm = TRUE)), 
    ylim = c(min(slp_df$Lat, na.rm = TRUE), 
             max(slp_df$Lat, na.rm = TRUE))
  ) + 
  labs(
    title = "Sea Level Pressure - Hurricane Harvey", 
    subtitle = "Lowest observed barometric pressure observations during Hurricane Harvey."
  )

The minimum pressure observed was 941.8mb at RCPT in Rockport, TX. Official landfall occurred at 06:00 UTC on the morning of August 26, 2017; 2 1/2 hours after the RCPT observation. This is approximately the same reported minimum central pressure listed by the National Hurricane Center (NHC) in Public Advisory 23A which suggests pressure values may have been lower as the storm made passed over the station.

slp_df %>% 
  top_n(-5L, Pres) %>% 
  select(-c(Wind:GustRmks)) %>% 
  arrange(Pres) %>% 
  kable(caption = "Five lowest pressure observations (mb).")

The "I" in PresRmks denotes the observation is incomplete.

Many stations lost equipment during the height of the storm, leading to many incomplete data observations (at least 70).

Wind

Figure 5 shows the quick increase in wind during Harvey's track over the Gulf of Mexico. It strengthened from a tropical depression to a category four hurricane in 60 hours; not record-breaking but quite impressive nonetheless.

AL092017 %>% 
  ggplot(aes(x = Date, y = Wind)) + 
  geom_line(aes(group = Group)) + 
  geom_point(aes(color = Class), size = 3) + 
  guides(color = guide_legend(title = NULL, nrow = 1)) + 
  scale_color_brewer(type = "qual", palette = "Set1", direction = -1) +
  theme_bw() + 
  theme(
    legend.position = "bottom", 
    legend.box = "vertical"
  ) +
  labs(
    title = "Hurricane Harvey Wind Profile", 
    subtitle = "Maximum sustained wind speeds over 6-hour intervals",
    y = "Wind (kts)"
  )

Figure 6 shows the plot of all maximum wind values during Hurricane Harvey. As with barometric pressure, the highest wind values were recorded where Harvey made landfall but drop significantly at nearby locations.

bp + 
  geom_point(data = filter(slp_df, !is.na(Wind)) %>% arrange(Wind), 
             aes(x = Lon, y = Lat, color = Wind), shape = 9) + 
  scale_color_gradientn(colors = rev(terrain.colors(10))) + 
  coord_equal(xlim = c(min(slp_df$Lon, na.rm = TRUE), 
                       max(slp_df$Lon, na.rm = TRUE)), 
              ylim = c(min(slp_df$Lat, na.rm = TRUE), 
                       max(slp_df$Lat, na.rm = TRUE))) + 
  labs(title = "Hurricane Harvey Maximum Wind Observations", 
       subtitle = "Highest wind observations during Hurricane Harvey.")

The highest wind value was recorded at ANPT2 several hours prior to the center of the hurricane moving ashore. NWS CRP (Corpus Christi) reports,

ANPT2 SENTINEL STOPPED REPORTING AND MAY NOT HAVE RECORDED MAXIMUM EVENT VALUES

slp_df %>% 
  top_n(5L, Wind) %>% 
  select(ID, Station, Lat, Lon, Wind, WindDT) %>% 
  arrange(desc(Wind)) %>% 
  kable(caption = "Five highest wind observations (kts).")

In addition to ANPT2, RCPT2 (Rockport), MAXT2, RTAT2, MIST2 and MIRT2 all failed prior to the peak of the hurricane. XWLD failed when the pier housing the sensor was swept away.

slp_df %>% 
  select(-c(Pres:PresRmks, Gust:GustRmks)) %>% 
  filter(!is.na(Wind),
         ID %in% c("RCPT2", "RTAT2", "ANPT2", "XWLD", "MAXT2", "MIST2", 
                   "MIRT2")) %>% 
  arrange(desc(Wind)) %>% 
  kable(caption = "Select Wind observations.")

Rain

The story of Hurricane Harvey will always center around the significant flooding that took place as the hurricane weakened and stalled in southeast Texas. Harvey dropped record rainfall amounts across broad areas of southeast Texas turning highways into rivers and neighborhoods into lakes.

bp + 
  geom_point(data = filter(rain_df, !is.na(Rain)) %>% arrange(Rain), 
             aes(x = Lon, y = Lat, color = Rain), shape = 2) + 
  scale_color_gradientn(colors = rev(terrain.colors(10))) + 
  coord_equal(xlim = c(min(slp_df$Lon, na.rm = TRUE), 
                       max(slp_df$Lon, na.rm = TRUE)), 
              ylim = c(min(slp_df$Lat, na.rm = TRUE), 
                       max(slp_df$Lat, na.rm = TRUE))) + 
  labs(title = "Hurricane Harvey Rainfall Observations", 
       subtitle = "Maximum recorded rainfall, in inches, during Hurricane Harvey.")

Though the news focus of the flooding was centered in the Houston area (Harris County), the largest rainfall amounts were recorded in Chambers, Brazoria, Liberty and Jefferson counties.

rain_df %>% 
  top_n(5L, Rain) %>% 
  arrange(desc(Rain)) %>% 
  select(-RainRmks) %>% 
  kable(caption = "Top 5 Rainfall Amounts")

The text reports contain a Section D for Inland Flooding. Unfortunately at this time only the San Antonion/Austin NWS office have provided more info; generally river flooding and low water crossings.

Tornadoes

There are 24 tornado observations for Hurricane Harvey. However, some observations may be for the same tornado. For example, there are two observations for a tornado in Fort Bend county with the same Lat, Lat and Date value; only Details is different.

tor_df$Scale <- factor(tor_df$Scale, 
                       levels = c("EF0", "EF1", "EF2", "EF3", "EF4", "EF5"), 
                       labels = c("EF0", "EF1", "EF2", "EF3", "EF4", "EF5"))

bp + 
  geom_point(data = filter(tor_df, !is.na(Scale)), 
             aes(x = Lon, y = Lat, color = Scale, fill = Scale), shape = 25) + 
  coord_equal(xlim = c(min(tor_df$Lon, na.rm = TRUE), 
                       max(tor_df$Lon, na.rm = TRUE)), 
              ylim = c(min(tor_df$Lat, na.rm = TRUE), 
                       max(tor_df$Lat, na.rm = TRUE))) + 
  labs(title = "Hurricane Harvey Tornado Reports", 
       subtitle = "Confirmed tornado touchdowns generated from Hurricane Harvey.")

Table 5 shows all tornado observations during the event from each of the NWS offices. Table Six identifies wind range values for Scale.

tor_df %>% 
  kable(caption = "Tornado Remarks, Hurricane Harvey")
efs <- data.frame("Scale" = c("EF0", "EF1", "EF2", "EF3", "EF4", "EF5"), 
                  "WindMPH" = c("65-85", "86-110", "111-135", "136-165", 
                                "166-200", ">200"), 
                  "WindKTS" = c("55-74", "75-96", "97-117", "118-143", 
                                "144-174", ">175"))

kable(efs, caption = "Enhanced Fujita Scale")




timtrice/hurricane_harvey_prelims documentation built on July 1, 2019, 12:23 a.m.