爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9895|回复: 12

[求助] linux 下fortran 建立二进制文件的问题

[复制链接]

新浪微博达人勋

发表于 2012-10-30 10:06:03 | 显示全部楼层 |阅读模式

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

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

x

我想把站点数据读成二进制的文件,然后用grads做图,根据站里的教程我读入txt然后生成二进制文件,
open(3,file='fallaop.grd',form='binary')
可是在运行fortran的时候linux下显示的错误是:
OPEN 语句中 FORM 指定了非法的值‘binary’

我又把
form='binary'改成form='unformatted',这次fortran程序可以运行,生成了二进制文件,可是到了生成map的时候,ctl如下
dset /home/corre/FALL/fallaop.grd
dtype station
stnmap index.map
undef -999.0
title drought index
tdef 1 linear Jul1951 1mo
vars 1
ind 0 99 drought index
endvars
就出现了这种错误:
Invalid station hdr found in station binary file
  Possible causes:  Invalid level count in hdr
                    Descriptor file mismatch
                    File not station data
                    Invalid relative time
    levs = 0  flag = 1  time = 126.65
上网查了下,我觉得是因为二进制数据格式的问题,应该用binary这个格式,可是linux不认?这是为什么,求帮助。


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

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-10-30 10:27:43 | 显示全部楼层
Linux的Fortran还没测试,binary不知道支不支持。把你输出的部分也贴出来吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-30 10:32:09 | 显示全部楼层
这是把txt都成二进制文件的fortran程序:

program main
real::lat(160),lon(160),ind(160)
integer::i
character*8 stid(160)

open(1,file='fall_p_ao.txt',status='old')
do i=1,160
  read(1,*) lat(i),lon(i),ind(i)
enddo
close(1)

do i=1,160
stid(i)=char(i)
end do

open(3,file='fallaop.grd',form='binary')
tim=0.0
nlev=1
nflag=1
do i=1,160
   write(3) stid(i),lat(i),lon(i),tim,nlev,nflag,ind(i)
enddo
nlev=0
write(3) stid(i-1),lat(i-1),lon(i-1),tim,nlev,nflag
close(3)
end


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

新浪微博达人勋

 成长值: 0
发表于 2012-10-30 10:59:18 | 显示全部楼层
linux的没有玩过,不过写有格式文件(binary)的时候建议用形如这样的语句写
(((x(i,j,k),i=1,m),j=1,n),k=1,o)
试试看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-30 11:12:10 | 显示全部楼层

还是不行,我编了小程序:
program ii
implicit none
open(1,file='1.grd',form='binary')
close(1)
end
还是出现的那个错误,
(1)处 OPEN 语句中 FORM 指定了非法的值‘binary’

应该是linux下不认binary,unformatted又行不通
谁知道该怎么办?

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

新浪微博达人勋

 成长值: 19710
发表于 2012-10-31 00:53:57 | 显示全部楼层
open(3,file='fallaop.grd',form='unformatted',access='direct')
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-31 17:01:02 | 显示全部楼层
open(10,file='fallaop.grd',form='unformatted',access='direct',status='replace',recl=4)在windows中recl=1,linux中为4.若是在工作站中运行还要注意是否需要高位翻转,convert='big_endian'..
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-31 20:44:52 | 显示全部楼层
兰溪之水 发表于 2012-10-31 00:53
open(3,file='fallaop.grd',form='unformatted',access='direct')

谢谢兰溪之水,按照你的思路已经作出map文件了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-31 20:46:19 | 显示全部楼层
银狐 发表于 2012-10-31 17:01
open(10,file='fallaop.grd',form='unformatted',access='direct',status='replace',recl=4)在windows中rec ...

嗯嗯,刚接触站点资料,还没弄懂高位翻转是什么意思,不过recl=4真的和window中的不同,不久前在这里卡住过,看来linux下还是要尽快学习,尽快熟悉,谢谢啦~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-1 11:00:47 | 显示全部楼层
谁知道怎么用fortran读取GrADS的站点降水资料啊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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