爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24534|回复: 48

MeteoInfoLab脚本示例:计算气团轨迹

[复制链接]

新浪微博达人勋

发表于 2015-9-30 21:30:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2019-7-2 10:06 编辑

这里假设计算机上已经安装了HYSPLIT(或者TrajStat),具备了气团轨迹的计算环境。其实就是写CONTROL文件,再调用hyts_std.exe计算气团轨迹。MeteoInfoLab基于Jython,下面的脚本中并未用到MeteoInfLab中封装的函数,因此是纯粹的Python代码。

计算一天的轨迹:
  1. #-----------------------------------------------------# Author: Yaqiang Wang
  2. # Date: 2015-9-30
  3. # Purpose: Run HYSPLIT trajectory model
  4. # Note: Sample
  5. #-----------------------------------------------------

  6. # Set working directory
  7. metDir = 'D:/Temp/arl'
  8. outDir = 'D:/Temp/HYSPLIT'
  9. workingDir = 'C:/hysplit4/working'
  10. os.chdir(workingDir)
  11. print 'Current directory: ' + os.getcwd()

  12. # Set parameters
  13. lon = '115.2'
  14. lat = '40.1'
  15. shour = '06'
  16. heights = ['100.0','500.0','1000.0']
  17. hnum = len(heights)
  18. hours = '-48'
  19. vertical = '0'
  20. top = '10000.0'

  21. # Set meteorological data files
  22. fns = []
  23. fn = 'gdas1.jul09.w5'
  24. fns.append(fn)

  25. # Set start/end time
  26. stime = datetime.datetime(2009,7,31)

  27. # Write CONTROL file
  28. ctFile = './CONTROL'
  29. print stime.strftime('%Y-%m-%d ') + shour + ':00'
  30. ctf = open(ctFile, 'w')
  31. ctf.write(stime.strftime('%y %m %d ') + shour + "\n")
  32. ctf.write(str(hnum) + '\n')
  33. for j in range(0,hnum):
  34.     ctf.write(lat + ' ' + lon + ' ' + heights[j] + '\n')
  35. ctf.write(hours + '\n')
  36. ctf.write(vertical + '\n')
  37. ctf.write(top + '\n')
  38. fnnum = len(fns)
  39. ctf.write(str(fnnum) + '\n')
  40. for j in range(0,fnnum):
  41.     ctf.write(metDir + '/' + '\n')
  42.     ctf.write(fns[j] + '\n')
  43. ctf.write(outDir + '/' + '\n')
  44. outfn = stime.strftime('traj_%Y%m%d')
  45. ctf.write(outfn)
  46. ctf.close()

  47. # Calculate trajectories
  48. os.system('c:/hysplit4/exec/hyts_std.exe')

  49. print 'Finish...'


计算多日的气团轨迹:
  1. import calendar

  2. # Set working directory
  3. metDir = 'U:/data/ARL'
  4. outDir = 'D:/Temp/HYSPLIT'
  5. workingDir = 'C:/hysplit4/working'
  6. os.chdir(workingDir)
  7. print 'Current directory: ' + os.getcwd()

  8. # Set parameters
  9. lon = '115.2'
  10. lat = '40.1'
  11. shour = '06'
  12. heights = ['100.0','500.0','1000.0']
  13. hnum = len(heights)
  14. hours = '-48'
  15. vertical = '0'
  16. top = '10000.0'

  17. # Get GDAS1 meteorological data files by time
  18. def getmeteofiles(t):
  19.     ystr = t.strftime('%y')
  20.     mdir = metDir + '/%s' % t.strftime('%Y')
  21.     mmm = miutil.dateformat(t, 'MMM', 'us_en').lower()
  22.     mdirs = []
  23.     fns = []
  24.     # The meteo files of this month
  25.     for i in range(1,6):
  26.         fn = 'gdas1.' + mmm + ystr + '.w' + str(i)
  27.         if os.path.exists(os.path.join(mdir, fn)):
  28.             mdirs.append(mdir)
  29.             fns.append(fn)

  30.     # The last two meteo files of last month
  31.     days = calendar.monthrange(t.year, t.month)[1]
  32.     t = t - datetime.timedelta(days=days)
  33.     ystr = t.strftime('%y')
  34.     mdir = metDir + '/%s' % t.strftime('%Y')
  35.     mmm = miutil.dateformat(t, 'MMM', 'us_en').lower()
  36.     fn = 'gdas1.' + mmm + ystr + '.w4'
  37.     mdirs.append(mdir)
  38.     fns.append(fn)
  39.     fn = 'gdas1.' + mmm + ystr + '.w5'
  40.     if os.path.exists(os.path.join(mdir, fn)):
  41.         mdirs.append(mdir)
  42.         fns.append(fn)
  43.     else:
  44.         mdirs.append(mdir)
  45.         fns.append('gdas1.' + mmm + ystr + '.w3')

  46.     return mdirs, fns

  47. # Set start/end time
  48. stime = datetime.datetime(2014,9,1)
  49. etime = datetime.datetime(2014,10,1)

  50. # Loop
  51. ctFile = './CONTROL'
  52. while stime < etime:
  53.     print stime.strftime('%Y-%m-%d ') + shour + ':00'
  54.     ctf = open(ctFile, 'w')
  55.     ctf.write(stime.strftime('%y %m %d ') + shour + "\n")
  56.     ctf.write(str(hnum) + '\n')
  57.     for j in range(0,hnum):
  58.         ctf.write(lat + ' ' + lon + ' ' + heights[j] + '\n')
  59.     ctf.write(hours + '\n')
  60.     ctf.write(vertical + '\n')
  61.     ctf.write(top + '\n')
  62.     mdirs, fns = getmeteofiles(stime)
  63.     fnnum = len(fns)
  64.     ctf.write(str(fnnum) + '\n')
  65.     for mdir,fn in zip(mdirs,fns):
  66.         ctf.write(mdir + '/' + '\n')
  67.         ctf.write(fn + '\n')
  68.     ctf.write(outDir + '/' + '\n')
  69.     outfn = stime.strftime('traj_%Y%m%d')
  70.     ctf.write(outfn)
  71.     ctf.close()
  72.     os.system('c:/hysplit4/exec/hyts_std.exe')

  73.     stime = stime + datetime.timedelta(days=1)

  74. print 'Finish...'

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

新浪微博达人勋

发表于 2015-10-1 22:30:53 | 显示全部楼层
感谢王老师分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-6 14:18:38 | 显示全部楼层
本帖最后由 hbm 于 2015-12-6 14:21 编辑

王老师,按照代码运行  ctf.write(lat + ' ' + lon + ' ' + heights<i> + '\n')
出现了错误提示,“TypeError: cannot concatenate 'str' and 'list' objects”,谢谢王老师了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-12-6 18:21:21 | 显示全部楼层
本帖最后由 MeteoInfo 于 2015-12-6 18:30 编辑
hbm 发表于 2015-12-6 14:18
王老师,按照代码运行  ctf.write(lat + ' ' + lon + ' ' + heights + '\n')
出现了错误提示,“TypeError ...

论坛对代码的处理有点小问题,heights<i>是错误的,需要把尖括号<>改为方括号[]。也可以参考这里:http://www.meteothinker.com/exam ... ctory/traj_cal.html
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-7 09:40:42 | 显示全部楼层
谢谢,王老师,我再试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-21 22:08:32 | 显示全部楼层
王老师,我把您一日的那个程序稍加改了一下,运行之后没有任何错误提示,但也没有生成当日轨迹图,求解
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-1-21 22:32:53 | 显示全部楼层
二子搞研究 发表于 2016-1-21 22:08
王老师,我把您一日的那个程序稍加改了一下,运行之后没有任何错误提示,但也没有生成当日轨迹图,求解{:eb ...

这个脚本只是计算轨迹,没有绘图的语句。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-21 22:37:20 | 显示全部楼层
MeteoInfo 发表于 2016-1-21 22:32
这个脚本只是计算轨迹,没有绘图的语句。

那老师如果想批量绘制图片的话是不是需要自己写程序了?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-1-21 22:55:41 | 显示全部楼层
二子搞研究 发表于 2016-1-21 22:37
那老师如果想批量绘制图片的话是不是需要自己写程序了?

在这里找:MeteoInfoLab脚本汇总贴
http://bbs.06climate.com/forum.p ... 151&fromuid=106
(出处: 气象家园)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-23 10:46:42 | 显示全部楼层
MeteoInfo 发表于 2016-1-21 22:32
这个脚本只是计算轨迹,没有绘图的语句。

脚本计算的轨迹不是像软件版的生成tgs文件吗?请问老师有没有关于meteinfolab脚本的教程?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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