爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfo脚本示例:GRIB to ARL

[复制链接]

新浪微博达人勋

 楼主| 发表于 2015-6-30 15:13:50 | 显示全部楼层
chenxl 发表于 2015-6-30 14:57
老师,我想请教3个关于wrf-out数据错列的问题。1 wrf输出数据出现错列是由于什么导致的呢?可不可以通过wrf ...

1、错列应该是WRF本身设计成这样,是否能够通过设置修改输出我也不知道(没转过WRF)。是否错列,你自己用MeteoInfo打开数据可以看变量的维是否有错列维(有staggered字符)。

2、应该和错列关系不大,你可以看看两个数据的风场差别大不大。

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

新浪微博达人勋

发表于 2015-6-30 19:25:32 | 显示全部楼层
MeteoInfo 发表于 2015-6-30 15:13
1、错列应该是WRF本身设计成这样,是否能够通过设置修改输出我也不知道(没转过WRF)。是否错列,你自己 ...

谢谢老师。我自己再摸索摸索。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-1 14:36:04 | 显示全部楼层
王老师,您好,我近期工作也是用格点资料转化成arl资料
我尝试了转化了一下,发现可以转化生成arl数据,但是我对比了一下,arl资料和原始的grads资料有错误
地表资料没有问题,但是上层资料数据是错误的,与grads资料不对应

http://pan.baidu.com/s/1i39xW7z,提取码:25mb
这是我的资料,griball.grd是原数据,ctl是说明文件,test.arl是我用资料生成的文件

下面是我的脚本

#--------------------------------------------------------        
# Author: Yaqiang Wang                                          
# Date: 2014-10-24                                               
# Purpose: Convert Grads data to ARL data  
# Note: Sample                                                   
#-----------------------------------------------------------
from org.meteoinfo.data.meteodata import MeteoDataInfo
from org.meteoinfo.data.meteodata.arl import ARLDataInfo
from org.meteoinfo.data.meteodata.arl import DataLabel
import os

#---- Set directories
dataDir = "F:/shuiqi/ncep"

#---- Set output data file
outFile = os.path.join(dataDir, 'test.arl')

#---- Read a GRADS data file
mydata = MeteoDataInfo()
infile = os.path.join(dataDir, 'griball.ctl')
print infile
mydata.openGrADSData(infile)
print 'GRADS file has been opened...'


#---- Set output ARL data info
arlDI = ARLDataInfo()


#---- Set variable and level list
gvars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
avars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
levels = [0,1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10]
for l in levels:
  arlDI.levels.add(l)
  if l == 0:
    arlDI.LevelVarList.add(['PRSS','T02M','U10M','V10M'])
#  elif l == [1000,925,850,700,600,500,400,300]:
#    arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])
#  elif l == [250,200,150,100]:
#    arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND'])
  else:
    arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])   
#---- Write ARL data file

dataInfo = mydata.getDataInfo()
arlDI.createDataFile(outFile)
arlDI.X = dataInfo.getXDimension().getValues()
arlDI.Y = dataInfo.getYDimension().getValues()
variables = dataInfo.getVariables()
tNum = dataInfo.getTimeNum()
for t in range(0, tNum):
  mydata.setTimeIndex(t)
  atime = dataInfo.getTimes().get(t)
  aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'NCEP', 2)
  arlDI.writeIndexRecord(atime, aDH)
  lidx = 0
  for l in arlDI.levels:
    print l
    for v in arlDI.LevelVarList[lidx]:
      vName = gvars[avars.index(v)]
      print vName
      if lidx == 0:
        mydata.setLevelIndex(lidx)
      else:
        variable = dataInfo.getVariable(vName)
        nlidx = variable.getZDimension().getDimValue().indexOf(l*100.0)
        mydata.setLevelIndex(nlidx)
      gData = mydata.getGridData(vName)
      if v == 'PRSS' or v == 'WWND':
        gData = gData.div(100)      
      aDL = DataLabel(atime)
      aDL.setLevel(lidx)
      aDL.setVarName(v)
      aDL.setGrid(99)
      aDL.setForecast(0)
      arlDI.writeGridData(aDL, gData)
    lidx += 1
arlDI.closeDataFile()

print 'Finished!'

不知道是什么地方出现问题了,不知道您能不能帮助修改一下。
谢谢老师了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-1 14:42:29 | 显示全部楼层
希望能尽快得到回复,谢谢啦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-1 22:22:51 | 显示全部楼层
本帖最后由 MeteoInfo 于 2015-7-1 22:24 编辑
红色的兔子 发表于 2015-7-1 14:42
希望能尽快得到回复,谢谢啦


首先你的ctl文件中需要加上options yrev,因为你的数据是Y轴反向的,从PRSS变量的图形很容易看出来。

修改后的脚本程序如下:
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2014-10-24                                               
  4. # Purpose: Convert Grads data to ARL data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------
  7. from org.meteoinfo.data.meteodata import MeteoDataInfo
  8. from org.meteoinfo.data.meteodata.arl import ARLDataInfo
  9. from org.meteoinfo.data.meteodata.arl import DataLabel
  10. import os

  11. #---- Set directories
  12. dataDir = "D:/Temp/test"

  13. #---- Set output data file
  14. outFile = os.path.join(dataDir, 'test.arl')

  15. #---- Read a GRADS data file
  16. mydata = MeteoDataInfo()
  17. infile = os.path.join(dataDir, 'griball.ctl')
  18. print infile
  19. mydata.openGrADSData(infile)
  20. print 'GRADS file has been opened...'


  21. #---- Set output ARL data info
  22. arlDI = ARLDataInfo()


  23. #---- Set variable and level list
  24. gvars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
  25. avars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
  26. levels = [0,1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10]
  27. for l in levels:
  28.     arlDI.levels.add(l)
  29.     if l == 0:
  30.         arlDI.LevelVarList.add(['PRSS','T02M','U10M','V10M'])
  31.     elif l >= 300:
  32.         arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])
  33.     else:
  34.         arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND'])
  35.     #else:
  36.     #    arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])   
  37. #---- Write ARL data file

  38. dataInfo = mydata.getDataInfo()
  39. arlDI.createDataFile(outFile)
  40. arlDI.X = dataInfo.getXDimension().getValues()
  41. arlDI.Y = dataInfo.getYDimension().getValues()
  42. variables = dataInfo.getVariables()
  43. tNum = dataInfo.getTimeNum()
  44. for t in range(0, tNum):
  45.     mydata.setTimeIndex(t)
  46.     atime = dataInfo.getTimes().get(t)
  47.     aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'NCEP', 2)
  48.     arlDI.writeIndexRecord(atime, aDH)
  49.     lidx = 0
  50.     for l in arlDI.levels:
  51.         print l
  52.         for v in arlDI.LevelVarList[lidx]:
  53.             vName = gvars[avars.index(v)]
  54.             print vName
  55.             if lidx == 0:
  56.                 mydata.setLevelIndex(lidx)
  57.             else:
  58.                 variable = dataInfo.getVariable(vName)
  59.                 nlidx = variable.getZDimension().getDimValue().indexOf(l*1.0)
  60.                 if nlidx < 0:
  61.                     print 'No level: ' + str(l)
  62.                     continue
  63.                 mydata.setLevelIndex(nlidx)
  64.             gData = mydata.getGridData(vName)
  65.             if v == 'PRSS' or v == 'WWND':
  66.                 gData = gData.div(100)      
  67.             aDL = DataLabel(atime)
  68.             aDL.setLevel(lidx)
  69.             aDL.setVarName(v)
  70.             aDL.setGrid(99)
  71.             aDL.setForecast(0)
  72.             arlDI.writeGridData(aDL, gData)
  73.         lidx += 1
  74. arlDI.closeDataFile()

  75. print 'Finished!'

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

新浪微博达人勋

发表于 2015-7-2 08:15:03 | 显示全部楼层
MeteoInfo 发表于 2015-7-1 22:22
首先你的ctl文件中需要加上options yrev,因为你的数据是Y轴反向的,从PRSS变量的图形很容易看出来。
...

谢谢王老师,万分感谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-24 17:17:20 | 显示全部楼层
请问有没有输出到micaps4类格式的没,我看文档里面没有micaps4INFO类里面没有输出的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-25 18:10:56 | 显示全部楼层
lovechang1314 发表于 2015-7-24 17:17
请问有没有输出到micaps4类格式的没,我看文档里面没有micaps4INFO类里面没有输出的?

目前没有这样的功能。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-4 15:38:16 | 显示全部楼层
脚本一直都是很难研究的问题,受益匪浅
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-9-8 20:47:46 | 显示全部楼层
王老师,我最近使用您修改的脚本转化数据。之前转化成功了,但是最近我换了一组数据之后,结果又出现了错误了。我运行脚本之后,能生成arl文件,但是生成的数据用meteoinfo和hysplit软件都不能打开。

链接: http://pan.baidu.com/s/1gdJGkJD ,提取密码: f7fg
这是我的资料,griball199105.grd是原数据,griball199105.ctl是说明文件,FGOALS199105.arl是我用资料生成的文件,1.py是修改过的脚本。
不知道错误出现在哪里
希望您抽空看一下。万分感谢
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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