爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12177|回复: 14

MeteoInfoLab脚本示例:水汽通量散度计算

[复制链接]

新浪微博达人勋

发表于 2015-6-18 14:03:05 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2016-12-6 14:33 编辑

用ncep数据计算水汽通量散度的脚本。需要air, uwnd, vwnd和rhum变量。数据是4维数据,需要固定时间维和高度维。脚本中用到几个内置的函数:cdiff, hdivg和magnitude,和GrADS中同名函数的作用一样。计算出来的水汽通量散点单位应该是:kg/(s•cm2•hPa)。

脚本程序如下:
  1. print 'Open data files...'
  2. f_air = addfile('D:/Temp/nc/air.2011.nc')
  3. f_uwnd = addfile('D:/Temp/nc/uwnd.2011.nc')
  4. f_vwnd = addfile('D:/Temp/nc/vwnd.2011.nc')
  5. f_rhum = addfile('D:/Temp/nc/rhum.2011.nc')

  6. print 'Read data array...'
  7. tidx = 173    # Jun 23, 2011
  8. t = f_air.gettime(tidx)
  9. lidx = 3    # 700 hPa
  10. air = f_air['air'][tidx,lidx,:,:]
  11. uwnd = f_uwnd['uwnd'][tidx,lidx,:,:]
  12. vwnd = f_vwnd['vwnd'][tidx,lidx,:,:]
  13. rhum = f_rhum['rhum'][tidx,lidx,:,:]

  14. # Calculate
  15. print 'Calculate...'
  16. prs = 700
  17. g = 9.8
  18. es = 6.112*exp(17.67*(air-273.16)/(air-29.65))
  19. qs = 0.62197*es/(prs-0.378*es)
  20. q = qs*rhum/100
  21. qhdivg = hdivg(q*uwnd/g,q*vwnd/g)

  22. #Plot
  23. print 'Plot...'
  24. axesm()
  25. mlayer = shaperead('D:/Temp/map/country1.shp')
  26. geoshow(mlayer, edgecolor='black')
  27. layer = contourfm(qhdivg, cmap='grads_rainbow')
  28. title('Water Vapor Flux Divergency (' + t.strftime('%Y-%m-%d') + ')')
  29. colorbar(layer)
  30. xlim(0, 360)
  31. ylim(-90, 90)


结果图:
water_vapor.png

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-18 13:19:22 | 显示全部楼层
王老师您好,我是MeteoInfo的初学者,python也刚刚开始学,第一次使用了这个脚本,因为我用的是FNL 1°*1°的Grib2数据,所以对脚本改动了一下,但是不知道对不对,因为画出来的水汽通量散度场有很大面积的负值异常区域,但是几个正、负值中心位置又好像是正确的。还望您指教!

print 'Open data files...'
f=addfile('F:/datafiles/fnl_20160701_00_00.grib2')

print 'Read data array...'

air = f['Temperature_isobaric'][:,25,:,:]
uwnd = f['u-component_of_wind_isobaric'][:,25,:,:]
vwnd = f['v-component_of_wind_isobaric'][:,25,:,:]
rhum = f['Relative_humidity_isobaric'][:,25,:,:]

# Calculate
print 'Calculate...'
prs = 850
g = 9.8
es = 6.112*exp(17.67*(air-273.16)/(air-29.65))
qs = 0.62197*es/(prs-0.378*es)
q = qs*rhum/100
test = cdiff(q, True)
qhdivg = hdivg(q*uwnd/g,q*vwnd/g)
qv = rhum*es/100
uv = magnitude(uwnd, vwnd)
uvq = uv*qv/(9.8*1000)

#Plot
print 'Plot...'
axesm()
mlayer = shaperead('F:/MeteoInfo/map/country1.shp')
geoshow(mlayer, linecolor='black')
#layer = contourfm(qhdivg, 20)
layer = contourfm(qhdivg, cmap='GMT_red2green')
title('Water Vapor Flux Divergency')
colorbar(layer)
xlim(80, 150)
ylim(0, 50)

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-8-18 15:08:38 | 显示全部楼层
江南剑侠 发表于 2016-8-18 13:19
王老师您好,我是MeteoInfo的初学者,python也刚刚开始学,第一次使用了这个脚本,因为我用的是FNL 1°*1° ...

脚本看起来没什么问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-18 15:41:27 | 显示全部楼层
本帖最后由 江南剑侠 于 2016-8-18 15:43 编辑
MeteoInfo 发表于 2016-8-18 15:08
脚本看起来没什么问题。


                               
登录/注册后可看大图


                               
登录/注册后可看大图



当天长江中下游出现了区域性暴雨,在该区域上空可以看到有明显的水汽通量负值区,但是其他大部分地区也是负值区,值还比较单一,有点不正常。
一开始以为是填色的问题,所以后来换了一种填色发现还是这样
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-19 05:43:37 来自手机 | 显示全部楼层
王老师您好!想请教您一个问题:前面加载地图层都没错,但是一使用contourf就报错,错误信息是java.lang.nullpointerexception?该如何解决呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-9-19 06:01:02 | 显示全部楼层
火枪裸鞋 发表于 2017-9-19 05:43
王老师您好!想请教您一个问题:前面加载地图层都没错,但是一使用contourf就报错,错误信息是java.lang.nu ...

建议你先仔细看看这里:http://www.meteothinker.com/docs ... /data_tutorial.html

打打基础再来写脚本。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-28 22:39:57 | 显示全部楼层
王老师,850hpa lidx 应该等于几啊2 还是4
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-28 22:59:25 | 显示全部楼层
GS晨光 发表于 2017-11-28 22:39
王老师,850hpa lidx 应该等于几啊2 还是4

获取变量或者数组后可有用dimvalue方法获取某个维的具体数值。该方法只有一个参数,即维的序号。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-9-24 21:01:15 | 显示全部楼层
王老师,你的代码中时间tidx=173表示2011.06.23,是不是2011.01.01是tidx=0
那为啥高度层次lidx=3表示700hpa,是lidx起始数是1不是0,也就是lidx=1是1000hpa的意思么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-6-8 17:51:05 | 显示全部楼层
老师您好,我有一个问题想请教一下。
我在计算水汽通量散度时,前面的计算都有结果,但是在调用函数hdivg,也就是qhdivg = hdivg(q*uwnd/g,q*vwnd/g)之后返回值为none,在这之前我输出q,uwnd,vwnd均有值,请问这是什么原因?应该怎么解决?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表