MeteoInfo的个人博客分享 http://blog.sciencenet.cn/u/MeteoInfo

博文

Little endian HYSPLIT concentration data reading

已有 3280 次阅读 2017-4-28 10:32 |个人分类:MeteoInfo|系统分类:科研笔记

昨天在HYSPLIT的论坛上看到一个帖子说以前老版本HYSPLIT输出的浓度数据新版本读不了,目前维护HYSPLIT模式的科学家Arial Stein回帖说应该是数据被破坏了。我下载了有问题的示例数据文件,大致看了看,感觉可能是字节顺序的问题,HYSPLIT输出的浓度数据是二进制的自定义格式文件,规定是big endian,但老版本也可能输出little endian的数据。通过修改MeteoInfoLib中读取HYSPLIT浓度数据的代码(之前只能读big endian的数据)进行了简单的测试,基本确定是little endian的问题。因此在HYSPLITConcDataInfo类中增加了byteOrder变量,可以事先确定byteOrder为ByteOrder.BIG_ENDIAN或ByteOrder.LITTLE_ENDIAN,在数据解码过程中根据byteOrder读取相应数据。这样就可以正确读取little endian的数据了。


正常的HYSPLIT浓度数据读取绘图代码:


fn = 'D:/Temp/HYSPLIT/cdump'

f = addfile_hyconc(fn)

data = f['TEST'][0,0,:,:]

axesm()

lworld = shaperead('D:/Temp/Map/country1.shp')

geoshow(lworld)

layer = imshowm(data)

colorbar(layer)


对于little endian的浓度数据在addfile_hyconc函数中要添加big_endian参数为False:


fn = 'D:/Temp/HYSPLIT/cdump.t00z'

f = addfile_hyconc(fn, big_endian=False)

data = f['SO2'][25,0,:,:]

axesm()

lworld = shaperead('D:/Temp/Map/country1.shp')

geoshow(lworld, edgecolor='k')

levs = arange(0.2, 10, 0.2)

layer = imshowm(data, levs, cmap='WhBlGrYeRe')

colorbar(layer)

xlim(-161, -154)

ylim(17, 21)

title('HYSPLIT concentration data with little endian')






https://blog.sciencenet.cn/blog-611158-1051696.html

上一篇:增加对复数的支持
下一篇:Mixed grib-1 and grib-2 data file
收藏 IP: 114.247.188.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-23 10:14

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部