#!/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"; }

Evolution of Vertical Cyclone Structure

This figure shows composites of lower- and upper-level fields throughout the developing stage of the composite cyclone lifecycle have been combined to illustrate the relative development of the cyclone at upper- and lower-levels. These figures are comparable to the conceptual models described in Semple (2003) and Browning (1990) etc.

In the initial stage of development (figure a), a weak low-level temperature wave is seen to form downstream of an upper-level shortwave trough. As the surface cyclone develops (figures b and c) cold air advection to the west of the surface cyclone reduces the thickness of the atmospheric layer between 1000 hPa and 500hPa and deepens the upper-level trough. Conversely, warm air advection to the east of the surface cyclone increases the 1000-500 hPa thickness and intensifies the upper-level ridge. Thus differential temperature advection to the west and east of the surface cyclone amplifies the upper-level wave.

As the upper-level wave amplifies positive differential vorticity advection downstream of the upper-level trough forces ascent above the surface cyclone. The resulting lower-tropospheric vortex stretching intensifies the surface cyclone. Increased low-level wind speeds lead to an amplification of the low-level temperature wave and hence stronger low-level temperature advection which in turn amplifies the upper-level wave. Therefore a positive feedback between the processes occurring at upper and lower-levels occurs.

As the cyclone develops the upper-level low-pressure region moves towards the surface low. In the mature stage the upper-level low is located directly above the surface low producing a vertically stacked cold-core system. The alignment of the surface and upper-level cyclones means that there is no longer a positive feedback effect between the processes occurring at upper and lower-levels and the cyclone decays (not shown).

Baroclinic Instabiltiy Image

Horizontal composites at (a) 48 and (b) 24 hours before the time of maximum intensity, (c) at the time of maximum intensity. Bottom row: 925 hPa geopotential height (solid, at 400, 600 and 800m); system relative wind vectors and frontal positions. Middle row: 700 hPa geopotential height (solid, at 2800 and 3000 m); θe (dashed, at 292, 300 and 308 K) and vertical velocity (filled). Top row: 300 hPa geopotential height (solid, at 8600, 8800, 9000 and 9200 m); θe (dashed, at 316, 324 and 332 K) and divergence (filled).