Visualizing the jet stream

Jet streams are narrow tubes of strong westerly winds which circle the earth at ≈ 10km elevation. These strong winds separate regions of cold and warm air. Surface weather at mid-latitudes is affected by the chaotic meanderings of jet streams.


The above wind speed maps are based on NCEP GFS analysis at 300mb pressure level (equivalent to ≈ 10km). The speed scale is in m/s.

There are many interesting things to notice about these maps. Firstly, there are several (5 or 6) planetary scale meanders of the jet stream. The meanders are called planetary or Rossby waves. Secondly, the enclosed area is larger and wind speeds higher in the northern hemisphere. This situation is reversed during the southern winter. Notice the closed loop of clockwise circulating air close to New Zealand. In this case a jet stream meander has grown large, become unstable and broken off. The loop encloses a pocket of cold air. Such detached loops can persist and remain in the same location for days.

The graphic below shows the GFS 300mb analysis wind speeds for ooUTC 19 Jan 2010 and the forecast wind speeds for 00UTC 20 & 21 January.  Rossby wave propogation can be seen clearly (the ridges and troughs advance anticlockwise in the Northern hemisphere, clockwise in the Southern Hemisphere)



300mb wind velocities (zonal wind component Uvel and meridonal wind component Vvel) at 300mb were extracted from 0.5° GFS grib files. In an earlier post complete GFS forecasts in grib2 format were downloaded and relevant fields extracted using the wgrib2 utility. In fact, it is possible to download only the required fields. This much faster partial-http option uses cURL and an easy to use Perl script called from NCEP.

jet.R is the script which produced the above graphics. Here Roger Bivand’s sp and rgdal packages are used to transform the latitude-longitude GFS projection to  a polar projection. For example, wind speeds in the northern hemisphere are contained in the SpatialGridDataFrame object sg_north. It is transformed into Universal Polar Stereographic (ups in the Proj.4 library) using
sg_north <- spTransform(sg, CRS("+proj=ups +north"))
sg_north@bbox <- polar_north@bbox

Unfortunately spTransform() produces a SpatialPoints object, because the grid is non-uniform after transformation. To recover a SpatialGrid object, the interp() function from package akima was used to resample back onto a regular grid. This is the slowest part of jet.R.