GSD web sounding change details

19-July-2017 (production)
Removed dependencies to the old rapb disk. Routine(s) changed or renamed: (new version of, (new version of, in the new utilities directory (new version of in the old rapb utilities directory, Welcome.cgi.

5-July-2017 (production)
Fixed a permissions problem on the script that updates the times of latest RAOBs. The script ( and the text file (latest_raob.txt) are run by, and written by user amb-verif on emb-prod-verif. Routine(s) with permissions changed:, latest_raob.txt.

3-July-2017 (production and beta)

28-June-2017 (beta and production)

14-June-2017 (production)
All beta changes moved to production.

8-June-2017 (beta)
Fixed a bug in wrf_cdf_sdg.x that caused the grid matching to be incorrect. (This had to have been broken for some time.) Also, changed references to "./wgrib2.x" to "wgrib2 -g2clib 0 -set center 7" so we're using the standard system wgrib2. (This required changing the setting of the PATH variable in get_soundings.cgi.) Also, changed the default grib type in get_soundings.cgi to 2 from 1. Routine(s) changed: wrf_cdf_sdg.c, get_soundings.cgi,,

30-Nov-2016 (production and beta)
Corrected a rare bug with FIM soundings: when CIn was too large, there was no space in the output between the word "CIn" and the value, which caused the sounding not to load to the plot. Routine(s) changed: fim_sounding.c.

17-May-2016 (production and beta)
But the ll-May upgrade didn't get executed if there were too many connections, so we changed things a bit so long queries are killed before things are aborted for too many connections. Routine(s) changed: get_soundings.cgi.

11-May-2016 (production and beta)
Even though we now check for too many connections, the remaining ones may take a long time and bog down the database. So now, each time a sounding is requested, we look for long-running processes in the 'soundings' db and terminate all that are longer than 10 sec. Routine(s) changed:

4-May-2016 (production and beta)
Too many sounding hits in a short time cause too many connections to the db. So, we now check the db, and if there are too many connections, we abort the request. I hope this will fix the db problem, though it does allow bots to block human users of the soundings page. Routine(s) changed:, get_soundings.cgi.

5-Apr-2016 (production and beta)
Radiometer data from Radiometrics restored. Routine(s) changed: installed on the rucsoundings web server, and get_radio.cgi brought up-to-date.

23-Feb-2016 (production and beta)
Fixed a very obscure bug that caused the applet to hang if users chose 0.5mb scale and Tephigrams. Routine(s) changed: sdg.SoundingCanvas.

11-Feb-2016 (production and beta)

26-Jan-2016 (production and beta)
Put a load check into the routine that unpacks grib2 files so that these jobs don't cause the load on the server to spike too high. When the load is too high, soundings are not delivered. Routine(s) changed:

16-Dec-2015 (production and beta)
We have moved to a new server. Functionality should be the same. Speed may be somewhat better. The old /gifs/ option has been discontinued.

30-July-2015 (production)
Removed the internal timing (/usr/bin/time) on the executables that generate soundings, in the hopes of decreasing the load on our server. Routine(s) changed: get_soundings.cgi

29-July-2015 (production and beta)
The '0-h forecast' for the RAP is now the analysis. Formerly, it had been the post-digital filter initialization field. This is consistent with the analysis soundings produced on the RAP web pages, and with other models. Changed the instructions (see below) to reflect this. Routine(s) changed: get_soundings.cgi,

27-July-2015 (production and beta)
Clarified the instructions to note:

03-Jun-2015 (production and beta)
Fixed a bug where indexes would go out of bounds if the longitude was near 0.0 Routine(s) changed: gfs_soundings.c

16-Jan-2015 (production and beta)
Restored soundings from the GFS models. Our netCDF files are currently not being generated after the recent GFS upgrade. So, we're now reading GFS soundings from grib2 files.

13-Aug-2014 (beta)
Added support for soundings with negative forecast lengths (persistence forecasts). We previously had "-99h" forecasts to represent DFI, now we also have forecasts -6 through -1 (with gaps) to represent persistence (an analysis from that many hours ago). Routine(s) changed: get_soundings.cgi, sdg.Sounding, sdg.SoundingLoader, sdg.LoadSoundingsFrame.

14-July-2014 (production and beta)
Fixed a bug for FIM soundings at non RAOB locations that caused the valid time to equal the run time for all forecast projections. Also, cleaned up some debug print. Routine(s) changed: fim_soundings.c,

23-June-2014 (production and beta)
For some locations near the edge of the RAP domain, the lat/lon provided by w3fb12 differs from that provided by wgrib2 due to different earth radii used in w3fb12 and at the varous centers (here and NCEP) by more than our current cutoff (0.20). We made a change so that wgrib2 is now asked to provide data at the grid point location nearest the requested site as provided by w3fb12. Previously, we asked wgrib2 to provide data for the exact location of the requested site. This seems to solve the problem. Routine(s) changed: wrgsi_sounding2.c

5-Mar-2014 (production and beta)

4-Mar-2014 (production and beta)
Change to allow longer model names to not be truncated. Routine(s) changed: sdg.SoundingLoader .

6-Feb-2014 (production and beta)
Button for HTML5 version of the display added. Routine(s) changed: Welcome.cgi.

3-Jan-2014 (production and beta)
Changes to the RAOB access routine to account for a name change in the access file. Routine(s) changed: get_raobs.cgi.

~25-Nov-2013 (production and beta)
Optional access to the unsigned applet provided from the main page for those few Mac users who apparently aren't able to execute signed applets.

20-Nov-2013 (production and beta)
Signed the java applet with a Symantec security certificate. Java warnings should be much less troublesome now.

18-Jul-2013 (production and beta)
Fixed a labelling error when forecasts extend over a day boundary. Previously, the day didn't increment. Now it does. Routine(s) changed, get_soundings.cgi.

28-Jun-2013 (production and beta)
Each time a sounding is requested, we chedk for long-running (> 100 secs) 'getraob' jobs that can hog server resources, and kill them. (I thought I had implemented this earlier, but I wasn't correctly parsing the min:sec run time.) Routine(s) changed: get_soundings.cgi.

14-Feb-2013 (production and beta)
Adjusted to not crash when the database is unavailable. However, most historical soundings will not be available in this case. Routine(s) changed

3-Oct-2012 (production and beta)
Fixed an apparent spurious debug statement in RAOB output. Adjusted the code to eliminate any lines starting with 'timeseries'. Routine(s) changed get_raobs.cgi.

18-Sept-2012 (production and beta)
When Op40 soundings (the default, aka RUC2 for historical reasons) are asked for, we now provide soundings from 40km netCDF files generated here at GSD from RAP 20km grib files. This corrects the temporary change of 2-May-2012 (see below). Routine(s) changed or new: RAP_sounding.c, wrf_cdf_sdg.c,, get_soundings.cgi.

17-May-2012 (beta)
When RAP20 soundings are requested, we generate the sounding from the NCEP RAP 20km netCDF file.

2-May-2012 (production and beta)
As a temporary fix to a problem caused by the transition to operational RAP, we new deliver Bak40 soundings when Op40 is asked for. We should be able to provide real-time RAP soundings within a few days.

6-May-2011 (beta)

4-Apr-2011 (production and beta)
Fixed a bug (unrelated to the two below) that incorrectly parsed inputs of multiple airports containing numbers in their names. (The string was incorrectly interpreted as a 'lat,lon'.) Routine(s) changed: get_soundings.cgi.

1-Apr-2011 (production and beta, no April Fool's)
The 'annoying behavior' fix of 25-Mar-2011 (see below) also broke the functionality of asking for multiple airports in the 'Site(s)' window, in the case when only 1 hour of soundings was requested. This has now been fixed. Routine(s) changed: get_soundings.cgi.

30-Mar-2011 (production and beta)
the 'annoying behavior' fix of 25-Mar-2011 (see below) broke some software that asked for '0' hours of soundings. We've adjusted things so that now when '0' hours are requested, you'll get 1 sounding. However, in the past if you asked for 0 hours of soundings you were guaranteed to get an analysis; now you will get the sounding with the shortest forecast projection valid at the time you specify; that mostly will be an analysis, but it may be a forecast if the analysis is not available. Routine(s) changed: get_soundings.cgi.

25-Mar-2011 (production and beta)
Annoying behavior fixed: Now, when you ask to load 'n' hours, you will get 'n' soundings. Previously, you got 'n+1' soundings (both endpoints of the time window). Now, you longer get the sounding at the future end of the time window. So, for instance, if the latest Op40 analysis is at 18Z and you ask for 3 hours, you'll get soundings for 18, 19, and 20Z. Also, the default number of hours to load was changed from 3.0 to 1.0. Routine(s) changed: Welcome.cgi, get_soundings.cgi.

10-Mar-2011 (production and beta)

9-Dec-2010 (beta)

29-Oct-2010 (beta)
Added 18h forecast projections as an option. Routine(s) changed: sdg.LoadSoundingsFrame, Welcome.cgi

4-Oct-2010 (production and beta)
A non-writable log file seems to cause a new error in java, which causes soundings not to load. Fixed this by no longer checking that the log file is writable in log_Soundings.cgi, and fixed SoundingLoader to print out the entire html error message if one exists (to make for easier debugging in the future). Also made the offending log file writable again. Routine(s) changed: sdg.SoundingLoader, log_Soundings.cgi, get_soundings.cgi.

RR format was changed to indicate "hybrid level" instead of "sigma level". So, we had to change the sounding generation program to search for 'hybrid' instead of 'sigma'. The fixed software now accepts either "hybrid" or "sigma". RR1h soundings are now available again. Routine(s) changed:,

22-March-2010 (production and beta)
We're now able to read RR files in grib2 format. Inability to do so caused an RR outage (except for pre-generated soundings) for the last couple of weeks. Routine(s) changed: wrgsi_sounding2.c (new), (new), (new), (to be consistent with latest version of wgrib2), get_soundings.cgi

18-Mar-2010 (production and beta)
Changed contact details in preparation for Bill Moninger's retirement on 30 April 2010.

9-March-2010 (production and beta)
Fixed a bug that removed everything after any commas in the 'site' field, thereby breaking requests for soundings at a particular lat,lon. Routine(s) changed: get_soundings.cgi

8-March-2010 (production)
All beta changes moved to production.

26-Feb-2010 (beta)

25-Feb-2010 (production and beta)
Hydrometeor information is now calculated from grib2 files (Op20 and some restored retro files). The hydrometeor profiles are only visible on the beta page. Routine(s) changed:,, agrib2_sounding.c.

23-Feb-2010 (production and beta)
Added an indicator in the sounding title that the time referred to is (always) the valid time, to avoid possible ambiguity with the AWIPS convention. Routine(s) changed: sdg.Sounding.

12-Feb-2010 (production)
Correctly moved an undocumented change from 30 Sep 2009 to production. This involved correctly dealing with grib/grib2 restored files in the retro directory. Also, we now allow 'debug=true&' as an argument in the query list for the prodiction as well as the beta page. Routine(s) changed:, get_soundings.cgi.

2-Feb-2009 (production and beta)
Fixed divide by zero that occured when Radiometer temperatures were all zero. Routine(s) changed:

1-Dec-2009 (production and beta)

7-Oct-2009 (production and beta)
Changed the high-altitude option from 10 mb to 0.5 mb, to accommodate the FIM. Routine(s) changed: sdg.SoundingCanvas, sdg.Sounding, sdg.SoundingPanel.

20-Aug-2009 (production and beta)
Changed how airport/sounding sites are determined (and tweaked) when pre-made soundings are accessed. I hope this is transparent to users, but the sounding's may have a different site name when they are displayed than the name the user originally requested. (This caused by the difference between RAOB site names and airport names when the two sites are nearby.) Routine(s) changed: get_soundings.cgi,

6-Aug-2009 (production and beta)
Set Helicity to 'missing' for Op40 soundings, because the Helicity in the model fields is apparently always zero. Routine(s) changed: java_soundings.c.

3-Aug-2009 (production and beta)
Boilerplate links to government organizations and disclaimers added.

28-July-2009 (production)

27-July-2009 (beta)
Added a 'simple' version of the SkewT (and Tephigram) plots. The background on these plots have ONLY altitude and temperature lines, so lack the isobars, hodograph, adiabats, and mixing ratio lines. The simple and full background can be toggled via a button under the plot, and the simple background can be requested as the initial condition from the from the URL by adding "simple=true&" to the query string, or from the initial page. Routine(s) changed: Welcome.cgi, reply-setup.cgi, plot_soundings.cgi, MainSoundings, sdg.SoundingPanel, sdg.SkewTPlot, sdg.SoundingCanvas.

26-May-2009 (production and beta)

19-May-2009 (production and beta)

13-May-2009 (production and beta)
Small change to cause 5-letter model names (such as 'Bak40') to have date/time columns for text soundings in the same place as they are for 4-letter model names. This was done to allow the non-java (idl) SkewT plotting code to correctly read the GSD sounding format even for 5-letter model names. Routine(s) changed: java_sounding.c

11-May-2009 (production and beta)

Fixed a bug that caused an error message to appear when files aren't available in the soundings.tar files. Routine(s) changed:

Fixed a bug with the time mark for RR files. Routine(s) changed: wrgsi_sounding.c

28-Jan-2009 (production and beta)
Top-level page updated to list what archival soundings are available. Also, the longest forecast projection and run frequency available on the ESRL/GSD sounding site is indicated for most models. Search for pre-made soundings limited to 12h forecast projections for all models except GFS and FIM, for which the search goes out to projections of 240h (but only 120h forecasts are currently available). Routine(s) changed: Welcome.cgi,

21-Jan-2009 (production and beta)

19-Dec-2008 (beta)

16-Dec-2008 (beta and production)
Switchable ability to show hydrometeors has been added. The mixing ratios of cloud water, rain water, snow, ice, and grouple (in ln kg/kg) are indicated to the right of the SkewT plot. This only works for the beta page (for internal use by GSD), and for current (not pre-made) soundings for Dev1320, Op20, Bak20, dev, and dev2 models. Routine(s) changed: Welcome.cgi, plot_soundings.cgi, get_soundings.cgi, agrib_sounding.c, agrib2_sounding.c, sdg.SoundingLoader.

26-Nov-2008 (production and beta)
Pre-made soundings are now mostly stored in and retrieved from tar files, to minimize the number of files on disk. Routine(s) changed:

21-Nov-2008 (production)
Op20 soundings are no longer available, because producing them from grib2 files produces an unsustainable load on our web server.

24-Oct-2008 (production and beta)

17-Oct-2008 (beta)
Changed the calculation of heights at mandatory levels. Previously, we used the standard atmosphere height at each mandatory level. These made the heights inconsistent with adjacent heights whenever the atmosphere is not standard. (This wasn't a problem for aircraft soundings, for which a standard atmosphere is always used to calculate heights, but was a problem for model soundings.) We now calculate heights at mandatory levels as we do for other variables: interpolation in log p from adjacent (non-mandatory) levels. Routine(s) changed: sdg.Sounding.

12-Feb-2008 (production)

7-Feb-2008 (beta)
For world model soundings (GFS), the lat and lon sometimes run together in the text soundings: e.g. "40.00-105.5", so the lat lon parser has trouble. This didn't cause any problems because the lat/lon read from the sounding text is not used. Nonetheless, we fixed the parser to deal with this issue. Routine(s) changed: sdg.SoundingLoader.

4-Feb-2008 (beta)
Reading grib2 files for Op20. Unfortunately, 4-5 times slower than reading the grib files, which will go away at any time. Also, the lat/lon of the grid column is slightly different with grib2. Routine(s) changed: get_soundings.cgi,

3-Dec-2007 (beta and production)
Changes to properly get the 'latest' analysis for soundings, such as from the Rapid Refresh, that are available both as pre-generated soundings at RAOB sites and as soundings generated on the fly from grib (or netCDF) files. The previous algorithm could find the wrong time for the latest analysis. Routine(s) changed: get_soundings.cgi,,,,

9-Oct-2007 (beta and production)
Change to replace '9999' with the corect WMO ID for some RAOBs. Routine(s) changed: raobs/get_raobs.cgi.

22-August-2007 (beta and production)
Change to restrict TAMDAR soundings to Government only. (Non-Mesaba TAMDAR soundings are restricted to GSD only, per agreement with AirDat.) Routine(s) changed: acars/get_acars.cgi, acars/

21-August-2007 (production)

20-August 2007 (beta)

16-August 2007 (beta)

14-August 2007 (beta and production)
Retrospective data (loaded by special pleading, and when staff time is available) is listed as a separate data source. And, we can now read 13km grib(1) files as well as 20km files for retro data only. Routine(s) changed: Welcome.cgi, plot_soundings.cgi, get_soundings.cgi,, agrib_sounding.c

13-August (beta and production)
Fixed a problem with SHARP soundings brought about by Friday's change to airport identification for non-java soundings. Routine(s) changed: reply-skewt.cgi

10-August (beta and production)

7-August-2007 (production)
All beta changes moved to production.

5/6-July-2007 (beta)

4-Jun-2007 (beta)
Changed date scheme for soundings from DD/MM/YY to DDMonthYY, where Month is 'Jan', 'Feb', etc. This done to avoid ambiguity between MM/DD/YY (US) and DD/MM/YY (international) (even though the month names are in English). Routine changed: sdg.Sounding.

8-May-2007 (beta and production)
Changed the calculation of iCAPE and iCIn (CAPE and CIn for interactive parcel trajectories) to include the entire sounding. Previously, these calculations were only performed on the part of the sounding visible on the SkewT plot. When the plot was zoomed this resulted in misleading values for iCAPE and iCIn. Routine changed: sdg.SkewTPlot.

9-Nov-2006 (beta and production)

30-Aug-2006 (beta)

19-Aug-2006 (production and beta)

25-Apr-2006 (production)
All beta changes moved to production.

25-Apr-2006 (beta)
Changed disk location from which we get dev2 20km grib files (from /exchange to /public). Should be NO CHANGES to output (except that more forecasts are available, but they are not kept around as long).

23-Mar-2006 (beta)
Added the relative humidity after the dewpoint at the cursor level. Routines changed: sdg.SkewTPlot.

23-Feb-2006 (production and beta)
For Bak20, dev, and dev2 analyses, and 1, 3, 6, 9h forecasts at 0 and 12 UTC, archival soundings (since 23 Feb 2006) are available for these RAOB sites.

16-Feb-2006 (production and beta)
Corrected the link to Profiler site information. Also, when no profiler site is specified, the site defaults to PLTC2. Routines changed: get_profs.cgi.

15-Feb-2006 (production and beta)
Fixed a pretty obscure error: when multiple soundings from a RAOB site that has a WMOID but no 'name' are displayed, soundings after the first were given '9999' as the name. This has now been fixed so that all soundings will be given the WMOID as their name on the sounding plot. Routines changed: get_raobs.cgi.

7-Feb-2006 (production)

6-Feb-2006 (beta)
Changed the colors of the third and fourth soundings overlaid to display better. The third overlay is now shown in brownish, and the fourth is shown in dark green. Routine changed: sdg.SkewTPlot.

10-Jan-2006 (beta)
Change made to allow up to 13 different sounding sources to appear in the 'load soundings' frame (previous limit was 10, so the source 'Aircraft (Restricted)' didn't show up. Routine changed: sdg.LoadSoundingsFrame.

5-Dec-2005 (production)
All beta changes moved to production

1-Dec-2005 (beta)
Pretty major rewrite of internal data access (no change to the data display). This was done to make the model names more accurately depict the models that provide the sounding data. Changes are the following In general, soundings from 20km grids take longer to load than those from 40km grids.

In addition, for dev and dev2, analysis soundings at airports with METAR sites will be stored for 30 days. Previously these, like all other model soundings, were unavailable after about 24h. Also, at these sites, 1, 3, 6 and 9 hr forecast soundings valid at 0 UTC are saved for 30 days.

1-Aug-2005 (oper)
All beta changes moved to operations

30-Jun-2005 (beta and oper)

29-Jun-2005 (beta)
Changed the calculation of iCAPE (CAPE for an interactive parcel) to only include the area at and above the Level of Free Convection (LFC). (This area is indicated by red hash marks.) Also, the LFC for the parcel (iLFC), if it exists, is shown at the right of the plot. Routine changed: sdg.SkewTPlot.

31-Mar-2005 (beta and operational)
Behavior changed from the 25-Mar-2005 version so that if both the arguments 'start' and 'startSecs' are defined (shouldn't happen, but it has for at least one user), 'start' will take precidence, as it did in the past. Routines changed get_soundings.cgi.

25-Mar-2005 (beta and operational)
If no arguments are given to plot_soundings.cgi, it will now default to the latest RUC sounding for DEN. Previously, the applet failed to load. Routines changed get_soundings.cgi.

7-Mar-2005 (beta and operational)

4-Mar-2005 (beta)
Slight change made in the buttons under the sounding display to ensure that long sounding names don't slide off the left edge of the button. (If they're too long, the names will be clipped on the right side, which is the year.)Routine changed lib.MyButton.

2-Mar-2005 (operational and beta)
[Internal changes; these should be transparent to users.] Code changed to read grid parameters directly from grib files, in preparation for reading 20km and 13km files (we currently read only 40km grids, whether in grib or netcdf format). Also the code guesses whether a file is in grib or netcdf by looking for 'netcdf' in the path to the file. Should be easier to maintain. Routines changed: grib_sounding.c, get_sounding.cgi

23-Feb-2005 (operational)
All beta changes moved to operations.

22-Feb-2005 (beta)
"CIMSS" soundings added. These are soundings taken by the Wayne Feltz of the U. Wisconsin Aerobago team (see These soundings are being taken in Memphis from 22 Feb to 10 March 2005, in support of the TAMDAR Great Lakes Fleet Experiment. Routines changed/added: reply_setup.cgi, get_cimss.cgi.

18-Feb-2005 (beta)
Location of sounding ID below the SkewTPlot moved slightly to the left so as not to obscure dewpoints so much when multiple plots are overlaid. Routines changed: sdg.SkewTPlot.

2-Feb-2005 (beta)
RUC models dev and dev2 added. These are identical except that dev2 contains TAMDAR data. In both cases, soundings appear more slowly than for MAPS and RUC soundings, because of the formats in which the model results are stored. Routines changed: reply-setup.cgi, plot_soundings.cgi, Welcome.cgi.

21-Sep-2004 (operational)
All beta changes moved to operations

21-Sep-2004 (beta)

??-Sep-2004 (beta)
Flipped date and time (time now comes first) on the sounding buttons below the map, so the time shows even when the date is pushed off the button to the right due to long station names (such as when a lat,lon is used instead of a name).

18-Aug-2004 (operational)
All beta changes moved to the operational site.

17-Aug-2004 (beta and operational)
Corrected a little bug that matched RAOB station OUN with the word "County", causing soundings from OUN to be unavailable. Routine changed: get_rabos.cgi

4-Aug-2004 (beta)
Changed the model sounding access function so that the variable startSecs does not have to start on an hour boundary. If the interval [startSecs,endSecs] contains certain hours, soundings for those hours will be displayed. Routine changed: get_soundings.cgi

16-July-2004 (beta)


All beta and alpha changes moved to production, with one exception: data in grib format are not used. Unpacking grib files for MAPS and RUC model runs is too time-consuming even on the new server given the amount of use this site gets.

14-April-2004 (alpha)

2-Jan-2004 (alpha)

5 May 2003 (beta and oper)

21 March 2002 (beta and oper)
Corrected an error that caused wind directions on soundings from the RUC and MAPS models to be incorrect. MAPS and RUC winds at longitudes other than 95 West should have been rotated clockwise with respect to true N by - sin(25°)*(-95 - longitude), where longitude is in degrees, with E being positive, and the rotation is in degrees. This error caused wind directions near the E and W edges of the MAPS/RUC domain to be incorrect by as much as 18°.

5 March 2002 (beta and oper)
Profiler soundings are available again.

31 Jan 2002 (beta and oper)

15 Nov 2000 (oper)
Replaced the adiabats file (the background for the plots) that had an error in the 10 degree wet adiabat.

30 May 2000 (beta & oper)
Updated the Standard Atmosphere routines to correctly reflect the US 1976 Standard atmosphere above 226 mb. (Previous versions were a little off above this altitude, but this affected only the display, not the data themselves.) Classes changed:,,,

17 Feb 2000 (beta & oper)
The altitude of the cursor location is now indicated near the cursor, along with pressure and temperature (,

31 Jan 2000 (beta & oper)
Changed metar.short to reflect the FSL "official" METAR data, and also to include stations that were previously in metar.short.

28 Jan 2000 (beta)

12 Jan 2000 (operational)

Prepared by Bill Moninger,
Last modified: Tue Jul 18 23:00:57 GMT 2017