1

我下载了覆盖区域 [30°W-30°E; 的 ERA5 netcdf 数据;0-20°N]。下载的数据包含水平风分量 (u, v) 和比湿度 (q)。我需要通过使用 Metpy 函数advection来计算湿度的水平平流。

我收到这个错误

/usr/local/lib/python3.8/dist-packages/metpy/xarray.py:1445: UserWarning: Vertical dimension number not found. Defaulting to (..., Z, Y, X) order.
  warnings.warn(
Traceback (most recent call last):
  File "temp_avect_calc.py", line 33, in <module>
    adv = mpcalc.advection(q, [u, v], (dx, dy))
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 1470, in wrapper
    grid_deltas_from_dataarray(grid_prototype, kind='actual')
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 1380, in grid_deltas_from_dataarray
    geod=f.metpy.pyproj_crs.get_geod()))
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 253, in pyproj_crs
    return self.crs.to_pyproj()
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 233, in crs
    raise AttributeError('crs attribute is not available.')
AttributeError: crs attribute is not available.

我正在使用的代码如下所示

import cartopy.crs as ccrs
import metpy.calc as mpcalc
from metpy.units import units
import xarray as xr

fname  =  "uwnd_vwnd_shum_750hPa_2019.nc"
ds = xr.open_dataset(fname)

lat = ds["latitude"][::-1]
lon = ds["longitude"]


u = ds["u"][:,  ::-1, :] 
v = ds["v"][:,  ::-1, :] 
q = ds["q"][:,  ::-1, :] 


dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)

adv = mpcalc.advection(q, [u, v], (dx, dy))
4

1 回答 1

1

根据您提供的错误,您似乎使用的是 MetPy 1.0。如果是这种情况,则函数签名metpy.calc.advection已更改 [链接],也可以使用 xarray [示例] 进行简化。您可以放弃计算网格间距,因为这将从您的纬度和经度坐标中提取。为此,您必须明确地让 MetPy 解析数据集中的一些信息以创建crs信息,在这种情况下来自您的纬度和经度。下面的示例应该适用于您在 MetPy 1.0 上的数据。

ds = xr.open_dataset(fname).metpy.parse_cf()

adv = mpcalc.advection(ds["q"], ds["u"], ds["v"])
于 2021-01-26T22:29:54.203 回答