Since there may be a minor release of gempak imminent,
here are some corrections I have made to the radiosonde decoder.
The first file is gempak/source/bridge/ru/rumand.f
Heights at 700 hPa are only encoded to be unambiguous to 1000 meters
even though the values can vary by about 1200 meters. This fix
uses temperature to make a better guess at the value.
The second file is gempak/source/bridge/ru/ruhght.f
The first change addresses a weird encoding I have run across for
a height of minus zero. Negative values are encoded as 500 + |height|.
It looks for a value ge 500 instead of the value gt 500.
The second one addresses what the leading digit should be at the 10 hPa
level.
*** rumand.f.dist 2019-02-13 11:35:52.000000000 -0700
--- rumand.f 2021-01-28 11:42:02.978136138 -0700
***************
*** 82,87 ****
--- 82,95 ----
C
CALL RU_TEMP ( fld, rdata (2), rdata (3), ier )
C
+ C* The 700 hPa heights can span approximately 2300 to 3500 meters
+ C* The encoding is only unambiguous to 1000 meters. RU_HGHT returns values
+ C* between 2500 and 3499 meters. If the height is greater than 3300 meters
+ C* and the temperature below 0, adjust the height downward by 1000 meters.
+ C
+ IF ( p .eq. 700 .and. rdata(6) > 3300 .and. rdata(2) < 0 )
+ + rdata(6) = rdata(6) - 1000
+ C
C* Handle the wind group if it is present as determined by topwnd.
C
IF ( p .ge. topwnd ) THEN
*** ruhght.f.dist 2019-02-13 11:35:52.000000000 -0700
--- ruhght.f 2021-01-28 12:58:04.908768256 -0700
***************
*** 66,72 ****
C
IF ( ( ier .eq. 0 ) .and. ( .not. above ) ) THEN
z = iz
! IF ( (ipres .eq. 1000) .and. (iz .gt. 500) ) THEN
z = 500. - z
ELSE IF ( (ipres .eq. 925) .and. (iz .lt. 200) .and.
+ .not. drop ) THEN
--- 66,72 ----
C
IF ( ( ier .eq. 0 ) .and. ( .not. above ) ) THEN
z = iz
! IF ( (ipres .eq. 1000) .and. (iz .ge. 500) ) THEN
z = 500. - z
ELSE IF ( (ipres .eq. 925) .and. (iz .lt. 200) .and.
+ .not. drop ) THEN
***************
*** 109,117 ****
z = z + 20000.
ELSE IF ( ipres .ge. 20 ) THEN
z = z + 20000.
! ELSE IF ((ipres .eq. 10) .and. (iz .gt. 8000)) THEN
z = z + 20000.
! ELSE IF ((ipres .eq. 10) .and. (iz .lt. 8000)) THEN
z = z + 30000.
ELSE IF ( ipres .ge. 3 ) THEN
z = z + 30000.
--- 109,117 ----
z = z + 20000.
ELSE IF ( ipres .ge. 20 ) THEN
z = z + 20000.
! ELSE IF ((ipres .eq. 10) .and. (iz .gt. 5000)) THEN
z = z + 20000.
! ELSE IF ((ipres .eq. 10) .and. (iz .lt. 5000)) THEN
z = z + 30000.
ELSE IF ( ipres .ge. 3 ) THEN
z = z + 30000.
--
Larry Oolman
Department of Atmospheric Science
University of Wyoming
Dept. 3038, 1000 E. University Ave.
Laramie, WY 82071
ldoolman@xxxxxxxx
http://www.uwyo.edu/atsc