爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8796|回复: 26

MeteoInfoLab脚本示例:垂直螺旋度

[复制链接]

新浪微博达人勋

发表于 2015-10-8 14:34:20 | 显示全部楼层 |阅读模式

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

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

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

参考此贴(http://bbs.06climate.com/forum.php?mod=viewthread&tid=2396)做出的计算垂直螺旋度(单层)的脚本。正确与否未经验证。

脚本程序:
  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. f_omega = addfile('D:/Temp/nc/omega.2011.nc')

  5. print 'Calculate vertical helicity...'
  6. tidx = 173    # Jun 23, 2011
  7. t = f_uwnd.gettime(tidx)
  8. level = '700'
  9. lat = '15:55'
  10. lon = '70:135'
  11. uwnd = f_uwnd['uwnd'][tidx,level,lat,lon][::-1,:]
  12. vwnd = f_vwnd['vwnd'][tidx,level,lat,lon][::-1,:]
  13. omega = f_omega['omega'][tidx,level,lat,lon][::-1,:]
  14. wd = hcurl(uwnd, vwnd)
  15. lx = -(wd*omega*10.)/12.64*1e6

  16. print 'Plot...'
  17. axesm()
  18. mlayer = shaperead('D:/Temp/map/country1.shp')
  19. geoshow(mlayer, edgecolor='black')
  20. layer = contourfm(lx, 20)
  21. title('Vertical helicity (' + t.strftime('%Y-%m-%d') + ')')
  22. colorbar(layer)


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

新浪微博达人勋

发表于 2015-10-9 11:20:29 | 显示全部楼层
MeteoInfo 发表于 2015-10-9 10:47
更新了MeteoInfoLab使其能进行多次螺旋度等的运算,下面的例子演示了计算多层垂直螺旋度并绘制垂直分布图。 ...

有点“高大上”的感觉
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2015-10-9 10:47:49 | 显示全部楼层
本帖最后由 MeteoInfo 于 2017-4-24 10:05 编辑

更新了MeteoInfoLab使其能进行多次螺旋度等的运算,下面的例子演示了计算多层垂直螺旋度并绘制垂直分布图。lx1是北纬40度的剖面数据,y轴为气压,在追踪等值线前先用p2h函数转为高度,或者用其它的方式(等距或者等气压,需要确保y轴的值是递增的)。

脚本程序:
  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. f_omega = addfile('D:/Temp/nc/omega.2011.nc')

  5. print 'Calculate vertical helicity...'
  6. tidx = 173    # Jun 23, 2011
  7. t = f_uwnd.gettime(tidx)
  8. level = '1000:100'
  9. lat = '15:55'
  10. lon = '70:135'
  11. uwnd = f_uwnd['uwnd'][tidx,level,lat,lon][:,::-1,:]
  12. vwnd = f_vwnd['vwnd'][tidx,level,lat,lon][:,::-1,:]
  13. omega = f_omega['omega'][tidx,level,lat,lon][:,::-1,:]
  14. wd = hcurl(uwnd, vwnd)
  15. lx = -(wd*omega*10.)/12.64*1e6
  16. lx1 = lx[:,'40',:]
  17. lev1 = lx1.dimvalue(0)
  18. #lev2 = 1000 - lev1
  19. lev2 = meteo.p2h(lev1)
  20. levels = []
  21. for j in range(0, len(lev1)):
  22.     levels.append('%i' % lev1[j])
  23. lx1.setdimvalue(0, lev2)

  24. print 'Plot...'
  25. layer = contourf(lx1, 20)
  26. title('Vertical helicity (' + t.strftime('%Y-%m-%d') + ')')
  27. yticks(lev2, levels)
  28. xlabel('Longitude')
  29. ylabel('Pressure (hPa)')
  30. colorbar(layer)

vertical_helicity-1.png



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

新浪微博达人勋

发表于 2017-4-23 19:09:45 | 显示全部楼层
本帖最后由 有事秦天 于 2017-4-23 22:39 编辑

王老师,您好,如果我需要使用fnl资料绘制一个500-200hPa沿东经90°的涡度垂直剖面该怎么画呢,尝试了一下午都没能成功,特向王老师求教,附上数据 。
fnl_20140816_12_00.grib2 (13.94 MB, 下载次数: 11)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-23 22:28:48 | 显示全部楼层
王老师,看了上一楼的问题,我尝试参照您上面给的脚本修改画图,但是不知道为什么报错了,过程中有一次成功出图,但是修改了一些参数以后又报错了。脚本和报错如下,请王老师指点,谢谢!

  1. <P> print 'Open data files...'
  2. fn = 'F:/tuer/fnl20140816/M08/fnl_20140816_12_00.grib2'
  3. f = addfile(fn)
  4. print 'Calculate vertical helicity...'
  5. tidx = 0    # Jun 23, 2011
  6. level = [50000, 20000]
  7. lat = [25,40]
  8. lon = [75,105]
  9. u = f['u-component_of_wind_isobaric'][tidx,level,lat,lon][:,::-1,:]
  10. v = f['v-component_of_wind_isobaric'][tidx,level,lat,lon][:,::-1,:]
  11. vort = hcurl(u, v)
  12. wd1 = vort[:,:,[90]]
  13. lev1 = wd1.dimvalue(0)/100
  14. #lev2 = 1000 - lev1
  15. lev2 = p2h(lev1)
  16. levels = []
  17. for i in range(0, len(lev1)):
  18.     levels.append('%i' % lev1[i])
  19. wd1.setdimvalue(0, lev2)
  20. print 'Plot...'
  21. layer = contourf(wd1,20)
  22. #title('Vertical helicity (' + t.strftime('%Y-%m-%d') + ')')
  23. yticks(lev2, levels)
  24. xlabel('Latitude')
  25. ylabel('Pressure (hPa)')
  26. colorbar(layer)
  27. </P>
复制代码
报错:Traceback (most recent call last):
  File "<iostream>", line 21, in <module>
  File "F:\11\MeteoInfo\pylib\mipylib\miplot.py", line 3489, in contourf
    igraphic = GraphicFactory.createContourPolygons(gdata.data, ls, smooth)
at wContour.Contour.traceIsoline_UndefData(Contour.java:2067)
at wContour.Contour.isoline_UndefData(Contour.java:2405)
at wContour.Contour.createContourLines_UndefData(Contour.java:551)
at wContour.Contour.tracingContourLines(Contour.java:38)
at org.meteoinfo.drawing.ContourDraw.tracingContourLines(ContourDraw.java:81)
at org.meteoinfo.chart.plot.GraphicFactory.createContourPolygons(GraphicFactory.java:560)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
java.lang.ArrayIndexOutOfBoundsException: java.lang.ArrayIndexOutOfBoundsException: -1


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

新浪微博达人勋

 楼主| 发表于 2017-4-24 10:01:21 | 显示全部楼层
有事秦天 发表于 2017-4-23 19:09
王老师,您好,如果我需要使用fnl资料绘制一个500-200hPa沿东经90°的涡度垂直剖面该怎么画呢,尝试了一下 ...

参考下面的脚本:

  1. fn = 'D:/Temp/grib/fnl_20140816_12_00.grib2'
  2. f = addfile(fn)
  3. print 'Calculate vertical helicity...'
  4. tidx = 0
  5. level = '50000:20000'
  6. lat = '25:40'
  7. lon = '75:105'
  8. u = f['u-component_of_wind_isobaric'][tidx,level,lat,lon][::-1,:,:]
  9. v = f['v-component_of_wind_isobaric'][tidx,level,lat,lon][::-1,:,:]
  10. vort = hcurl(u, v)
  11. wd1 = vort[:,:,'90']
  12. lev1 = wd1.dimvalue(0)/100
  13. lev1 = lev1[::-1]
  14. lev2 = meteo.p2h(lev1)
  15. levels = []
  16. for j in range(0, len(lev1)):
  17.     levels.append('%i' % lev1[j])
  18. wd1.setdimvalue(0, lev2)
  19. print 'Plot...'
  20. layer = contourf(wd1,20)
  21. title(u'Vertical helicity (Longitude: 90°E)')
  22. yticks(lev2, levels)
  23. xlabel('Latitude')
  24. ylabel('Pressure (hPa)')
  25. colorbar(layer)

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

新浪微博达人勋

 楼主| 发表于 2017-4-24 10:03:49 | 显示全部楼层
半颗麦芽糖 发表于 2017-4-23 22:28
王老师,看了上一楼的问题,我尝试参照您上面给的脚本修改画图,但是不知道为什么报错了,过程中有一次成功 ...

较新的MeteoInfoLab对于维数据值用字符串来表示,列表只能表示序号。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-24 10:44:49 | 显示全部楼层
MeteoInfo 发表于 2017-4-24 10:03
较新的MeteoInfoLab对于维数据值用字符串来表示,列表只能表示序号。

感谢王老师回复,查看了一下自己用的还是1.3.9版本的,更新了以后照着您提供的脚本出图成功了,看来确实是这些时间关注得少了,还得继续加油!再次感谢王老师!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-24 14:36:17 | 显示全部楼层
MeteoInfo 发表于 2017-4-24 10:03
较新的MeteoInfoLab对于维数据值用字符串来表示,列表只能表示序号。

王老师,您好,我将这个fnl资料放到超算上,使用milab.sh画相同的图,结果报错,报错如下,是不是milab版本的问题呢?
1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-24 14:42:21 | 显示全部楼层
半颗麦芽糖 发表于 2017-4-24 14:36
王老师,您好,我将这个fnl资料放到超算上,使用milab.sh画相同的图,结果报错,报错如下,是不是milab版 ...

很有可能是版本问题
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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