爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7525|回复: 10

nc数据转arl格式,提问

[复制链接]

新浪微博达人勋

发表于 2020-9-5 22:32:46 | 显示全部楼层 |阅读模式

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

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

x
各位大佬,想请问一个问题,想用hysplit软件的后向轨迹追踪程序,数据格式要求arl。
问题1:目前我有的数据是6小时的nc数据(不是WRF转出来的),如果想转成arl格式文件,是否和wrf2arl一样呢?
问题2:所需的nc数据是不是将6小时的2m温度、地面的slp、各层位势高度、uv风场、垂直速度、相对湿度合并至一个文件中就行了呢?

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

新浪微博达人勋

 楼主| 发表于 2020-9-7 15:15:59 | 显示全部楼层
wrf2arl程序就是王老师的这个程序。想问问大家,利用ncep再分析资料的6小时的2m温度、地面的slp、各层位势高度、uv风场、垂直速度、相对湿度合并至一个文件之后,可以利用下面的程序转成arl格式数据么?
#--------------------------------------------------------
# Author: Yaqiang Wang
# Date: 2015-12-2
# Purpose: Convert WRF out netCDF data to ARL data
# Note: Sample
#-----------------------------------------------------------
#---- Set data folder
datadir = 'E:/Temp/Yaqiang'
#---- Set output data file
outfn = os.path.join(datadir, 'test_wrfout1.arl')
#---- Read a netCDF data file
infn = os.path.join(datadir, 'wrfout_d01_1984-05-30_12_00_00-subset')
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 = ['PSFC','HGT','T2','U10','V10','PBLH','RAINNC']
wvar3d = ['P','U','V','W','T','QVAPOR']
avar2d = ['PRSS','SHGT','T02M','U10M','V10M','PBLH','TPPA']
avar3d = ['PRES','UWND','VWND','WWND','TEMP','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 = 6
for t in range(0, tNum):
    print 'Time index: ' + str(t)
    atime = inf.gettime(t)
    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
        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,:,:]
        #convert mixing ratio to specific humidity
        sphu = sphu / (1. + sphu)
        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, '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, 'TEMP', fhour, 99, temp)
        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 += 1
arlf.close()
print 'Finished!'
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-7 15:59:33 | 显示全部楼层
zhazhawang 发表于 2020-9-7 15:15
wrf2arl程序就是王老师的这个程序。想问问大家,利用ncep再分析资料的6小时的2m温度、地面的slp、各层位势 ...

你可以先试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-7 16:30:58 | 显示全部楼层

好的,谢谢王老师~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-7-26 20:12:46 | 显示全部楼层
楼主您好 请问您的问题解决了吗 我也遇到了同样的问题 请问您是怎么处理的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-28 10:55:28 | 显示全部楼层
楼主您好,请问您做出来了吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-28 17:04:04 | 显示全部楼层
cl22 发表于 2021-11-28 10:55
楼主您好,请问您做出来了吗

可以参考这里:http://www.meteothink.org/exampl ... ory/wrfout2arl.html
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-28 18:30:53 | 显示全部楼层
MeteoInfo 发表于 2021-11-28 17:04
可以参考这里:http://www.meteothink.org/examples/meteoinfolab/trajectory/wrfout2arl.html

您好,我想问一下2d数据气压场和10uwnd、10vwnd和t2m数据分辨率不一样可以吗?分辨率不同转arl有问题吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-28 20:49:52 | 显示全部楼层
cl22 发表于 2021-11-28 18:30
您好,我想问一下2d数据气压场和10uwnd、10vwnd和t2m数据分辨率不一样可以吗?分辨率不同转arl有问题吗

分辨率要一致
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-29 09:47:44 | 显示全部楼层

好的,谢谢老师
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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