爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7414|回复: 26

请教如何把计算结果保存或转换成HYSPLIT模型需要的格式

[复制链接]

新浪微博达人勋

发表于 2017-1-10 06:25:45 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 aankai 于 2017-1-10 06:58 编辑

问题描述,我下载了NAM Data Assimilation System 10年的数据,用HYSPLIT模型软件转成了txt文件,再用R计算了平均值。现在需要把数据保存成HYSPLIT模型需要的ARL格式。试过存成netcdf文件,用HYSPLIT软件转换;也试过用王老师的脚本修改一下转换,但都没有成功。因为这两种方法都要基于WRF输出的netcdf文件,而我保存的是用R生成的.nc文件。本人新手,请各位不吝赐教!(附件是用R保存的.nc文件以及与模型转换的文本格式一致的txt文件)

T1_avg_1.txt

652.82 KB, 下载次数: 0, 下载积分: 金钱 -5

T0_avg_1.txt

652.14 KB, 下载次数: 1, 下载积分: 金钱 -5

T0_1.nc

3.41 MB, 下载次数: 1, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2017-1-10 09:03:17 | 显示全部楼层
你这是单个点的数据吗?这种数据转成ARL格式有什么用?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-10 09:47:06 | 显示全部楼层
MeteoInfo 发表于 2017-1-10 09:03
你这是单个点的数据吗?这种数据转成ARL格式有什么用?

导师布置的任务,分别计算campaign的两个点的平均值再输入模型
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-10 09:54:42 | 显示全部楼层
aankai 发表于 2017-1-10 09:47
导师布置的任务,分别计算campaign的两个点的平均值再输入模型

“输入模型”是什么意思?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-10 10:30:22 | 显示全部楼层
MeteoInfo 发表于 2017-1-10 09:54
“输入模型”是什么意思?

把气象数据和emission数据输入hysplit模型
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-10 10:57:56 | 显示全部楼层
aankai 发表于 2017-1-10 10:30
把气象数据和emission数据输入hysplit模型

问题是只有两个点的气象数据能做什么?肯定是无法计算气团轨迹的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-10 14:54:00 | 显示全部楼层
MeteoInfo 发表于 2017-1-10 10:57
问题是只有两个点的气象数据能做什么?肯定是无法计算气团轨迹的。

我现在只计算了两个点,最终需要计算整个地区的平均值,所以除了把结果保存成arl格式文件,另一个问题是如何计算整个地区的平均值。因为用软件转成txt文件,一次只能选一个点。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-10 15:12:40 | 显示全部楼层
aankai 发表于 2017-1-10 14:54
我现在只计算了两个点,最终需要计算整个地区的平均值,所以除了把结果保存成arl格式文件,另一个问题是 ...

不用转为txt文件,可以用MeteoInfoLab软件脚本直接读取ARL格式格点数据,平均后再输出。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-11 08:58:00 | 显示全部楼层
MeteoInfo 发表于 2017-1-10 15:12
不用转为txt文件,可以用MeteoInfoLab软件脚本直接读取ARL格式格点数据,平均后再输出。

没想到MeteoInfo这么强大!我一定要在实验室好好推广一下。多谢王老师!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-16 07:55:41 | 显示全部楼层
MeteoInfo 发表于 2017-1-10 15:12
不用转为txt文件,可以用MeteoInfoLab软件脚本直接读取ARL格式格点数据,平均后再输出。

王老师,现在我可以把arl数据直接读出来算平均,怎样再存成ARL格式呢?之前是3-hr的数据,我现在算出了每一个格点的日平均,不知道怎么保存。我对python是新手,模型也是刚刚接触,总问些基础的问题,麻烦您了!

# Set working directory
meteoDir = '/Users/kaif/Downloads/ARLdata1'

# Open meteorological data file
print 'Open meteorological data file...'
meteof = [1]*11
for i in range(0,11):
    meteofn = os.path.join(meteoDir, os.listdir(meteoDir))
    print 'Meteorological file: ' + meteofn
    meteof = addfile(meteofn)

# Read data
print 'Read data...'
rh = meteof[0]['U10M'][:,:,:,:]

#calculate average and save to rh
for i in range(0,10):
    for j in range(0,10):
        m=0
        for k in range(0,120,8):
            a=0
            for l in range(0,11):
                a=a+sum(meteof[l]['U10M'][k:k+7,0,i,j])
            rh[m,i,j]=a/88
            rh[m+1:m+7,i,j]=-1
            m+=8
        print i,j

#From here, the code is from MeteoInfoLab scripts, and I did some revisions
#---- Set times - this case show seasonal variation
cal = Calendar.getInstance()
cal.set(2010, 5, 1, 0 ,0 ,0)
sTime = cal.getTime()
cal.set(2010, 5, 15, 0, 0, 0)
eTime = cal.getTime()
aTime = sTime
from java.text import SimpleDateFormat
format = SimpleDateFormat('yyyyMMdd')
cal.setTime(sTime)

outFile = os.path.join(meteoDir, 'test2.arl')
mydata = MeteoDataInfo()
mydata.openARLData('/Users/fankai/Downloads/ARLdata1/edas.jun15.001')
arlDI = ARLDataInfo()
avars = ['U10M']
levels = [0]
for l in levels:
    arlDI.levels.add(l)
    if l == 0:
        arlDI.LevelVarList.add(['U10M'])
#    else:
#        arlDI.LevelVarList.add([])
dataInfo = mydata.getDataInfo()
arlDI.createDataFile(outFile)
arlDI.X = dataInfo.getXDimension().getValues()
arlDI.Y = dataInfo.getYDimension().getValues()
variables = dataInfo.getVariables()
tNum = 15

for t in range(0, tNum):
    aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'FNL1', 2)
    arlDI.writeIndexRecord(atime, aDH)
    lidx = 0
    for l in arlDI.levels:
        print l
        for v in arlDI.LevelVarList[lidx]:
            vName = rh
            print vName
            if lidx == 0:
               mydata.setLevelIndex(lidx)
            else:
               variable = dataInfo.getVariable(vName)
#        nlidx = variable.getZDimension().getDimValue().indexOf(l*100.0)
#        mydata.setLevelIndex(nlidx)
            aDL = DataLabel(atime)
            aDL.setLevel(lidx)
            aDL.setVarName(v)
            aDL.setGrid(99)
            aDL.setForecast(0)
            arlDI.writeGridData(aDL, rh)
        lidx += 1

arlDI.closeDataFile()

print 'Finished!'

显示错误:
Traceback (most recent call last):
  File "<iostream>", line 32, in <module>
TypeError: getDataHead(): expected 5 args; got 3

数据:EDAS 40km
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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