爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10781|回复: 25

可以计算一整年Trajectory的脚本

[复制链接]

新浪微博达人勋

发表于 2014-8-24 21:01:21 | 显示全部楼层 |阅读模式

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

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

x
利用HYSPLIT GUI或者TrajStat可以一次计算一个月的气团轨迹,但对于要大批量计算长时间序列的轨迹来说还是不够方便。这里给出一个能够一次计算一年轨迹的脚本,会极大地减少工作量。需要最新的MeteoInfo Java版软件和TrajStat Java版plugin。
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-7-11
  4. # Purpose: Run TrajStat - calculate trajectories
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. import sys
  8. sys.path.append('D:/MyProgram/java/MeteoInfoDev/MeteoInfo/plugins/TrajStat/TrajStat.jar')
  9. import os
  10. import time
  11. from datetime import datetime
  12. from datetime import timedelta
  13. from calendar import monthrange
  14. from trajstat.trajectory import TrajUtil
  15. from trajstat.trajectory import TrajConfig

  16. # Set working directory
  17. metDir = 'P:/MetData/MetData'
  18. outDir = 'O:/trajectory/bishkek/trajdata'

  19. # Get month abstract string
  20. def getmonthstr(m):  
  21.   mmm = 'jan'
  22.   if m == 1:
  23.     mmm = 'jan'
  24.   elif m == 2:
  25.     mmm = 'feb'
  26.   elif m == 3:
  27.     mmm = 'mar'
  28.   elif m == 4:
  29.     mmm = 'apr'
  30.   elif m == 5:
  31.     mmm = 'may'
  32.   elif m == 6:
  33.     mmm = 'jun'
  34.   elif m == 7:
  35.     mmm = 'jul'
  36.   elif m == 8:
  37.     mmm = 'aug'
  38.   elif m == 9:
  39.     mmm = 'sep'
  40.   elif m == 10:
  41.     mmm = 'oct'
  42.   elif m == 11:
  43.     mmm = 'nov'
  44.   elif m == 12:
  45.     mmm = 'dec'

  46.   return mmm

  47. # Get GDAS1 meteorological data files by time
  48. def getmeteofiles(y, m):
  49.   ystr = str(y)[2:]
  50.   mmm = getmonthstr(m)
  51.   fns = []
  52.   # The meteo files of this month
  53.   cdir = os.path.join(metDir, str(y))
  54.   for i in range(1,6):
  55.     fn = os.path.join(cdir, 'gdas1.' + mmm + ystr + '.w' + str(i))
  56.     if os.path.exists(fn):
  57.       fns.append(fn)

  58.   # The last two meteo files of last month  
  59.   m = m - 1
  60.   if m == 0:
  61.     m = 12
  62.     y = y - 1
  63.     ystr = str(y)[2:]
  64.     cdir = os.path.join(metDir, str(y))
  65.   mmm = getmonthstr(m)
  66.   fn = os.path.join(cdir, 'gdas1.' + mmm + ystr + '.w4')
  67.   fns.append(fn)
  68.   fn = os.path.join(cdir, 'gdas1.' + mmm + ystr + '.w5')
  69.   if not os.path.exists(fn):
  70.     fn = os.path.join(cdir, 'gdas1.' + mmm + ystr + '.w3')
  71.   fns.append(fn)

  72.   return fns

  73. # Set parameters
  74. print 'Set paramters...'
  75. year = 2011
  76. tc = TrajConfig()
  77. tc.setStartDay(1)
  78. tc.setStartHours('00 06 12 18')
  79. tc.setLocation('42.68 74.69 1000.00')
  80. tc.setRunHours(-96)
  81. tc.setTopOfModel(10000.0)
  82. tc.setVertical(0)
  83. tc.setOutPath(outDir)

  84. # Loop - one year calculation
  85. print 'Trajectory calculation...'
  86. for month in range(1, 13):
  87.   print 'Month: ' + str(month)  
  88.   eday = monthrange(year, month)[1]
  89.   tc.setEndDay(eday)
  90.   tc.initStartTime(year, month)
  91.   fns = getmeteofiles(year, month)
  92.   tc.setMeteoFiles(fns)
  93.   #TrajUtil.trajCal(tc)
  94.   print 'Convert trajectory endpoint files to tgs files...'
  95.   TrajUtil.trajToTGS(tc)
  96.   print 'Join tgs files...'
  97.   tgsfn = TrajUtil.joinTGSFiles(tc)
  98.   print 'Convert tgs file to shape file...'
  99.   shpfn = tgsfn.replace('.tgs','.shp')
  100.   TrajUtil.convertToShapeFile(tgsfn, shpfn)
  101.   print 'Remove trajectory files...'
  102.   TrajUtil.removeTrajFiles(tc)

  103. print 'Finish !'


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

新浪微博达人勋

发表于 2014-8-24 22:33:54 | 显示全部楼层
沙发!王老师新作!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-29 11:15:11 | 显示全部楼层
多谢分享。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-6-26 10:20:46 | 显示全部楼层
1、要算一阵年的反向轨迹,然后进行聚类,必须在metroinfo里面用上述程序做吗?目前在trajstat中不能直接算吗?
2、进行反向轨迹计算,并在此基础上进行PSCF分析的数据是在Gridded Meteorological Data Archives中下载WRF ARW (Weather Research & Forecasting Model for CAPTEX Tracer Experiment)中的数据么?
菜鸟一只,望不要嫌弃!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-26 10:22:29 | 显示全部楼层
数据下载位置是这个吗?
76V]`5_H41VI[~$E~38_%L9.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-7-10 19:48:53 | 显示全部楼层
王老师,这个计算一年的后向轨迹的脚本,怎么用到TrajStat里面啊?只运行脚本的话,不能得到什么结果啊/(ㄒoㄒ)/~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-7-14 10:31:50 | 显示全部楼层
{:eb502:} 謝謝您的分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-7-17 12:58:58 | 显示全部楼层
修改了文件的路径,并且101.  #TrajUtil.trajCal(tc)的#去掉,结果出现
Percent complete:  99.0
Percent complete: 100.0
Complete Hysplit
HYSPLIT49 (Oct 2008) - Initialization
  NOTICE: using namelist file
不停的循环,是什么原因,如何停止脚本,并正确的计算一年轨迹呢?

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

新浪微博达人勋

 楼主| 发表于 2016-7-17 19:53:41 | 显示全部楼层
dtlyr 发表于 2016-7-17 12:58
修改了文件的路径,并且101.  #TrajUtil.trajCal(tc)的#去掉,结果出现
Percent complete:  99.0
Perce ...

就是要循环计算呀,不然怎么能一次计算一年的轨迹呢。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-7-17 21:34:31 | 显示全部楼层
MeteoInfo 发表于 2016-7-17 19:53
就是要循环计算呀,不然怎么能一次计算一年的轨迹呢。

如果中途要终止程序应该如何操作?
计算一年大概需要多久?运行了20多分钟都没有结果呢?
感觉code对于不熟悉jython 的新手操作起来还是有难度,如果有详细的如何运行出结果的例子就好了?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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