爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5391|回复: 7

[分享资料] 有关grd数据存放顺序问题[已解决]

[复制链接]

新浪微博达人勋

发表于 2013-8-22 20:35:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lxlxllx89 于 2013-8-23 17:49 编辑

现有一个模式的输出文件,已经进行过后处理并插值到11层,现在想用fortran读取这个grd,但遇到了问题,就是这个grd前半部分是有层次的 是11层数据,后半部分是没有层次也就是1层的数据。如果想要把这个grd用fortran读入应该如何读?
CTL文件如下:
dset ATM_P.mon
title RegCM monthly pressure level output variables
options big_endian
undef -1.e34
pdef  142  100 lccr   34.00  105.00   71.00   50.00   30.00   60.00  105.00  50000.  50000.
xdef  456 linear   54.09  0.2252
ydef  223 linear    7.67  0.2252
zdef 11 levels 1000.00 925.00 850.00 700.00 500.00 400.00 300.00 250.00 200.00 150.00 100.00
tdef  252 linear 16jan1990 1mo
vars  14
u       11 33,100         westerly wind (m/s)         
v       11 34,100         southerly wind (m/s)        
omega   11 0         omega (hPa/s)   p-velocity  
h       11 0         geopotential height (m)     
t       11 0         air temperature (deg, K)   
rh      11 0         relative moisture (%)      
qv      11 0         water vapor mixing ratio   
qc      11 0         cloud water mixing ratio   
ps      0 99         surface pressure (hPa)      
slp     0 99         sea level pressure (hPa)   
tpr     0 99         total precipitation(mm/day)
tgb     0 99         lower groud temp. in BATS   
swt     0 99         total soil water in mm H2O  
rno     0 99         accumulated infiltration   
endvars
解决方法如下:
将pdef  142  100 lccr   34.00  105.00   71.00   50.00   30.00   60.00  105.00  50000.  50000.这句删除。
将xdef ydef改为
xdef  142 linear   54.09  0.7232(只需将格点改为142 100 后面分辨率任意,要的只是数据,画图用NCL完成)
ydef  100 linear    7.67  0.5022

之后用grads的fwrite写成grd就没有任何问题,感谢@river回复!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-22 21:22:32 | 显示全部楼层
这个是因为楼主还没有完全弄明白grads数据排列规则,完全明白的话很容易就能读出来了。因为完全明白就需要楼主知道怎么把数据写成grads需要的数据,会写了那自然就会读了。首先弄明白数据排列
     x    y   z  不同变量  t   
     内循环    →    外循环
每一个变量都是这么个顺序,那么就应该有思路读取了,楼主先自己试一下吧。还有一个办法,直接读取比较麻烦的的话,可以先利用fwrite命令把维数环境一样的变量放在一个文件中,把剩下只有一层的变量的放在另一个文件里,分开用fortran读取不是也挺好吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-22 21:41:59 | 显示全部楼层
很好!学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-22 23:08:39 | 显示全部楼层

谢谢回复,现在的问题是数组太大,没法读入了。。
您的第二个意见行不通,原因是grads在读此类lambert投影的时候将其自动差值到latlon投影上了
如pdef  142  100 lccr   34.00  105.00   71.00   50.00   30.00   60.00  105.00  50000.  50000.
xdef  456 linear   54.09  0.2252
ydef  223 linear    7.67  0.2252
142 100是数组的真实大小
用grads fwrite以后数组就变成456 223的了
接下来我要进行计算需要使用原始数据=,=所以还在想办法读这个数组
另 我的读取方式是:
do it=1,252
do k=1,14
if(k<=8)then
read(1)(((data1(i,j,l,k,it),i=1,nx),j=1,ny),l=1,nl)
read(2)(((data2(i,j,l,k,it),i=1,nx),j=1,ny),l=1,nl)
else
read(1)((data11(i,j,k-8,it),i=1,nx),j=1,ny)
read(2)((data21(i,j,k-8,it),i=1,nx),j=1,ny)
endif
enddo
enddo
将data1 和data2放有11层的数据 data11、data21放只有一层的数据。不知这种写法对不对
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-23 17:50:52 | 显示全部楼层
感谢回复,问题已经解决 见1L
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-29 08:37:24 | 显示全部楼层
谢谢楼主分享,正在为这个问题烦恼
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-29 08:45:28 | 显示全部楼层
请问楼主, xdef 142 linear 54.09 0.7232  ,你说后面的分辨率可以任意改,那么开始的经度,54.09可以修改吗?这个也是任意的吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-1 14:44:12 | 显示全部楼层
lxlxllx89 发表于 2013-8-22 23:08
谢谢回复,现在的问题是数组太大,没法读入了。。
您的第二个意见行不通,原因是grads在读此类lambert投 ...

今天试了这个方法,是可以的呢~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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