The purpose of this article is to:
- Promote the utility of the recently published rNOMADS software package which links directly to the climate model archive maintained by NOAA.
- Demonstrate the use of rNOMADS for plotting global surface temperatures and wind-speeds.
- Show how we used rNOMADS to map the extent and track of Typoon Yolanda/Haiyan.
rNOMADS allows R users to connect directly with the National Oceanic and Atmospheric Administration's (NOAA) Operational Model Archive and Distribution System (NOMADS). It allows rapid and efficient downloading of a vast range of different types of meteorological data from both global and regional weather models. Data for the past are available in addition to data for all sorts of forecasts.
Global surface temperatures from the NOAA archives (details of actual model used) are shown in the map below for 18:00 GMT on 29th October 2014. The band of high sea surface temperatures associated with the tropics is clear. It is also interesting to note the influence of the ‘upwelling zones’ on the western coasts of the southern American and Africa continents which tend to force cold water northwards. On land the relatively cool areas associated with the Andes and the Ethiopian Plateau are also visible.
We follow up global temperatures with the map of global windspeeds at ground level below. The ‘Roaring Forties’, ‘Furious Fifties’ and ‘Screaming Sixties’ are very clearly discernible. So too the ‘Doldrums’, or areas of calm wind which hug the equator . You can also make out Cyclone Nilofar in the north Indian Ocean which was about to strike the west coast of India.
The gif animation below utilizes the same data source to summarize the path of Typhoon Haiyan/Yolanda which hit the Philippines in November 2013 causing great devastation and loss of life. The animation depicts wind-speed (km/hr) at 3 time points: 15:00 GMT and 21:00 GMT on 7th November 2013 and then early morning (03:00 GMT) on 8th November. Each raster grid is roughly 50 km's by 50 km's (0.5 degrees by 0.5 degrees) in extent, so the whole storm was around 650 km's across. At its height wind-speeds exceeded 150 km/hr and the ‘eye of the storm’ is also clearly visible as the blue dot in the very centre.
As usual, the R code is provided below if you are interested in producing similar plots for an area or time of interest. You can get plenty of information and code examples for the rNOMADS package on CRAN (link provided earlier in the post) as well as at the developers' blog posts on the package at the following link - https://bovineaerospace.wordpress.com/tag/rnomads/
# Load libraries library(rNOMADS) library(GEOmap) library(aqfig) library(rgdal) # Define levels levels <- c("surface", "2 m above ground", "10 m above ground", "300 mb") # Define variables - temperature and wind variables <- c("TMP", "UGRD", "VGRD") # Define additional model inputs abbrev <- "gfsanl" model.date <- 20141029 model.run <- 06 pred <- 3 # Get the data grib.info <- ArchiveGribGrab(abbrev, model.date,model.run, pred, file.type = "grib2") # Read data into R grib.data <- ReadGrib(grib.info$file.name, levels, variables) resolution <- c(0.5, 0.5) #Resolution of the model # Make an array for easier manipulation atmos <- ModelGrid(grib.data, resolution) # Set up display # Plot temperature at 2 m above ground li <- which(atmos$levels == "2 m above ground") vi <- which(atmos$variables == "TMP") colormap <- rev(rainbow(500, start = 0 , end = 5/6)) # Read world boundaries world <- readOGR(dsn="D:/Data/ne_10m_admin_0_countries", layer="ne_10m_admin_0_countries") png(file = "world_surface_temp.png", width = 9, height = 6, res=400, type="cairo-png",units="in", bg="white",restoreConsole = TRUE) image(atmos$x , sort(atmos$y), atmos$z[li,vi,,], col = colormap, xlab = "Longitude", ylab = "Latitude", main = paste("World Temperature at Ground Level (deg C):", atmos$fcst.date ,"GMT")) # Plot coastlines plot(world, border = "black", add = TRUE, MAPcol = NA) # Plot legend, convert to Celsius vertical.image.legend(col=colormap, zlim = range(atmos$z[li,vi,,] - 273.15)) dev.off() # Plot wind magnitude at 10 m above ground li <- which(atmos$levels == "10 m above ground") vi.zonal <- which(atmos$variables == "UGRD") # East-West wind vi.merid <- which(atmos$variables == "VGRD") # North-South wind wind.mag <- sqrt(atmos$z[li,vi.zonal,,]^(2) + atmos$z[li,vi.merid,,]^(2)) colormap <- rev(rainbow(500, start = 0 , end = 5/6)) png(file = "world_surface_wind.png", width = 9, height = 6, res=400, type="cairo-png",units="in", bg="white",restoreConsole = TRUE) image(atmos$x, sort(atmos$y), wind.mag, col = colormap, xlab = "Longitude", ylab = "Latitude",xlim=c(100,150),ylim=c(-5,20), main = paste("World Winds at Ground Level (km/hr):", atmos$fcst.date, "GMT")) # Plot coastlines plot(world, border = "black", add = TRUE, MAPcol = NA) # Plot legend, convert to km/hr vertical.image.legend(col=colormap, zlim = range(wind.mag * 3.6)) dev.off()
No comments:
Post a Comment