爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6485|回复: 12

grib资料转换成ARL的问题

[复制链接]

新浪微博达人勋

发表于 2018-9-22 14:41:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 rolemodel 于 2018-9-22 16:17 编辑

我用王老师的程序进行grib资料到ARL资料的转换,报错为
run script...
C:/hysplit4/working\hebing.grib
GRIB data file has been opened...
Time index: 0
2013-06-29 00:00
PRSS Surface_pressure_surface
T02M 2_metre_temperature_surface
U10M 10_metre_U_wind_component_surface
indices must be 3 dimensions!
Traceback (most recent call last):
  File "D:\meteoinfojb\6yue2930.py", line 57, in <module>
    ksum = arlf.writedatarec(atime, 0, avname, fhour, 99, gdata)
  File "D:\metoinfo\MeteoInfo\pylib\mipylib\dataset\dimdatafile.py", line 456, in writedatarec
    ksum = self.arldata.writeGridData(t, lidx, vname, fhour, grid, data.asarray())
AttributeError: 'NoneType' object has no attribute 'asarray'


这是我的脚本
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 data folder
datadir = 'C:/hysplit4/working'
#---- Set output data file
outfn = os.path.join(datadir, '201306.arl')
#if os.path.exists(outfn):
#    os.remove(outfn)
#---- Read a GRIB data file
infn = os.path.join(datadir, 'hebing.grib')
print infn
inf = addfile(infn)
print 'GRIB data file has been opened...'

#---- Set output ARL data file
arlf = addfile(outfn, 'c', dtype='arl')
#---- Set variable and level list
gvar2d = ['Surface_pressure_surface','2_metre_temperature_surface','10_metre_U_wind_component_surface',\
    '10_metre_V_wind_component_surface']
gvar3d = ['Geopotential_isobaric','Temperature_isobaric','Vertical_velocity_isobaric',\
    'U-component_of_wind_isobaric','V-component_of_wind_isobaric','Relative_humidity_isobaric']
avar2d = ['PRSS','T02M','U10M','V10M']
avar3d = ['HGTS','TEMP','WWND','UWND','VWND','SPHU']
gv = inf['Geopotential_isobaric']
nx = gv.dimlen(gv.ndim - 1)
ny = gv.dimlen(gv.ndim - 2)
levels = gv.dimvalue(gv.ndim - 3)[::-1]
nz = len(levels)
arlf.set2dvar(avar2d)
arlf.setlevels(levels)
for l in levels:
    arlf.set3dvar(avar3d)

#---- Write ARL data file
arlf.setx(gv.dimvalue(gv.ndim - 1))
arlf.sety(gv.dimvalue(gv.ndim - 2))
tNum = inf.timenum()
fhour = 0
for t in range(0, tNum):
    print 'Time index: ' + str(t)
    atime = inf.gettime(t)
    print atime.strftime('%Y-%m-%d %H:00')
    dhead = arlf.getdatahead(inf.proj, 'RSMC', 2, fhour)
    #Pre-write index record without checksum - will be over-write latter
    arlf.writeindexrec(atime, dhead)
    #Checksum list
    ksumlist = []
    # Write 2d variables
    ksums = []
    for avname,gvname in zip(avar2d, gvar2d):
        print avname + ' ' + gvname
        if avname == 'U10M' or avname == 'V10M':
            gdata = inf[gvname][t,0,:,:]
        else:
            gdata = inf[gvname][t,:,:]
        if avname == 'PRSS':
            gdata = gdata * 0.01
        ksum = arlf.writedatarec(atime, 0, avname, fhour, 99, gdata)
        ksums.append(ksum)
    ksumlist.append(ksums)
    # Write 3d variables
    for lidx in range(0, nz):
        ksums = []
        llidx = nz - lidx - 1
        print lidx
        print llidx
        for avname,gvname in zip(avar3d, gvar3d):
            print avname + ' ' + gvname
            gdata = inf[gvname][t,llidx,:,:]
            if avname == 'WWND':
                gdata = gdata * 0.01
            elif avname == 'SPHU':
                gdata = gdata * 1000.
            ksum = arlf.writedatarec(atime, lidx + 1, avname, fhour, 99, gdata)
            ksums.append(ksum)
        ksumlist.append(ksums)
    #Re-write index record with checksum
    arlf.writeindexrec(atime, dhead, ksumlist)
    fhour += 1
arlf.close()
print 'Finished!'




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

新浪微博达人勋

发表于 2019-8-11 15:35:41 | 显示全部楼层
楼主问题解决了么?我现在遇到和你一样的问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 08:55:07 | 显示全部楼层
白蜡虫哈哈 发表于 2019-8-11 15:35
楼主问题解决了么?我现在遇到和你一样的问题

你们用到的数据文件中10m风场U/V变量应该是3维的,
        if avname == 'U10M' or avname == 'V10M':
            gdata = inf[gvname][t,0,:,:]
        else:
            gdata = inf[gvname][t,:,:]

改为:
        gdata = inf[gvname][t,:,:]
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 09:07:59 | 显示全部楼层
谢谢王老师,转换格式的程序跑通了!可以在跑轨迹了,谢谢您的开源!开心
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 10:18:54 | 显示全部楼层
本帖最后由 白蜡虫哈哈 于 2019-8-12 10:23 编辑

程序跑成功了,转换后的ARL数据在meteoinfomap可以打开,然而在HYSPLIT模型中数据不能打开,也不能进行轨迹计算。
HYSPLIT-Meteorology-Display data-chek file

Traiectory-setup run-Run model

1565575970(1).jpg
1565575808(1).jpg
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 10:20:56 | 显示全部楼层
C:\Users\Administrator\Desktop\1565575970(1).jpg
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 10:57:59 | 显示全部楼层
白蜡虫哈哈 发表于 2019-8-12 10:18
程序跑成功了,转换后的ARL数据在meteoinfomap可以打开,然而在HYSPLIT模型中数据不能打开,也不能进行轨迹 ...

错误提示很清楚,仔细看看
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-12 14:45:36 | 显示全部楼层
谢谢王老师提醒,这会儿转换程序代码完全没问题了。感谢您
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-26 10:15:28 | 显示全部楼层
白蜡虫哈哈 发表于 2019-8-12 09:07
谢谢王老师,转换格式的程序跑通了!可以在跑轨迹了,谢谢您的开源!开心

大神,可以加联系方式吗 我想问问用meteoinfo转arl格式,其中有些变量设定不太懂
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2020-1-16 17:49:35 | 显示全部楼层
Cgj961016 发表于 2019-10-26 10:15
大神,可以加联系方式吗 我想问问用meteoinfo转arl格式,其中有些变量设定不太懂

大神 我也需要向您请教下metinfo 转 arl 的程序问题啊 能加下Q 吗?我是490170716
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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