Redesign of the NOAA/NCEP Wind Profiler Quality Control Module
03 January 2003
The NOAA/NCEP wind profiler quality control program, PREPOBS_PROFCQC, was designed in the early 1990's to run in the RUC network and read in and process data from the 36 original NOAA Profiler Network (NPN) sites. The NPN profilers all reported on the hour and all reported winds, or missing data, on the same 43 height levels above ground. The first 36 levels were separated by 250 meters and the last seven levels were separated by 1000 meters.
In 1997 the entire observational data processing suite was moved to the CRAY-YMP machine and PREPOBS_PROFCQC was modified to run in all networks as part of the observational PREPBUFR processing. It now read in reports from a PREPBUFR file, performed quality control, and wrote the updated reports (with “events”) to an output PREPBUFR file. This change introduced two major errors in the code which have just now been discovered. First, the program did not account for the fact that the upstream PREPOBS_PREPDATA program, which generates the PREPBUFR file, does not encode levels with missing wind data. This has resulted in PREPOBS_PROFCQC performing incorrect temporal checks since the level index in data arrays for a particular site does not necessarily refer to the same height level across different time periods. Secondly, the wind profiler heights in the PREPBUFR file are height above sea level rather than above ground. Since the increment, temporal and vertical check error limits are based on the fixed 43 level heights above ground, these are being assigned incorrectly because of both the level index problem and the conversion to height above sea-level.
PREPOBS_PROFCQC was modified in 2001 to account for the increase in NPN report levels from 43 to 64. All levels were then separated by 250 meters. This change did not correct the problems noted in the previous paragraph.
In May 2002, NOAA/NCEP began operational decoding and dumping of wind profiler data from both Cooperative Agency Profilers (CAP) and from the Japanese Meteorological Agency (JMA). The CAP reports include the NOAA Boundary Layer Profilers (BLP) as well as acoustic sounders (SODARs). Sites from these platforms report at levels different from the NPN sites, and the CAP sites can report as often as every fifteen minutes. The vertical profiles of heights above ground are not necessarily the same from one CAP profiler site to another and the vertical spacing of height levels can vary at each particular site.
These new types of profiler data, now being testing in the PREPBUFR processing suite, have necessitated a major revision in the current PREPOBS_PROFCQC program. This revision has not only uncovered the longstanding errors noted previously, but has also offered the opportunity to improve the quality control of wind profiler data from all platforms. A summary of all changes is provided next.
Changes to correct errors in the existing code:
1. The level index in all arrays is now site specific. This will allow temporal checking to be performed properly at each individual site. Each site is examined over all report times in order to generate a height profile containing all possible levels. Those times with new levels inserted are given missing wind coordinates. This change is even more important now with the addition of CAP and JMA reports where height levels can vary greatly from one time to the next at a particular site.
2. The increment, temporal, vertical and median check error limits are now directly associated with a reported height above ground level rather than with the level index in the arrays. This ensures that the proper error limit is used at all levels and it eliminates the height above ground versus height above sea level discrepancy. As is the case in one above, this correction is even more important with the inclusion of CAP and JMA sites which report wind data on height levels which vary greatly from the standard levels found in the NPN reports. The error limits values themselves remain unchanged.
3. The subroutine which calculates and prints out statistics was not computing kurtosis (fourth moment) correctly.
Other changes to account for the addition of CAP and JMA profiler reports:
1. The maximum number of sites the code can process is increased from 40 to 120.
2. The number of time periods input to the code is now site specific rather than being hardwired to be the same for all reports.
3. The temporal check error limits are based on statistics from NPN profilers which have a minimum two-hour spanning time difference. Since most CAP sites report every half- or quarter-hour, these error limits are most likely too loose. The temporal check logic is modified to always attempt to use a two-hour spanning time difference for the CAP sites if possible by skipping intervening report times on each side of the central time if they differ from the central time by less than one hour. In cases where this is not possible, a time difference of at least one half-hour on one side is used. If this is not possible, then the temporal check is not performed. The maximum time difference on one side is two hours.
Other changes which improve the overall quality control algorithms:
1. In the current wind profiler processing suites, the dump and PREPBUFR codes all use the same time window radius as the assimilation. For the Global Forecast System (GFS) this is 3.0 hours, for the Eta Data Assimilation System (Eta/EDAS) this is 1.5 hours, and for the Rapid Update Cycle (RUC) this is 0.5 hours. This means that reports at the assimilation time boundaries are forced to use one-sided differencing in the temporal check. A change is being made in the upstream dump and PREPOBS_PREPDATA codes to increase the time window radius by one hour for all three networks. This will allow the temporal check to use two-sided differences for the assimilation time boundaries as well as for all in-between times. New network-specific namelist switches in PREPOBS_PROFCQC will specify the assimilation time window and the program will output only reports within this boundary. The code will continue to run properly with one-sided temporal differencing at the assimilating time boundaries if no reports are available beyond these times. In fact, in the RUC and Eta, the early cutoff times will result in one-sided differencing for the temporal check at the latest report time since it will still be inside the assimilation time window.
Other “cosmetic” changes:
1. DOCBLOCKS and comments in the code are much more descriptive than before.
2. DO-LOOP logic is more concise than before (especially in temporal and vertical check modules).
3. Standard output is easier to read and more complete than before. Excessive print of differencing results is removed from operational runs with a new namelist switch which controls the degree of printout.
4. The quality marker change event “reason code” is expanded (more about this later).
5. Report level information in various output listings is expanded and sorted into bins containing both all data levels and only those levels containing either suspect or bad quality markers (either originally placed on the data by NOAA/FSL or placed on the data in this code as a quality control event). This output is written to text files but not included in the standard output. (One listing of bad data levels is concatenated to the standard output in operational runs.)
6. Statistical output is clarified and is written to two text files separate from the standard output. The computation and printout of statistics can be bypassed (as it will be in operations) through a new namelist switch. The combination of statistic types printed out (first through fourth moment) is controlled by new namelist switches. Statistics are generated separately for reports from the NPN, CAP and JMA platforms and are stratified according to height above ground. For NPN and JMA reports, the levels correspond to their standard height level spacing (250 and 300 meters, respectively). Vertical levels for the CAP sites, which report at different spacings depending upon the site, are assigned to the nearest 50 meters above ground level. These statistics may be useful to NCO in future upgrades of their wind profiler quality monitoring. The statistics may also be used to update the error check limits, in particular making them platform-specific and providing more resolution at high levels where these values are currently constant.
Changes that might be considered for the future:
1. Since the vertical check error limits are based on the 250 and 1000 meter vertical level spacings in the pre-2002 NPN reports, these should probably be modified to be weighted by the “actual” spanning level difference. The statistical output could be helpful here.
2. This code was written at a time when the Regional OI-analysis was operational. This analysis benefited from having observed data at standard pressure levels. The NPN wind profiler data, like all other vertical profile upper-air reports, contained auxiliary pressure levels at every 25 or 50 mb with interpolated winds. These were mixed in with the reported height levels. The changes made to update this program may not allow these auxiliary levels to be handled properly. Of course, this is not a problem in the current operational environment since these interpolated levels are no longer included in any reports. Although highly unlikely, there could be a case where a historical rerun could encounter NPN reports with additional pressure levels. Usually, historical reruns run with current operational codes and scripts (e.g., the Regional Reanalysis). In any event, it might be wise to test the updated PREPOBS_PROFCQC on an old PREPBUFR file containing wind profiler reports with auxiliary levels.
3. The RASS profile reports may be able to be quality controlled using a form of the program.
Expanded Reason Codes:
The program and reason codes are included in the PREPBUFR file in order to define all quality control “events” performed on observations. The program code defines which quality control step performed the action while the reason code defines the reason for the action. The PREPOBS_PROFCQC program (known as the CQCPROF quality control step) is assigned program code “9". To date it provides only two reason codes:
3 - Wind observation is found to be of questionable quality (wind quality marker set to “3" for suspect)
13 - Wind observation failed quality control checks (wind quality marker set to “13" for bad) .
The reason code is now expanded to provide more information about the nature of the quality marker change. The reason code is defined as a three-digit number XYZ, where the value of each digit has the following meaning:
Hundredth’s digit (X):
1 - Median check and vertical check both passed or not possible
2 - Median check suspect, vertical check passed or not possible
3 - Median check passed or not possible, vertical check suspect
4 - Median check and vertical check both suspect
5 - Median check failed, vertical check did not fail (may have passed, may be suspect, or may not be possible)
6 - Median check did not fail (may have passed, may be suspect, or may not be possible), vertical check failed
7 - Median check and vertical check both failed
Tenth’s digit (Y):
1 - Temporal check and increment check both passed or not possible
2 - Temporal check suspect, increment check passed or not possible
3 - Temporal check passed or not possible, increment check suspect
4 - Temporal check and increment check both suspect
5 - Temporal check failed , increment check did not fail (may have passed, may be suspect, or may not be possible)
6 - Temporal check did not fail (may have passed, may be suspect, or may not be possible), increment check failed
7 - Temporal check and increment check both failed
Unit’s digit (Z):
0 - Either: none of the checks failed (but one or more are suspect, see hundredth’s and
tenth’s digits), or one or more checks failed (see hundredth’s and tenth’s digits) but no
vector differences could be calculated
1 - One or more checks failed (see hundredth’s and tenth’s digits), where only one vector
difference (increment-temporal, increment-vertical, temporal-vertical, temporal- median, vertical-median) could be calculated
2 - One or more checks failed (see hundredth’s and tenth’s digits), where only increment- temporal vector difference is small (all others are either large or could not be calculated)
3 - One or more checks failed (see hundredth’s and tenth’s digits), where only increment- vertical vector difference is small (all others are either large or could not be calculated)
4 - One or more checks failed (see hundredth’s and tenth’s digits), where only increment- median vector difference is small (all others are either large or could not be calculated)
5 - One or more checks failed (see hundredth’s and tenth’s digits), where only temporal- vertical vector difference is small (all others are either large or could not be calculated)
6 - One or more checks failed (see hundredth’s and tenth’s digits), where only temporal- median vector difference is small (all others are either large or could not be calculated)
7 - One or more checks failed (see hundredth’s and tenth’s digits), where only the vertical-
median vector difference is small (all others are either large or could not be calculated)
8 - One or more checks failed (see hundredth’s and tenth’s digits), where any two or three of the vector differences (increment-temporal, increment-vertical, temporal-vertical, temporal-median, vertical-median) are small (all others are either large or could not be
9 - One or more checks failed (see hundredth’s and tenth’s digits), where any four, five or six of the vector differences (increment-temporal, increment-vertical, temporal-vertical, temporal-median, vertical-median) are small (all others are either large or could not be
The wind quality marker is set to suspect (“3") for any reason code XYZ, where X is 1-4, and Y is 1-4, and Z is 0. Any other reason code (X is 5-7, or Y is 5-7, or Z is 1-9) results in a wind quality marker set to bad (“13").
This updated version of the PREPOBS_PROFCQC program will be JIF’d for implementation after the NCO moratorium (no sooner than mid-February 2003).