0

在我的站点上,我们遇到了 MetPy 在尝试调用 surface_based_cape_cin 时返回单位错误的问题

我看到以下错误:

Traceback (most recent call last):
  File "Advanced_Sounding_3Dnetcdf2.py", line 202, in <module>
    sbcape, sbcin = mpcalc.surface_based_cape_cin(p1, T1, Td1)
  File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/xarray.py", line 677, in wrapper
    return func(*args, **kwargs)
  File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/units.py", line 320, in wrapper
    return func(*args, **kwargs)
  File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/calc/thermo.py", line 1851, in surface_based_cape_cin
    return cape_cin(p, t, td, profile)
  File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/xarray.py", line 677, in wrapper
    return func(*args, **kwargs)
  File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/units.py", line 319, in wrapper
    raise ValueError(msg)
ValueError: `cape_cin` given arguments with incorrect units: `temperature` requires "[temperature]" but given "none", `dewpt` requires "[temperature]" but given "none".

当我检查传入的值 p1、T1 和 Td1 时,它们都有正确的单位(百帕斯卡、度_摄氏度)。

只是为了确保我在调用 surface_based_cape_cin 之前添加了以下内容并检查了结果:

p1 = units.hPa * phPa
T1 =  units.degC * TdegC
Td1 = units.degC * TddegC

我正在运行以下版本的 MetPy

# Name                    Version                   Build  Channel
metpy                     0.12.2                     py_0    conda-forge

我不记得在更新到这个版本之前有这个,但我不能确定我看到的问题是在更新之后出现的。

感谢您的任何帮助,您可以提供。

4

1 回答 1

1

这绝对是 MetPy 中的一个错误,可能是由于掩码数组和保留单元面临更多挑战。我开了一个新问题。同时,作为一种解决方法,最好只使用以下方法消除屏蔽数组:

p1 = p1.compressed() * p1.units
T1 = T1.compressed() * T1.units
Td1 = Td1.compressed() * Td1.units

只要数据没有实际的掩码值,或者如果所有 3 个数组都在同一个位置被掩码,这将起作用。如果没有,您需要做更多的工作来删除其中一个值被屏蔽的任何级别。

于 2020-09-09T04:07:11.527 回答