爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8759|回复: 17

[求助] 用fortran写grads用的二进制文件(解决了,也说不清原因,不知道帖子用不用删)

[复制链接]

新浪微博达人勋

发表于 2014-3-5 16:35:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 uid127 于 2014-3-5 20:36 编辑

小白求助,请大神们帮忙,具体是这样的

本人现在想把11个站的站点资料整理成grads能用的二进制文件,不过不是画站点图,所以就打算按照x=11,y=1这样的形式存成格点数据就行,不过写成二进制文件以后,原来的气温、位势高度等要素值都变得特别大或特别小,如下(比如温度,应该在±10^0-±10^1这样的数量级,现在变成了这样)
tu1.PNG

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


不知道问题阐述的是否清楚,没说清楚的地方还请指出

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

新浪微博达人勋

 楼主| 发表于 2014-3-5 16:38:16 | 显示全部楼层
已经改了快一天也不出正确的结果,希望在家园遇到贵人救命啊!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-3-5 16:49:12 | 显示全部楼层
站点数据,直接用grads绘图?
要不你参考一下http://bbs.06climate.com/forum.php?mod=viewthread&tid=4903
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-5 16:50:15 | 显示全部楼层

我不画站点图,是要进行要素的时间序列分析,只是数据是站点数据而已
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-5 18:01:19 | 显示全部楼层
写入四维数组的时候,第一个循环对么?
do i=1,l
你定义"l"了么?
输出数据的时候垂直层数循环后面三个怎么都是p
这都是哪里冒出来的啊。
虽然这些不一定是你画不出图的原因。但是请楼主提问之前务必自己先仔细检查,fortran的问题你完全可以一步步的print自己的结果定位错误,另外,你用grads画图,那就尽量给出ctl。
希望楼主有空看看‘提问的智慧’,这样便于解决你的问题,对于回答者也是一种尊重。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-5 18:43:45 | 显示全部楼层
lqouc 发表于 2014-3-5 18:01
写入四维数组的时候,第一个循环对么?
do i=1,l
你定义"l"了么?

斑竹见谅,fortran程序是我简化了的部分,完整的声明的都没问题,主要是想有懂的人帮忙看看写入二进制文件哪里不对
.ctl我这就贴上来
下次发帖之前我会注意的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-5 20:55:45 | 显示全部楼层
本帖最后由 lqouc 于 2014-3-5 20:57 编辑
uid127 发表于 2014-3-5 18:43
斑竹见谅,fortran程序是我简化了的部分,完整的声明的都没问题,主要是想有懂的人帮忙看看写入二进制文件 ...


话说垂直不是只有十层么?怎么ctl的zdef是15.
当然很有可能是fortran算的就不对,比如你的if判断里面date和z在数组里面的位置,根据你前面的描述可不是5和6啊。
你可以在write数据之前先print到屏幕上,看看是否正确。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-6 14:09:49 | 显示全部楼层
小手一抖,金币带走
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-5 21:23:37 | 显示全部楼层
来赚金币 没钱了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-25 10:25:08 | 显示全部楼层
赚金币
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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