爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: 【蓝】

超简单!用hysplit自带的arw2arl.exe把wrfout数据转化成hysplit可用的格式

  [复制链接]

新浪微博达人勋

发表于 2016-11-12 15:26:23 | 显示全部楼层
另外有个问题: 使用这个arw2arl.exe   windows版本的,需要netcdf库的支持吗?
如果需要,windows版本的netcdf在哪里可以下载,下载安装后需要怎么设置环境变量这个arw2arl.exe才能调用呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-11-13 19:34:31 | 显示全部楼层
陈颖 发表于 2016-11-12 15:26
另外有个问题: 使用这个arw2arl.exe   windows版本的,需要netcdf库的支持吗?
如果需要,windows版本的n ...

貌似不需要
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-1 16:32:11 | 显示全部楼层
感谢楼主分享

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
【蓝】 + 20 + 2

查看全部评分

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

新浪微博达人勋

发表于 2017-1-4 13:47:26 | 显示全部楼层
很有用,谢谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-20 14:58:08 | 显示全部楼层
我用了为什么显示NetCDF:Unkonwn file format
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-17 20:40:54 | 显示全部楼层
楼主您好呀~我也遇到这个比较大的wrfout文件转arl格式出错,请问您解决了吗?还有一个,我的wrfout是每小时输出一个文件,怎么将多个wrfout文件转成一个arl文件呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-17 21:35:09 | 显示全部楼层
飞哥哥 发表于 2017-4-20 14:58
我用了为什么显示NetCDF:Unkonwn file format

我也是遇到和你一样的问题,但是当wrfout文件较小的时候是可以成功的,当我的wrfout文件为3.2g时,这个就会出现和你一样的问题。那请问你现在解决这个问题了吗?

点评

我也是这个问题 请问您现在解决了吗  发表于 2019-5-23 23:50
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-18 11:23:27 | 显示全部楼层
李舒文 发表于 2017-5-17 21:35
我也是遇到和你一样的问题,但是当wrfout文件较小的时候是可以成功的,当我的wrfout文件为3.2g时,这个就 ...

这个程序比较傻瓜,但是简单,你用张老师给的meteoinfolab程序试试吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-18 11:24:43 | 显示全部楼层
#--------------------------------------------------------        # Author: Yaqiang Wang                                          
# Date: 2015-12-2                                            
# Purpose: Convert WRF out netCDF data to ARL data  
# Note: Sample                                                   
#-----------------------------------------------------------
#---- Set data folder
datadir = 'K:/wrfout'
#---- Set output data file
outfn = os.path.join(datadir, '20120728.arl')
if os.path.exists(outfn):
    os.remove(outfn)
#---- Read a netCDF data file
infn = os.path.join(datadir, 'wrfout_d01_2012-07-28.nc')
print infn
inf = addfile(infn)
print 'NetCDF file has been opened...'
#---- Set output ARL data file
arlf = addfile(outfn, 'c', dtype='arl')
#---- Set variable and level list
wvar2d = ['HGT','PSFC','PBLH','UST','SWDOWN','HFX','LH','T2','U10','V10','RAINNC']
wvar3d = ['P','T','U','V','W','QVAPOR']
avar2d = ['SHGT','PRSS','PBLH','USTR','DSWF','SHTF','LHTF','T02M','U10M','V10M','TPPA']
avar3d = ['PRES','TEMP','UWND','VWND','WWND','SPHU']
wv = inf['P']
nx = wv.dimlen(wv.ndim - 1)
ny = wv.dimlen(wv.ndim - 2)
levels = wv.dimvalue(wv.ndim - 3)
nz = len(levels)
arlf.setlevels(levels)
arlf.set2dvar(avar2d)
for l in levels:
    arlf.set3dvar(avar3d)
#---- Constant for poisson's equation
cp = 1004.0         # J/kg/K; specific heat
grav = 9.81         # m/s**2; gravity
rdry = 287.04       # J/kg/K; gas constant
rovcp = rdry / cp   # constant for poisson's equation
#---- Write ARL data file
arlf.setx(wv.dimvalue(wv.ndim - 1))
arlf.sety(wv.dimvalue(wv.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, 'AWRF', 1, 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,wvname in zip(avar2d, wvar2d):        
        #print avname + ' ' + wvname
        gdata = inf[wvname][t,:,:]
        if avname == 'PRSS':
            gdata = gdata * 0.01
        elif avname == 'TPPA':
            gdata = gdata * 0.001
        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 = []
        #print lidx
        pp = inf['P'][t,lidx,:,:]
        pb = inf['PB'][t,lidx,:,:]
        pres = pp + pb        
        uwnd = inf['U'][t,lidx,:,:]               
        vwnd = inf['V'][t,lidx,:,:]        
        temp = inf['T'][t,lidx,:,:]
        #potential to ambient temperature
        temp = (temp + 300.) * (pres / 100000.) ** rovcp        
        sphu = inf['QVAPOR'][t,lidx,:,:]        
        wwnd = inf['W'][t,lidx+1,:,:]
        #convert vertical velocity from m/s to hPa/s using omega = -W g rho
        wwnd = -wwnd * grav * pres * 0.01 / (rdry * temp * (1.0 + 0.6077 * sphu))
        pres = pres * 0.01
        ksum = arlf.writedatarec(atime, lidx + 1, 'PRES', fhour, 99, pres)
        ksums.append(ksum)
        ksum = arlf.writedatarec(atime, lidx + 1, 'TEMP', fhour, 99, temp)
        ksums.append(ksum)
        ksum = arlf.writedatarec(atime, lidx + 1, 'UWND', fhour, 99, uwnd[:,:nx])
        ksums.append(ksum)
        ksum = arlf.writedatarec(atime, lidx + 1, 'VWND', fhour, 99, vwnd[:ny,:])
        ksums.append(ksum)
        ksum = arlf.writedatarec(atime, lidx + 1, 'WWND', fhour, 99, wwnd)
        ksums.append(ksum)      
        ksum = arlf.writedatarec(atime, lidx + 1, 'SPHU', fhour, 99, sphu)
        ksums.append(ksum)
        ksumlist.append(ksums)
    #Re-write index record with checksum
    arlf.writeindexrec(atime, dhead, ksumlist)
    fhour += 6
arlf.close()
print 'Finished!'

;这个程序只要改改路径和 fhour += 多少就行了

点评

我这里显示没有addfile这个函数,为什么呢,这是python语言吗  发表于 2019-5-24 00:06
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-18 11:26:19 | 显示全部楼层
本帖最后由 【蓝】 于 2017-5-24 17:05 编辑
李舒文 发表于 2017-5-17 21:35
我也是遇到和你一样的问题,但是当wrfout文件较小的时候是可以成功的,当我的wrfout文件为3.2g时,这个就 ...


如果王老师的程序出问题,你去问他老人家吧 我也是拿来主义
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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