爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10640|回复: 21

MeteoInfoLab脚本示例:计算温度平流

[复制链接]

新浪微博达人勋

发表于 2015-7-12 17:24:45 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2020-6-5 10:13 编辑

需要温度和风场U/V分量格点数据,计算中主要用到cdiff函数(结果已用GrADS验证一致)。

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

  4. print 'Read data array...'
  5. tidx = 173    # Jun 23, 2011
  6. t = f_air.gettime(tidx)
  7. lidx = 0    # 1000 hPa
  8. air = f_air['air'][tidx,lidx,:,:]
  9. uwnd = f_uwnd['uwnd'][tidx,lidx,:,:]
  10. vwnd = f_vwnd['vwnd'][tidx,lidx,:,:]
  11. lon = f_air['lon'][:]
  12. lat = f_air['lat'][:]
  13. lon, lat = meshgrid(lon, lat)

  14. # Calculate
  15. print 'Calculate...'
  16. dtx = cdiff(air, 1)
  17. dty = cdiff(air, 0)
  18. dx = cdiff(lon, 1) * pi / 180
  19. dy = cdiff(lat, 0) * pi / 180
  20. tadv = -1*((uwnd*dtx)/(cos(lat*pi/180)*dx)+vwnd*dty/dy)/6.37e6

  21. #Plot
  22. print 'Plot...'
  23. axesm()
  24. geoshow('country', edgecolor='black')
  25. layer = contourfm(tadv, cmap='grads_rainbow')
  26. title('Temperature advection (' + t.strftime('%Y-%m-%d') + ')')
  27. colorbar(layer)
  28. xlim(0, 360)
  29. ylim(-90, 90)
  30. xticks(arange(0, 361, 30))
  31. yticks(arange(-90, 91, 30))

Image00895.png




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

新浪微博达人勋

发表于 2015-7-13 08:56:25 | 显示全部楼层
很给力,很强大
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-14 21:17:19 | 显示全部楼层
本帖最后由 river 于 2015-7-14 21:32 编辑

使用grads计算一下,得到的结果如下 adtv.png

色标不一样,今天有些晚了,等过几天闲下来弄个一样的色标的


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

新浪微博达人勋

 楼主| 发表于 2015-7-14 21:21:06 | 显示全部楼层
river 发表于 2015-7-14 21:17
使用grads计算一下,得到的结果如下
看着是一样的的,不过t=173的时候是2011年6月22日

谢谢。GrADS里t是从1开始的,MeteoInfo里是从0开始的,所以你用GrADS验证的话要用t=174
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-14 21:34:39 | 显示全部楼层
本帖最后由 river 于 2015-7-14 21:35 编辑
MeteoInfo 发表于 2015-7-14 21:21
谢谢。GrADS里t是从1开始的,MeteoInfo里是从0开始的,所以你用GrADS验证的话要用t=174

不客气。过几天再加上平滑和一样的色标再看看,总觉得有些不一样呢。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-14 21:45:09 | 显示全部楼层
river 发表于 2015-7-14 21:34
不客气。过几天再加上平滑和一样的色标再看看,总觉得有些不一样呢。

嗯,看起来相当不一样呀,数据用的一样的吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-15 07:54:41 | 显示全部楼层
MeteoInfo 发表于 2015-7-14 21:45
嗯,看起来相当不一样呀,数据用的一样的吗?

数据是一样的啊,2011年的日值数据。今天上班,过几天我再弄一下,更新一下图和脚本吧······
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-19 15:35:56 | 显示全部楼层
这次附上脚本:'reinit'
'set grid off'
'set grads off'
'sdfopen G:\ncep\2011\air.2011.nc'
'sdfopen G:\ncep\2011\uwnd.2011.nc'
'sdfopen G:\ncep\2011\vwnd.2011.nc'
'set t 174'
*'pi=3.1416'
'dtx = cdiff(air, 'x')'
'dty = cdiff(air, 'y')'
'dx = cdiff(lon, x) * 3.1416/ 180'
'dy = cdiff(lat, y) * 3.1416/ 180'
'tadv = -1*((uwnd.2*dtx)/(cos(lat*3.1416/180)*dx)+vwnd.3*dty/dy)/6.37e6'
'run G:\GrADS-NCL-colormaker-v1.1\output\11colors.gs'
'set gxout shaded'
'd tadv'
'run cbar_interp.gs 1 1 0'
'draw title Temporature advection(2011-06-23)'
'gxprint g:/adtv.png white'
;


最终出图如下:
adtv.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-19 16:44:06 | 显示全部楼层
river 发表于 2015-7-19 15:35
这次附上脚本:'reinit'
'set grid off'
'set grads off'

谢谢!找到问题所在了,已在1楼更新。

1、高度层是第一层(1000 hPa),所以 lidx = 0。(之前为:idx = 1)

2、更重要的是此数据集中Y轴是反向的,因此在取 lat 时应该让数组反向:lat = f_air['lat'][::-1]。(之前为:lat = f_air['lat'][:])
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-19 21:22:04 | 显示全部楼层
MeteoInfo 发表于 2015-7-19 16:44
谢谢!找到问题所在了,已在1楼更新。

1、高度层是第一层(1000 hPa),所以 lidx = 0。(之前为:idx ...

支持王老师,赶快出更多更好地教程,我已近准备学习一下Python
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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