- 积分
- 1073
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-3-31
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 uid127 于 2014-3-5 20:36 编辑
小白求助,请大神们帮忙,具体是这样的
本人现在想把11个站的站点资料整理成grads能用的二进制文件,不过不是画站点图,所以就打算按照x=11,y=1这样的形式存成格点数据就行,不过写成二进制文件以后,原来的气温、位势高度等要素值都变得特别大或特别小,如下(比如温度,应该在±10^0-±10^1这样的数量级,现在变成了这样)
ctl如下dset g:\tp\6pic_sounding6\sounding_00_05.dat
title sounding 11 stations 00UTC
undef 2766
xdef 11 linear 0 2.5
ydef 1 linear 0 2.5
zdef 15 levels 1100 1000 700 500 400 300 250 200 150 100 70 50 30 20 10
tdef 9497 linear 01jan1980 1dy
vars 4
hgt 15 99 *hgt
t 15 99 *temperature*10
wd 15 99 *wind direction
ws 15 99 *wind speed(m/s)
ENDVARS
我写的写二进制fortran程序如下,拜托各位给看一下是哪里不对
program main
implicit none
integer,parameter::n=112355,mxdy=9697
integer::temp00(n,7) !站点资料(处理后),7列分别是 x(站点号1-11) date(日期的相应时次1-mxdy) z(气压层1-10层) hgt(位势高度) t(温度) wd(风向) ws(风速)
integer::hgt00(11,1,10,mxdy)
integer::i,irec,x,z,date,
open(12,file='sd.dat')
do i=1,n
read(12,*) temp00(i,:)
end do
!!!把二维站点资料转换到x*y*z*t的四维数组里
do i=1,l
do date=1,mxdy
do x=1,11
do z=1,10
!!!判断站点的记录在某站某天某层
if(temp00(i,1)==x .and. temp00(i,5)==date .and. temp00(i,6)==z) then
hgt00(x,1,z,date)=temp00(i,4)
t00(x,1,z,date)=temp00(i,5)
wd00(x,1,z,date)=temp00(i,6)
ws00(x,1,z,date)=temp00(i,7)
end if
end do
end do
end do
end do
!!!写入二进制文件
open(13,file='sounding_00_05.dat',form='unformatted',access='direct',recl=11)
irec=0
do date=1,mxdy
do z=1,10
irec=irec+1
write(13,rec=irec) (hgt00(x,1,z,date),x=1,11)
end do
do p=1,10
irec=irec+1
write(13,rec=irec) (t00(x,1,z,date),x=1,11)
end do
do p=1,10
irec=irec+1
write(13,rec=irec) (wd00(x,1,z,date),x=1,11)
end do
do p=1,10
irec=irec+1
write(13,rec=irec) (ws00(x,1,z,date),x=1,11)
end do
end do
end
不知道问题阐述的是否清楚,没说清楚的地方还请指出
|
|