首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用metpy制作锋生横断面

如何利用metpy制作锋生横断面
EN

Stack Overflow用户
提问于 2022-05-24 13:52:03
回答 1查看 73关注 0票数 1

我想要做一个横截面,我的代码是

代码语言:javascript
运行
复制
  domain_1 = os.path.abspath(filenames_in)
info = os.path.join(domain_1, filename)
data = xr.open_dataset(info)
data = data.metpy.parse_cf().squeeze()
print(data)
p1 = data['level'].values[:]* units.hPa
start = (56, -9)
end = (56.5, -6)
cross = cross_section(data, start, end).set_coords(('latitude', 'longitude'))
r,le,t,w =xr.broadcast(cross['r'],cross['level'],cross['t'],cross['w'])
# print('r',r.shape)
# print(le)
# print('w',w.shape)
# print(w)
theta=mpcalc.potential_temperature(level,t)
cross['Potential_temperature'] = xr.DataArray(theta, coords=t.coords, dims=t.dims)
ptemp=cross['Potential_temperature']
cross['u'] = cross['u']
u = cross['u']
cross['v'] = cross['v']
v = cross['v']
# Set subset slice for the geographic extent of data to limit download
lon_slice = slice(-40, 20)
lat_slice = slice(70, 40)
# Grab lat/lon values (GFS will be 1D)
lats = data.latitude.sel(latitude=lat_slice).values
lons = data.longitude.sel(longitude=lon_slice).values
# Compute dx and dy spacing for use in vorticity calculation
dx, dy = mpcalc.lat_lon_grid_deltas(lons,lats)
front = mpcalc.frontogenesis(ptemp, u, v, dx[None,:, :], dy[None,:, :], x_dim=-1, y_dim=-2)
tmpk = data.t.metpy.sel(
    latitude=lat_slice, longitude=lon_slice).metpy.unit_array.squeeze()
uwnd = data['u'].metpy.sel(
    latitude=lat_slice, longitude=lon_slice).metpy.unit_array.squeeze()
vwnd = data['v'].metpy.sel(
    latitude=lat_slice, longitude=lon_slice).metpy.unit_array.squeeze()
potent_temp=mpcalc.potential_temperature(p1[:,None,None], tmpk)
fronto = mpcalc.frontogenesis(potent_temp, uwnd, vwnd, dx[None, :, :], dy[None, :, :], x_dim=-1, y_dim=-2)
# f=cross_section(fronto, start, end).set_coords(('latitude', 'longitude'))

总有一些虫子。如何解决,我不知道是否需要先计算锋生,然后使用交叉函数或使用交叉函数,然后再计算锋生。我两次都试过了,但无法得到横截面。

代码语言:javascript
运行
复制
ValueError: operands could not be broadcast together with shapes (0,120,241) (19,100) 

如果我先计算锋生,然后使用交叉函数

代码语言:javascript
运行
复制
lon_slice = slice(-40, 20) 
lat_slice = slice(70, 40) 
subset = data.metpy.sel(latitude=lat_slice, longitude=lon_slice)
subset['potential_temperature'] = mpcalc.potential_temperature(
subset['level'],
subset['t'])
subset['frontogenesis'] = mpcalc.frontogensis(
subset['potential_temperature'],
subset['u'],
subset['v'])
start = (56, -9) end = (56.5, -6)
cross = cross_section(subset, start, end).set_coords(('latitude', 'longitude'))

我总是遇到这个错误

代码语言:javascript
运行
复制
ValueError: Data missing required coordinate information. Verify that your data have been parsed by MetPy with proper x and y dimension coordinates and added crs coordinate of the correct projection for each variable.
EN

Stack Overflow用户

回答已采纳

发布于 2022-05-24 17:10:45

假设MetPy's frontogensis calculation在二维水平网格上工作,那么在获取横截面之前,确实需要计算前端。类似地,应该在计算之前执行子集设置,因为MetPy还不支持延迟计算。此外,与手工处理网格三角洲和单元数组不同,当让MetPy为您处理这些数据时,您通常会遇到较少的错误,如下所示:

代码语言:javascript
运行
复制
domain_1 = os.path.abspath(filenames_in)
info = os.path.join(domain_1, filename)
data = xr.open_dataset(info)
data = data.metpy.parse_cf().squeeze()
print(data)
代码语言:javascript
运行
复制
lon_slice = slice(-40, 20)
lat_slice = slice(70, 40)
subset = data.metpy.sel(latitude=lat_slice, longitude=lon_slice)
代码语言:javascript
运行
复制
subset['potential_temperature'] = mpcalc.potential_temperature(
    subset['level'],
    subset['t']
)
subset['frontogenesis'] = mpcalc.frontogensis(
    subset['potential_temperature'],
    subset['u'],
    subset['v']
)
代码语言:javascript
运行
复制
start = (56, -9)
end = (56.5, -6)
cross = cross_section(subset, start, end).set_coords(('latitude', 'longitude'))

(这假设您的数据具有正确的“单元”属性和水平和垂直的对齐网格。如果不是这样,则需要在打开后进行一些额外的数据清理。)

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72364169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档