爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: 良辰

grib2转arl过程中遇到问题,求指点!

[复制链接]

新浪微博达人勋

 楼主| 发表于 2016-8-1 20:30:51 | 显示全部楼层
MeteoInfo 发表于 2016-8-1 15:52
那只能在结果文件中写21层了。
  1. #--------------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2016-2-4
  4. # Purpose: Convert GRIB data to ARL data
  5. # Note: Sample
  6. #-----------------------------------------------------------
  7. #---- Set data folder
  8. datadir = 'D:/Temp'
  9. #---- Set output data file
  10. outfn = os.path.join(datadir, 'arl/fnl_20150218_06_00.grib2.arl')
  11. #if os.path.exists(outfn):
  12. #    os.remove(outfn)
  13. #---- Read a GRIB data file
  14. infn = os.path.join(datadir, 'grib/fnl_20150218_06_00.grib2')
  15. print infn
  16. inf = addfile(infn)
  17. print 'GRIB data file has been opened...'
  18. #---- Set output ARL data file
  19. arlf = addfile(outfn, 'c', dtype='arl')
  20. #---- Set variable and level list
  21. gvar2d = ['Pressure_surface','Temperature_surface','u-component_of_wind_height_above_ground',\
  22.     'v-component_of_wind_height_above_ground']
  23. gvar3d = ['Geopotential_height_isobaric','Temperature_isobaric',\
  24.     'u-component_of_wind_isobaric','v-component_of_wind_isobaric',\
  25.     'Vertical_velocity_pressure_isobaric','Relative_humidity_isobaric']
  26. avar2d = ['PRSS','T02M','U10M','V10M']
  27. avar3d = ['HGTS','TEMP','UWND','VWND','WWND','RELH']
  28. gv = inf['Geopotential_height_isobaric']
  29. nx = gv.dimlen(gv.ndim - 1)
  30. ny = gv.dimlen(gv.ndim - 2)
  31. #levels = gv.dimvalue(gv.ndim - 3)[::-1]
  32. levels = [1000,975,950,925,900,850,800,750,700,\
  33.   650,600,550,500,450,400,350,300,250,200,150,100]
  34. nz = len(levels)
  35. arlf.setlevels(levels)
  36. arlf.set2dvar(avar2d)
  37. for l in levels:
  38.     arlf.set3dvar(avar3d)

  39. #---- Write ARL data file
  40. arlf.setx(gv.dimvalue(gv.ndim - 1))
  41. arlf.sety(gv.dimvalue(gv.ndim - 2))
  42. tNum = inf.timenum()
  43. fhour = 0
  44. for t in range(0, tNum):
  45.     print 'Time index: ' + str(t)
  46.     atime = inf.gettime(t)
  47.     print atime.strftime('%Y-%m-%d %H:00')
  48.     dhead = arlf.getdatahead(inf.proj, 'RSMC', 2, fhour)
  49.     #Pre-write index record without checksum - will be over-write latter
  50.     arlf.writeindexrec(atime, dhead)
  51.     #Checksum list
  52.     ksumlist = []
  53.     # Write 2d variables
  54.     ksums = []
  55.     for avname,gvname in zip(avar2d, gvar2d):
  56.         print avname + ' ' + gvname
  57.         if avname == 'U10M' or avname == 'V10M':
  58.             gdata = inf[gvname][t,0,:,:]
  59.         else:
  60.             gdata = inf[gvname][t,:,:]
  61.         if avname == 'PRSS':
  62.             gdata = gdata * 0.01
  63.         ksum = arlf.writedatarec(atime, 0, avname, fhour, 99, gdata)
  64.         ksums.append(ksum)
  65.     ksumlist.append(ksums)
  66.     # Write 3d variables
  67.     for lidx in range(0, nz):
  68.         ksums = []
  69.         llidx = nz - lidx - 1
  70.         print lidx
  71.         print llidx
  72.         for avname,gvname in zip(avar3d, gvar3d):
  73.             print avname + ' ' + gvname
  74.             gdata = inf[gvname][t,llidx,:,:]   
  75.             if avname == 'WWND':
  76.                gdata = gdata * 0.01      
  77.             ksum = arlf.writedatarec(atime, lidx + 1, avname, fhour, 99, gdata)           
  78.             ksums.append(ksum)
  79.         ksumlist.append(ksums)
  80.     #Re-write index record with checksum
  81.     arlf.writeindexrec(atime, dhead, ksumlist)
  82.     fhour += 1
  83. arlf.close()
  84. print 'Finished!'
复制代码

王老师,我又被虐了!计算出来后三维变量都是一样的!哪个循环错了!呜呜。写入的都是V10M
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-8-1 22:26:04 | 显示全部楼层
良辰 发表于 2016-8-1 20:30
王老师,我又被虐了!计算出来后三维变量都是一样的!哪个循环错了!呜呜。写入的都是V10M

王老师,您能帮我调试一下吗?fnl资料grib2格式的我放在云盘了。两个时次的,希望一起转ARL。我这调试和过关一样,您指点我过一关,总是麻烦您!跪求帮忙调试!
链接: http://pan.baidu.com/s/1hrL8yS8 密码: 9way
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-8-2 11:34:09 来自手机 | 显示全部楼层
本帖最后由 良辰 于 2016-8-2 16:50 编辑

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

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2016-8-2 16:49:38 | 显示全部楼层
MeteoInfo 发表于 2016-8-1 15:52
那只能在结果文件中写21层了。

王老师,您能帮我调试一下吗?fnl资料grib2格式的我放在云盘了。两个时次的,希望一起转ARL。我这调试和过关一样,您指点我过一关,总是麻烦您!跪求帮忙调试!
链接: http://pan.baidu.com/s/1hrL8yS8 密码: 9way
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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