MetPy是一个Python工具集合库,用于阅读、可视化和执行天气数据的计算。

本文介绍如何在python中通过metpy计算水汽通量散度。

数据:

  • 1、比湿数据
  • 2、风速分量U
  • 3、风速分量V

主要函数:

  • 1、metpy.calc.divergence(u, v, *, dx=None, dy=None, x_dim=- 1, y_dim=- 2)
    计算矢量的水平散度。
  • 2、metpy.calc.lat_lon_grid_deltas(longitude, latitude, x_dim=- 1, y_dim=- 2, geod=None)
    计算纬度/经度格式的网格点之间的实际增量。
    在这里插入图片描述

注意点

  • 1、使用merpy计算过程中需要带上单位
  • 2、最好先选取部分区域进行测试,然后再对全球进行循环
  • 3、注意及时保存数据,避免浪费时间
  • 4、数据的分辨率保持一致

代码:

# -*- coding: utf-8 -*-
"""
introduction : keep learning althongh walk slowly
"""
# # # import package
import xarray as xr
import numpy as np
from metpy import units
import metpy.constants as constants
import metpy.calc as mpcalc
# # # read data
p1=r'D:/sph.nc'
p2=r'D:/u.nc'
p3=r'D:/v.nc'
f_u = xr.open_dataset(p2)
f_v = xr.open_dataset(p3)
f_q = xr.open_dataset(p1)
# # # read variables
u = f_u.u
v = f_v.v
q = f_q.q
lat = q.lat
lon = q.lon
lev = q.level
time=q.time
# # #
qv_u = u*q/constants.g
qv_v = v*q/constants.g
# # # 
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
div_qv = np.zeros((q.time.shape[0],lev.shape[0],lat.shape[0],lon.shape[0]))
for j in range(q.time.shape[0]): 
    print(j)
    for i in range(lev.shape[0]):
        div_qv[j,i] = mpcalc.divergence(u = qv_u[j,i],v = qv_v[j,i],dx = dx ,dy = dy)

# # # 计算整层水汽通量散度

total_div_qv = np.trapz(div_qv[::-1],lev[::-1],axis=1)

# # # save  data  
div_qv_nc = xr.Dataset(
    {
        "mfd":(("time",'level',"lat","lon"), div_qv)
    },
    coords={
        'level':lev,
        "time":time,
        "lat":lat,
        "lon":lon,
    }
)
div_qv_nc.attrs["long_name"] = "div-qv"
div_qv_nc.to_netcdf("qiv-qv.nc")    

        
total_qv_nc = xr.Dataset(
    {
        "total_mfd":(("time","lat","lon"), total_div_qv)
    },
    coords={
  
        "time":time,
        "lat":lat,
        "lon":lon,
    }
)

total_qv_nc.attrs["long_name"] = "total-div-qv"
total_qv_nc.to_netcdf("total-qiv-qv.nc") 

				    			一个努力学习python的海洋
			                    水平有限,欢迎指正!!!
		                        欢迎评论、收藏、点赞、转发、关注。
		                        关注我不后悔,记录学习进步的过程~~
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐