爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24859|回复: 32

小白总结:用WRF结果作HYSPLIT的后向轨迹追踪

  [复制链接]

新浪微博达人勋

发表于 2019-2-16 13:34:11 | 显示全部楼层 |阅读模式

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

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

x
这个总结的前提是:我对HYSPLIT和MeteoInfo一窍不通,所以完全按照气象家园的帖子去操作,可是又发现有些讲解并不清楚,讨论结果跟HYSPLIT官网中的操作过程又略有不同,然而我也没有任何人可以给予程序或者指导,于是就写下来摸索得到的我运作的流程。
(1)   安装HYSPLIT及相关组件:
下载HYSPLIT的准备软件,下载地址为https://ready.arl.noaa.gov/HYSPLIT_util.php
下载HYSPLIT,下载地址为https://ready.arl.noaa.gov/HYSPLIT_hytrial.php
按照官网的流程安装,因为害怕装不对,我都装在C盘了。
在打开HYSPLIT软件的时候,选择应用程序,用C:\tcl\bin\wish86t.exe才可以打开
(2)   安装MeteoInfo
因为官网打不开,下载MeteoInfo是在QQ群里面下载的,QQ群号为361327727:解压后即可以使用
下载后根据气象家园的帖子:
打开MeteoInfoLab,然后把脚本粘贴到第一个格子里面去,然后点击最上面的小三角,运行。路径不可以包含中文。
将wrfout转换为arl格式的py程序如下:
#--------------------------------------------------------        # Author: Yaqiang Wang                                          
# Date: 2015-12-2                                            
# Purpose: Convert WRF out netCDF data to ARL data  
# Note: Sample                                                  
#-----------------------------------------------------------
#---- Set data folder
datadir = 'E:/'
#---- Set output data file
outfn = os.path.join(datadir, 'test_wrfout1.arl')
if os.path.exists(outfn):
   os.remove(outfn)
#---- Read a netCDF data file
infn = os.path.join(datadir, 'd0120161216.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 'Timeindex: ' + str(t)
    atime =inf.gettime(t)   
    printatime.strftime('%Y-%m-%d %H:00')
    dhead =arlf.getdatahead(inf.proj, 'AWRF', 1, fhour)
    #Pre-writeindex record without checksum - will be over-write latter
   arlf.writeindexrec(atime, dhead)
    #Checksum list
    ksumlist = []
    # Write 2dvariables
    ksums = []
    foravname,wvname in zip(avar2d, wvar2d):      
        #printavname + ' ' + 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 3dvariables
    for lidx inrange(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,:,:]
        #potentialto ambient temperature
        temp =(temp + 300.) * (pres / 100000.) ** rovcp      
        sphu = inf['QVAPOR'][t,lidx,:,:]        
        wwnd =inf['W'][t,lidx+1,:,:]
        #convertvertical 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 indexrecord with checksum
   arlf.writeindexrec(atime, dhead, ksumlist)
    fhour += 6
arlf.close()
print 'Finished!'
(3)   HYSPLIT运行
在Trajectory中选择Setup run,Add meteorologyfiles中选择导出的arl文件即可


如果有人不嫌弃我白痴,我就继续把后面的学习过程也写下去。




评分

参与人数 3金钱 +21 贡献 +2 收起 理由
珮瑶瑶 + 10
mofangbao + 10 + 2
清凉月 + 1 很给力!

查看全部评分

本帖被以下淘专辑推荐:

  • · 模式|主题: 18, 订阅: 3
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-2-27 10:40:51 | 显示全部楼层
如果有人不嫌弃我白痴,我就继续把后面的学习过程也写下去。
都希望您辛苦继续写,继续解决问题,造福劳苦大众!
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-2-16 22:00:37 | 显示全部楼层
赞                  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-2-17 17:32:21 | 显示全部楼层
{:5_213:}{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-2-26 21:04:59 | 显示全部楼层
希望楼主接着往下写,请问楼主再分析资料例如 era-interim可以用这个程序转换吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-9 13:16:54 | 显示全部楼层
继续写呀!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-3-13 10:06:52 | 显示全部楼层
继续写吧,跟着一起学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-13 14:44:30 | 显示全部楼层
WRFOUT设置了嵌套网格,用做hysplit时候选择哪层的WRFOUT数据呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-13 15:05:18 | 显示全部楼层
赞一个,支持一下。写得挺好,对于我这种小白来说,真的是很有帮助
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-13 15:08:43 | 显示全部楼层
挺好挺好!!!!!楼主加油
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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