0

我想根据 ECMWF 数据计算层厚。

我所拥有的是变量T(在一层内)和relhum(在一层内)和压力(在层界面和层中点处)。

我无法理解函数的pressure参数metpy.calc.thickness_hydrostatic_from_relative_humidity

当我查看文档字符串中给出的公式时,

$$ 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) 

请帮助我了解如何正确使用此功能。

4

1 回答 1

1

但是,在我看来,pressure, temperature,relative_humidity论点似乎都必须具有相同的维度。

[...]

例如,为了计算底层的厚度,我希望给出表面压力、层顶部压力以及层内的温度(和湿度)。

事实上,与您的预期相反pressuretemperature、 和relative_humidity变量都需要在相同的级别上定义,因为根据 MetPy 的文档,它thickness_hydrostatic_from_relative_humidity是在大气剖面上运行的。请注意,在 MetPy 的术语中,“层”位于任何一组垂直级别之上,而不仅仅是在两个级别之间。

由于积分是通过梯形规则执行的,因此在计算本身中也可以看到对在通用级别上定义的数据的需求。例如,在具有两层数据的层的最小情况下,MetPy 使用的公式

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


在实践中,如果您确实有“偏移”或“交错”级别的数据,其中您的temperaturerelative_humidity具有pressurethickness_hydrostatic_from_relative_humidity计算)。一种可能适用于您的情况的简单去交错方法,具有pressure形状数组 (361,1440,79) 和temperature形状数组 (361,1440,78),可能看起来像

pressure_destaggered = (pressure[..., :-1] + pressure[..., 1:]) / 2

但是,这种方法有两个注意事项:

  • thickness_hydrostatic_from_relative_humidity仅设计用于处理大气数据的 (1D) 剖面,而不是 3D 网格,因此请谨慎处理您的结果(指定可选bottomdepth参数可能会失败,并且默认积分轴可能正确也可能不正确)
  • 如果您只有两个压力级别/一个温度级别,则这种去交错将不起作用,因为 MetPy 至少需要两个级别来定义一个层。在这种情况下,您需要以某种方式在两个压力水平上近似温度/相对湿度(例如假设两个水平之间的温度/相对湿度恒定)。
于 2020-01-29T20:00:21.977 回答