我想从ECMWF数据中计算层厚。
我拥有的是变量T(在一层内)和relhum (在一层内)和压力(在层接口和层中点)。
我很难理解pressure参数对metpy.calc.thickness_hydrostatic_from_relative_humidity函数的影响:
当我查看docstring中给出的公式时,
$$ Z_2 - Z_1 = -\frac{R_d}{g} \int_{p_1}^{p_2} T_v d\ln p $$
在我看来,这个函数似乎会返回LHS,即$Z_2 - Z_1$.
然而,在我看来,似乎pressure、temperature、relative_humidity参数都必须具有相同的维度。
我觉得这很让人困惑:为了获得$Z_1$和$Z_2$之间的层厚,我还需要输入压力$p_1$和$p_2$。然而,温度通常是在满的水平上定义的,也就是说,我的温度比我的压力低一个。
例如,为了计算底层的厚度,我希望给出表层的压力,顶层的压力,以及层内的温度(和湿度)。但是当我尝试像这样使用这个函数时,我会得到一个
ValueError: operands could not be broadcast together with shapes (361,1440,79) (361,1440,78) 请帮助我理解如何正确地使用这个功能。
发布于 2020-01-29 20:00:21
然而,在我看来,
的
pressure,temperature,relative_humidity参数都必须有相同的维度。
..。
例如,为了计算底层的厚度,我希望给出表层的压力,顶层的压力,以及层内的温度(和湿度)。
实际上,与您的预期相反,pressure、temperature和relative_humidity变量都需要在相同的级别上定义,因为,正如MetPy的文档所示,thickness_hydrostatic_from_relative_humidity operates on atmospheric profiles。注意,在MetPy的术语中,“层”位于任何一组垂直层之上,而不仅仅是两个层之间。
对在公共级别上定义的数据的需求也可以从计算本身看出,因为积分是通过梯形规则执行的。例如,在具有两层数据的层的最小情况下,MetPy使用的公式

给定通过梯形规则进行的积分,则减少到

实际上,如果您确实具有“偏移”或“交错”级别的数据,其中您的temperature和relative_humidity的垂直坐标与您的pressure不同,则需要在公共级别上插值您的数据以使用thickness_hydrostatic_from_relative_humidity (或MetPy的任何其他配置文件计算)。使用pressure形状数组(361,1440,79)和temperature形状数组(361,1440,78),这可能是一种简单的、适用于您的方法
pressure_destaggered = (pressure[..., :-1] + pressure[..., 1:]) / 2但是,这种方法有两个注意事项:
thickness_hydrostatic_from_relative_humidity只用于处理大气数据的(1D)剖面,而不是三维网格,因此请对结果保持谨慎(指定可选的bottom和depth参数可能会失败,如果您只有两个压力级别/一个温度级别,则默认的集成轴可能会或不起作用,因为MetPy至少需要两个级别来定义一个层。在这种情况下,您需要以某种方式近似两个压力级的温度/相对湿度(例如假设两个级别之间的恒温/相对湿度)。https://stackoverflow.com/questions/59971760
复制相似问题