#!/opt/local/bin/perl #=============================================== # Marc 11 Sep 2008 # Create the links for web template #=============================================== # Set environment variables #----------------------------------- $menu_file="/home/storms/menu.def"; #----------------------------------- # Read the menu file #----------------------------------- &read_menu($menu_file, $ENV{'DOCUMENT_URI'}, *l_read, *home_link, *current_link, *links); if (! $l_read) { print "ERROR: failed to read file \n"; } #----------------------------------- # Decide which link to focus on #----------------------------------- if ( ($links{$current_link}{'nchildren'}) || ($links{$current_link}{'ancestors'} < 2) ) { #----------------------------------- # There's either links below this one to display or not links # above it so focus on this link #----------------------------------- $focus_link=$current_link; } else { #----------------------------------- # No links below to show this link as a link below parent #----------------------------------- $focus_link=$links{$current_link}{'parent'}; } #----------------------------------- # Display the buttons #----------------------------------- &display_buttons($focus_link, $current_link, $home_link, *links); #----------------------------------- # Exit script #----------------------------------- exit(0); #=============================================== # Read the menu file #=============================================== sub read_menu { #----------------------------------- # passed variables #----------------------------------- local ($menu_file, $document_uri, *l_read, *home_link, *current_link, *links)=@_; #----------------------------------- # local variables #----------------------------------- local ($generation); local ($menu_item); local ($nparts); local ($link); local ($parent); local ($child); local ($child2); local ($document_uri2); #----------------------------------- # Read the menu #----------------------------------- $l_read=0; open (MENU, "<" . $menu_file) || return; $l_read=1; @menu_raw = ; close (MENU); $tot_menu_raw=@menu_raw; #----------------------------------- # The first item is the home page #----------------------------------- (@parts)=split(/:/, $menu_raw[0]); $home_link=$parts[2]; $home_link =~ s/[\n ]*//g; $links{$home_link}{'full_uri'}=$home_link; $links{$home_link}{'name'}=$parts[1]; $generation=1; #----------------------------------- # Decode the other information #----------------------------------- for ($i=1; $i<$tot_menu_raw; $i++) { #----------------------------------- # See if we've changed generation #----------------------------------- if ($menu_raw[$i] =~ /{/) { $generation++; } elsif ($menu_raw[$i] =~ /}/) { $generation--; } else { #----------------------------------- # Split information into parts #----------------------------------- (@parts)=split(/:/, $menu_raw[$i]); $nparts=@parts; #----------------------------------- # If it has 4 parts the item must finish with a http URI #----------------------------------- if ($nparts > 3) { $link=$parts[2] . ":" . $parts[3]; } else { $link=$parts[2]; } $link =~ s/[\n ]*//g; #----------------------------------- # Work out the parent #----------------------------------- if ($parts[0] eq "all") { $parent=$home_link; } else { $parent=$parts[0]; } $links{$link}{'parent'}=$parent; #----------------------------------- # Store other information #----------------------------------- $links{$link}{'name'}=$parts[1]; $links{$link}{'ancestors'}=$generation; if ($nparts > 3) { $links{$link}{'full_uri'}=$link; } else { if ($generation == 1) { $links{$link}{'full_uri'}=$home_link . $link; } else { $links{$link}{'full_uri'}=$links{$parent}{'full_uri'} . "/" . $link; } } #----------------------------------- # Update parent information #----------------------------------- $links{$parent}{'nchildren'}++; $child="child" . $links{$parent}{'nchildren'}; $links{$parent}{$child}=$link; #----------------------------------- # See if this is the current link #----------------------------------- $link2=$links{$link}{'full_uri'}; $link2 =~ s/[A-Za-z0-9_.-]*\/\.\.\///g; $link2 =~ s/\/index.html//; $document_uri2=$document_uri; $document_uri2 =~ s/\/index.html//; if ($link2 eq $document_uri2) { $current_link=$link; } } } #----------------------------------- # Check generations make sense #----------------------------------- if ($generation != 1) { print "
ERROR: brackets are not closed \n"; } #----------------------------------- # If link isn't found take the home page #----------------------------------- if (! $current_link) { $current_link=$home_link; } } #=============================================== # Display the buttons #=============================================== sub display_buttons { #----------------------------------- # passed variables #----------------------------------- local ($focus_link, $current_link, $home_link, *links)=@_; #----------------------------------- # local variables #----------------------------------- local ($parent); local ($i); local ($child); local ($link); #----------------------------------- # Put in Met Department button #----------------------------------- print "Content-type: text/html\n\n"; print "
\n"; print " \n"; #----------------------------------- # Put in links of the same level #----------------------------------- print " \n"; print "
\n"; }


The aim of this cyclone atlas is to go beyond individual case study analysis and to introduce and promote the use of a comprehensive set of quantitative analyses describing the structure and evolution characteristics of 200 composited north Atlantic cyclones from 1989-2009. It is hoped that both teachers and researchers of extratropical cyclone dynamics will make use of the analysed fields in the atlas. The data used is ERA-Interim reanalysis data from ECMWF (www.ecmwf.int/research/era) and the method and some example analysis using the atlas can be found in Dacre et al. (2012).

The cyclone composites in the atlas highlight the relative positions of cold, warm and occluded fronts and their associated wind and cloud patterns. They also illustrate the evolution of cyclonic flows such as the warm and cold conveyor belt and dry intrusion.


Extratropical cyclones play a significant role in determining the day-to-day weather conditions in many parts of the world through their associated wind and precipitation patterns. Their typical evolution characteristics are therefore of great interest to both educators and researchers of extratropical cyclone dynamics. The structure and evolution of extratropical cyclones, as viewed from the surface, was first described by Bjerknes and Solberg (1922) who developed a conceptual model called the Norwegian cyclone model. Inconsistencies between observations and the Norwegian model have led to refinements of the model and to the development of new conceptual models such as that proposed by Shapiro and Keyser (1990). Detailed analysis of the structure and evolution of individual extratropical cyclones suggest that although there is no universal lifecycle of extratropical cyclones some general cyclone characteristics can be identified (see review paper by Ulbrich et al. (2009) and references therein). For example, Browning and Roberts (1994) described the structural evolution of a moderately intense extratropical cyclone, using a combination of surface observations, satellite imagery, radar data and model output. They identified and described the evolution of cyclonic flows such as the warm and cold conveyor belt flows and the dry intrusion. Such case studies have contributed significantly to the generation of three-dimensional conceptual models of extratropical cyclones that provide a framework for understanding their dynamical evolution. These conceptual models are widely used in educational meteorology courses and texts (e.g. Ahrens, 2000) throughout the world to illustrate the basic structure and evolution of extratropical cyclones.

If you make use of the STORMS Extratropical Cyclone Atlas, please use the following citation: STORMS Extratropical Cyclone Atlas (2011). Data retrieved [Day Month Year] from http://www.met.reading.ac.uk/~storms.

Conceptual Models

Conceptual models of cyclone evolution showing low-level geopotential height and fronts (top), and low-level potential temperature (bottom). (a) Norwegian cyclone model: (I) incipient frontal cyclone, (II) and (III) narrowing warm sector, (IV) occlusion; (b) Shapiro–Keyser cyclone model: (I) incipient frontal cyclone, (II) frontal fracture, (III) frontal T-bone and bent-back front, (IV) frontal T-bone and warm seclusion. (b) is adapted from Shapiro and Keyser (1990), their FIG. 10.27) to enhance the zonal elongation of the cyclone and fronts and to reflect the continued existence of the frontal T-bone in stage IV. The stages in the respective cyclone evolutions are separated by approximately 6–24 h and the frontal symbols are conventional. The characteristic scale of the cyclones based on the distance from the geopotential height minimum, denoted by L, to the outermost geopotential height contour in stage IV is 1000 km. (This figure and text are taken from Schultz et al. 1998).