Skip to content

Commit 699fa77

Browse files
committed
Fix sounding merge bug
- Fix merging for MAN winds to properly mimic GEMPAK behavior - Add testing file for this edge case Fixes #3563
1 parent 4467865 commit 699fa77

5 files changed

Lines changed: 126 additions & 12 deletions

File tree

src/metpy/io/gempak.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,18 +1652,6 @@ def _merge_mandatory_winds(self, merged, parts, section, qcman):
16521652
if merged['DRCT'][loc] == self.prod_desc.missing_float:
16531653
merged['DRCT'][loc] = parts[section]['DRCT'][iwind]
16541654
merged['SPED'][loc] = parts[section]['SPED'][iwind]
1655-
else:
1656-
if press not in qcman:
1657-
size = len(merged['PRES'])
1658-
loc = size - bisect.bisect_left(merged['PRES'][1:][::-1], press)
1659-
if loc >= size + 1:
1660-
loc = -1
1661-
merged['PRES'].insert(loc, press)
1662-
merged['TEMP'].insert(loc, self.prod_desc.missing_float)
1663-
merged['DWPT'].insert(loc, self.prod_desc.missing_float)
1664-
merged['DRCT'].insert(loc, parts[section]['DRCT'][iwind])
1665-
merged['SPED'].insert(loc, parts[section]['SPED'][iwind])
1666-
merged['HGHT'].insert(loc, self.prod_desc.missing_float)
16671655

16681656
def _merge_winds_pressure(self, merged, parts, section, pbot):
16691657
"""Process and merge wind sections on pressure surfaces."""
@@ -1760,6 +1748,8 @@ def _merge_winds_height(self, merged, parts, nsgw, nasw, istart):
17601748
]:
17611749
merged['DRCT'][ilev - 1] = drct
17621750
merged['SPED'][ilev - 1] = sped
1751+
elif hght <= zold:
1752+
skip = True
17631753
elif hght >= znxt:
17641754
while more and hght > znxt:
17651755
zold = znxt

src/metpy/static-data-manifest.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ gem_model_mrg.csv 304afb3bb4b662f7adfc8803e8661fc217a691d0b1790d5e0e6d085f198c42
4949
gem_model_mrg.snd 6d229a7af8d3e86d8da02403023cdaf0f86b6c982eb8b6f7f84c3836811df014
5050
gem_multi_time.grd a11746f162f2ea3944573246a477db94026f76e72ce7ecb98bd08c8475e2ca3f
5151
gem_multilevel_multidate.grd a5642ad733e88e9512d979b7c95049e9572591622d9ac94645622c1723742909
52+
gem_nzwp_no_ttcc.csv bb37082c3f219ef261f614a9a45653714a02162c07767109cc6e4cd5fbde9e27
53+
gem_nzwp_no_ttcc.snd 0dae2296b3b81688883fb06a9378ed39fbc054f6eb15ebe8f892062c78e3816f
5254
gem_packing_dec.grd 547cda1ffb5e143623a33afce76a6cfa8c3c543eed04cf388f3005ccf1ba677d
5355
gem_packing_dec.npz b4b3b838b245c0e0d0d803c049a9169c34fe1c09f267d98df5a0d0586297d18d
5456
gem_packing_diff.grd 35de37fb378fe1c8cb1be56962ab3496ee079a3c6df4ef838cf1e2e8fd86da3f

staticdata/gem_nzwp_no_ttcc.csv

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
PRES,TEMP,DWPT,DRCT,SPED,HGHT
2+
1022.0,8.0,7.0,140.0,2.06,27.0
3+
1021.0,8.8,5.1,139.1,2.29,35.14
4+
1009.0,10.8,3.8,128.23,5.09,133.91
5+
1000.0,10.6,4.6,120.0,7.21,209.0
6+
988.54,10.41,4.41,100.0,10.81,305.0
7+
988.0,10.4,4.4,99.88,10.83,309.56
8+
925.0,6.0,4.4,85.0,12.87,854.0
9+
924.0,6.0,4.5,84.26,13.02,862.88
10+
918.22,5.73,3.79,80.0,13.9,914.0
11+
884.5,4.11,-0.44,75.0,16.47,1219.0
12+
854.0,2.6,-4.4,65.63,15.5,1505.02
13+
852.0,2.4,-3.55,65.0,15.44,1524.0
14+
850.0,2.2,-2.7,65.0,14.41,1543.0
15+
838.0,1.2,-2.0,63.01,13.59,1657.62
16+
820.19,0.01,-3.22,60.0,12.36,1829.0
17+
789.42,-2.12,-5.39,70.0,10.81,2134.0
18+
770.0,-3.5,-6.8,76.51,8.8,2332.65
19+
759.78,-4.04,-9.95,80.0,7.72,2438.0
20+
744.0,-4.9,-14.9,77.3,7.86,2603.38
21+
702.87,-7.33,-19.19,70.0,8.24,3048.0
22+
700.0,-7.5,-19.5,45.0,6.18,3080.0
23+
649.33,-11.82,-37.7,35.0,5.15,3658.0
24+
635.0,-13.1,-43.1,46.19,5.15,3829.67
25+
623.95,-14.09,-41.0,55.0,5.15,3962.0
26+
599.21,-16.36,-36.17,110.0,3.09,4267.0
27+
583.0,-17.9,-32.9,174.09,4.48,4473.74
28+
575.34,-18.3,-35.62,205.0,5.15,4572.0
29+
552.19,-19.56,-44.05,225.0,7.21,4877.0
30+
532.0,-20.7,-51.7,222.74,10.23,5153.65
31+
508.5,-22.16,-50.24,220.0,13.9,5486.0
32+
500.0,-22.7,-49.7,220.0,14.93,5610.0
33+
485.0,-23.5,-57.5,223.41,16.83,5833.52
34+
474.0,-22.7,-61.7,225.98,18.26,6001.86
35+
400.0,-30.5,-69.5,245.0,28.83,7230.0
36+
392.0,-31.9,-69.9,245.0,30.2,7373.04
37+
362.3,-34.48,-66.37,245.0,35.52,7925.0
38+
349.0,-35.7,-64.7,247.02,36.97,8186.88
39+
301.0,-43.72,-62.94,255.0,42.73,9197.28
40+
300.0,-43.9,-62.9,255.0,42.73,9220.0
41+
289.83,-45.94,-63.92,255.0,42.73,9449.0
42+
271.0,-49.9,-65.9,255.0,42.26,9894.8
43+
250.0,-52.5,-67.5,255.0,41.7,10420.0
44+
236.0,-53.9,-66.9,255.0,40.67,10789.72
45+
229.38,-52.81,-70.95,255.0,41.18,10973.0
46+
216.0,-50.5,-79.5,255.0,36.67,11360.42
47+
200.0,-50.7,-81.7,255.0,30.89,11860.0
48+
199.17,-50.74,-81.73,250.0,29.86,11887.0
49+
164.94,-52.71,-83.04,255.0,28.83,13106.0
50+
150.09,-53.69,-83.7,265.0,23.68,13716.0
51+
150.0,-53.7,-83.7,260.0,23.17,13720.0
52+
130.08,-55.04,-84.68,240.0,18.02,14630.0
53+
118.24,-55.93,-85.34,245.0,11.84,15240.0
54+
112.72,-56.38,-85.67,265.0,14.41,15545.0
55+
107.47,-56.83,-86.0,250.0,17.5,15850.0
56+
102.47,-57.27,-86.33,245.0,14.93,16154.0
57+
100.0,-57.5,-86.5,255.0,11.33,16310.0
58+
97.67,-57.42,-86.42,255.0,11.33,16459.0
59+
95.0,-57.32,-86.32,235.0,12.87,16634.38
60+
91.0,-57.16,-86.16,265.0,7.21,16906.43
61+
86.0,-56.96,-85.96,245.0,9.27,17263.82
62+
84.0,-56.87,-85.87,255.0,8.24,17412.63
63+
81.0,-56.74,-85.74,240.0,7.21,17642.62
64+
80.0,-56.7,-85.7,247.45,6.7,17721.18
65+
79.0,-56.86,-85.75,255.0,6.18,17799.85
66+
76.0,-57.37,-85.89,285.0,11.84,18041.96
67+
74.0,-57.72,-85.99,290.0,15.44,18208.74
68+
70.0,-58.45,-86.2,245.0,11.33,18556.27
69+
66.0,-59.22,-86.42,225.0,7.21,18924.25
70+
62.0,-60.04,-86.66,235.0,9.78,19315.24
71+
55.0,-61.61,-87.1,200.0,7.72,20064.46
72+
54.0,-61.86,-87.17,205.0,5.66,20179.21
73+
53.0,-62.1,-87.24,185.0,4.63,20296.11
74+
52.2,-62.3,-87.3,188.99,5.05,20391.22
75+
52.0,-62.27,-87.3,190.0,5.15,20415.06
76+
50.0,-61.96,-87.35,230.0,7.21,20658.62
77+
48.0,-61.63,-87.4,215.0,6.69,20912.12
78+
45.0,-61.11,-87.48,230.0,5.15,21312.9
79+
40.0,-60.17,-87.63,205.0,6.69,22044.33
80+
37.7,-59.7,-87.7,216.09,7.38,22412.08
81+
35.0,-61.15,-88.25,230.0,8.24,22871.16
82+
33.0,-62.31,-88.68,195.0,12.36,23234.66
83+
30.0,-64.17,-89.38,210.0,7.21,23823.46
84+
29.5,-64.5,-89.5,217.31,7.21,23927.29
85+
28.0,-62.6,-88.96,240.0,7.21,24250.3
86+
26.0,-59.9,-88.18,235.0,12.36,24708.98
87+
25.3,-58.9,-87.9,245.23,12.53,24877.91
88+
24.0,-58.84,-87.84,265.0,12.87,25208.88
89+
22.0,-58.75,-87.75,245.0,14.41,25754.82
90+
21.0,-58.7,-87.7,265.0,10.3,26046.71
91+
20.6,-59.1,-88.1,-9999.0,-9999.0,26167.31

staticdata/gem_nzwp_no_ttcc.snd

5 KB
Binary file not shown.

tests/io/test_gempak.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,3 +427,34 @@ def test_multi_time_grid():
427427

428428
assert dattim1 == datetime(1991, 8, 19, 0, 0)
429429
assert dattim2 == datetime(1991, 8, 20, 0, 0)
430+
431+
def test_unmerged_no_ttcc():
432+
"""Test loading an unmerged sounding.
433+
434+
Sounding will have a PPCC group, but no TTCC group. This
435+
tests for proper handling of MAN winds on pressure surfaces
436+
without any temp/dewpoint/height data.
437+
"""
438+
gso = GempakSounding(get_test_data('gem_nzwp_no_ttcc.snd')).snxarray()
439+
gpres = gso[0].pressure.values
440+
gtemp = gso[0].temp.values.squeeze()
441+
gdwpt = gso[0].dwpt.values.squeeze()
442+
gdrct = gso[0].drct.values.squeeze()
443+
gsped = gso[0].sped.values.squeeze()
444+
ghght = gso[0].hght.values.squeeze()
445+
446+
gempak = pd.read_csv(get_test_data('gem_nzwp_no_ttcc.csv', as_file_obj=False),
447+
na_values=-9999)
448+
dpres = gempak.PRES.values
449+
dtemp = gempak.TEMP.values
450+
ddwpt = gempak.DWPT.values
451+
ddrct = gempak.DRCT.values
452+
dsped = gempak.SPED.values
453+
dhght = gempak.HGHT.values
454+
455+
np.testing.assert_allclose(gpres, dpres, rtol=1e-10, atol=1e-2)
456+
np.testing.assert_allclose(gtemp, dtemp, rtol=1e-10, atol=1e-2)
457+
np.testing.assert_allclose(gdwpt, ddwpt, rtol=1e-10, atol=1e-2)
458+
np.testing.assert_allclose(gdrct, ddrct, rtol=1e-10, atol=1e-2)
459+
np.testing.assert_allclose(gsped, dsped, rtol=1e-10, atol=1e-2)
460+
np.testing.assert_allclose(ghght, dhght, rtol=1e-5, atol=1e-2)

0 commit comments

Comments
 (0)