我正在尝试使用metpy。Calc函数得到超级单体复合值,如下所示:超晶胞复合
然而,我似乎找不到任何地方如何计算有效风暴螺旋度和有效切变。我已经在grib2数据中获得了风暴相对螺旋度,但我如何获得有效的?
谢谢!
从1.0版本开始,MetPy不具备计算有效SRH (ESRH)和有效体积剪切(EBS)的功能。
释义自Thompson et al. 2007:
ESRH为"有效风暴入流层"内计算的SRH;哪个是由下边界定义的风暴的最低垂直区域包裹特性CAPE>= 100 J/kg, CIN>= -250 J/kg;继续向上,直到这些标准中的任何一个不再存在满足。EBS是风暴深度标准化后的整体切变而不是标准的垂直范围。
考虑打开一个特性请求或拉请求来获得这个功能添加到MetPy!
这里是计算有效风暴相对螺旋度和有效体切变的有效层的快速尝试。这使用MetPy函数来计算包裹温度分布和CAPE和CIN值。
这个函数的输出可以用来设置合适的层深和层底,用于计算风暴的相对螺旋度和整体切变(然后计算超级单体复合参数等)。
我已经测试了1999年5月4日00 UTC从KOUN发出的声音,它给出了一个合理的答案,但还没有被广泛测试。
# Effective Shear Algorithm
def effective_layer(p, T, Td, h, height_layer=False):
'''This function determines the effective inflow layer for a convective sounding.
Input:
- p: sounding pressure with units
- T: sounding temperature with units
- Td: sounding dewpoint temperature with units
- h: sounding heights with units
Returns:
- pbot/hbot, ptop/htop: pressure/height of the bottom level, pressure/height of the top level
'''
from metpy.calc import parcel_profile, cape_cin
from metpy.units import units
import numpy as np
pbot = None
for i in range(p.shape[0]):
prof = parcel_profile(p[i:], T[i], Td[i])
sbcape, sbcin = cape_cin(p[i:], T[i:], Td[i:], prof)
if sbcape >= 100 * units('J/kg') and sbcin > -250 * units('J/kg'):
pbot = p[i]
hbot = h[i]
bot_idx = i
break
if not pbot:
return None, None
for i in range(bot_idx+1, p.shape[0]):
prof = parcel_profile(p[i:], T[i], Td[i])
sbcape, sbcin = cape_cin(p[i:], T[i:], Td[i:], prof)
if sbcape < 100 * units('J/kg') or sbcin < -250 * units('J/kg'):
ptop = p[i]
htop = h[i]
break
if height_layer:
return hbot, htop
else:
return pbot, ptop