爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7679|回复: 7

MeteoInfoLab脚本示例:计算水平螺旋度

[复制链接]

新浪微博达人勋

发表于 2015-10-8 00:00:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2017-3-7 22:57 编辑

参考此贴(http://bbs.06climate.com/forum.php?mod=viewthread&tid=37089)尝试了用MeteoInfoLab编写计算水平螺旋度的脚本,由于我不是学气象出身,只是照猫画虎,希望有高手验证一下是否正确。

对平均风速的计算根据river的建议试了两种方法,1、先计算U/V分量的平均值,再利用U/V分量平均值计算平均风速;2、先计算全风速(所有U/V数组元素都计算风速),再平均。结果对于Pattern没有影响,但对具体的值有影响。

脚本程序:
  1. print 'Open data files...'
  2. f_uwnd = addfile('D:/Temp/nc/uwnd.2011.nc')
  3. f_vwnd = addfile('D:/Temp/nc/vwnd.2011.nc')

  4. print 'Calculate average wind field from 850 to 600 hpa...'
  5. tidx = 173    # Jun 23, 2011
  6. t = f_uwnd.gettime(tidx)
  7. level = '850:600'    # 850 - 600 hPa
  8. lat = '15:55'
  9. lon = '70:135'
  10. uvar = f_uwnd['uwnd']
  11. vvar = f_vwnd['vwnd']
  12. uwnd = uvar[tidx,level,lat,lon]
  13. vwnd = vvar[tidx,level,lat,lon]
  14. uc = uwnd.ave()
  15. vc = vwnd.ave()sp = magnitude(uwnd, vwnd)
  16. speed = sp.ave()
  17. #speed = magnitude(uc, vc)
  18. direc = atan2(vc, uc)
  19. cdirec = direc-40./180.*3.14159
  20. if cdirec < -3.14159:
  21.     cdirec=cdirec+3.14159*2
  22. cuc = speed*cos(cdirec)
  23. cvc = speed*sin(cdirec)

  24. print 'Calculate horizontal helicity...'
  25. Hrs = 0.
  26. zHrs = 0.
  27. hh = 6
  28. while hh <= 10:
  29.     zHrs = (uvar[tidx,hh+1,lat,lon]-cuc)*(vvar[tidx,hh,lat,lon]-cvc)- \
  30.         (uvar[tidx,hh,lat,lon]-cuc)*(vvar[tidx,hh+1,lat,lon]-cvc)
  31.     Hrs = Hrs+zHrs
  32.     hh += 1
  33. Hrs = Hrs[::-1,:]

  34. print 'Plot...'
  35. axesm()
  36. mlayer = shaperead('D:/Temp/map/country1.shp')
  37. geoshow(mlayer, edgecolor='black')
  38. layer = contourfm(Hrs, 20)
  39. title('Horizontal helicity (' + t.strftime('%Y-%m-%d') + ')')
  40. colorbar(layer)


脚本运行结果图:

第一种计算平均风速的结果:
Image00180.png

第二种计算平均风速的结果:




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

新浪微博达人勋

 成长值: 19710
发表于 2015-10-8 07:02:55 | 显示全部楼层
好像每种语言都有这个函数,atan2(y,x)是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度, 范围介于 -pi 到 pi 之间(不包括 -pi),这个函数在求角度方面很有用,可以省很多判断。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-8 07:36:33 | 显示全部楼层
本帖最后由 river 于 2015-10-8 12:11 编辑

我在想求平均风那一块,平均风矢量只能是先求各分量的平均,然后合成;那平均风速就可以有两种方法,第一种就像王老师这样,第二种就是先求出全风速,然后再平均。哪一个更合理呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-10-8 09:36:19 | 显示全部楼层
兰溪之水 发表于 2015-10-8 07:02
好像每种语言都有这个函数,atan2(y,x)是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角 ...

感谢你的提示,的确是这样。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-10-8 09:47:41 | 显示全部楼层
river 发表于 2015-10-8 07:36
我在想求平均分那一块,平均风矢量只能是先求各分量的平均,然后合成;那平均风速就可以有两种方法,第一种 ...

感觉你说的第二种更合理一些,我再修改试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-8 21:09:38 | 显示全部楼层
MeteoInfo 发表于 2015-10-8 09:47
感觉你说的第二种更合理一些,我再修改试试。

随便用了几个数字,看了看两者间的差异,发现还是比较小的。不知道数据多了的话,这个差异会不会扩大···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-2 13:23:06 | 显示全部楼层
还有一个问题,风暴的传播速度通常取为1.5~7.0km气层间的平均风速的75%且向右偏转40°,因此,speed还应乘以0.75.
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-12-3 20:37:06 | 显示全部楼层
请教一下老师

Hrs = Hrs[::-1,:]

请问这一行的作用是什么呢?为什么要翻过来
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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