爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8859|回复: 14

[求助] fortran打开grd文件"access not allowed"

[复制链接]

新浪微博达人勋

发表于 2012-7-26 11:05:27 | 显示全部楼层 |阅读模式

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

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

x
为了计算北极海冰面积,先将海冰密集度的nc文件转换成grd文件
nc_grd.gs:

'reinit'
'sdfopen f:\HadISST_ICE\HadISST_ice.nc'
'set gxout fwrite'
'set fwrite f:\HadISST_ICE\area.grd'
i=1
while(i<=1701)
'set x 1 360'
'set y 91 180'
'set t 'i
'set z 1'
'd sea_ice_area_fr'
i=i+1
endwhile
'close 1'
'disable fwrite'

用fortran计算海冰总面积:
IMPLICIT NONE
INTEGER,PARAMETER::NX=360,NY=90,NT=1701
REAL FR(NX,NY,NT)
REAL S(NT)
INTEGER I,J,K,P

OPEN(10,FILE='area.grd',FORM='UNFORMATTED',STATUS='REPLACE',ACCESS='DIRECT',RECL=360*90)
OPEN(20,FILE='tot_area.grd',FORM='UNFORMATTED',STATUS='REPLACE',ACCESS='DIRECT',RECL=360*90)
OPEN(30,FILE='area.txt',FORM='FORMATTED')

P=1
DO K=1,NT
DO J=1,NY
DO I=1,NX
  READ(10,REC=P) FR(I,J,K)
  P=P+1
ENDDO
ENDDO
ENDDO

DO K=1,NT
  S(K)=0.0
  DO J=1,NY
    DO I=1,NX
        IF (FR(I,J,K)>0.0) THEN                                                                                       
      S(K)=S(K)+12351.77853*COS((J-0.5)*3.14159/180)*FR(I,J,K)
        ENDIF
        ENDDO
  ENDDO
ENDDO

P=1
DO K=1,NT
  WRITE(30)S(K)
  WRITE(20,REC=P)S(K)
  P=P+1
ENDDO

CLOSE(20)
CLOSE(30)
STOP
END


运行后fortran报错
run-time error F6414:open(area.grd) access not allowed

以为是area.grd中数据太大(360*90*1701),就把时次1701改成了10,但还是同样的错误。。
请教是为什么啊?


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

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-7-26 11:58:26 | 显示全部楼层
贴这么一大段代码没有用的,先用grads画图对比,确定你转出的文件是对的再继续下一步。
然后用逐步排除的方法自己先定位出fortran的错误是在哪里产生的,贴这么一大段出来这不是让人看得都眼花么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-7-26 16:25:09 | 显示全部楼层
看看是不是fortran语句read的不对,我记得需要一直都用隐循环的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-26 16:46:51 | 显示全部楼层
打开个grd文件整的那么复杂,只要 open(10,file='area.grd',form='binary')就行了,你改改看是不是这个问题~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-7-26 16:51:06 | 显示全部楼层
把read改成隐循环后还是报同样的错误诶。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-7-26 16:57:45 | 显示全部楼层

还是一样诶。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-7-26 16:58:35 | 显示全部楼层
言深深 发表于 2012-7-26 16:25
看看是不是fortran语句read的不对,我记得需要一直都用隐循环的

把read改成隐循环后还是报同样的错误诶。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-26 17:04:16 | 显示全部楼层
你nc文件的ctl,查询下(q ctlinfo),截个图上来看看,可能是精度问题在捣鬼~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-7-26 17:16:29 | 显示全部楼层
做个霸气的木头 发表于 2012-7-26 17:04
你nc文件的ctl,查询下(q ctlinfo),截个图上来看看,可能是精度问题在捣鬼~

ctlinfo.PNG 这个吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-26 17:54:59 | 显示全部楼层

看来不是精度的问题,你这样吧,你一步步测试程序哪里出了问题
open部分改成我的,读数据的整个过程改成这样:
DO K=1,NT
   DO J=1,NY
      READ(10) (FR(I,J,K),I=1,NX)
      WRITE(*,*) FR(1,J,K)
   ENDDO
ENDDO
ENDDO
如果能在界面上输出数,而且能输完。那么就是这里问题了,如果在这部分出错了,你要试着把gs里的x、y格点也改成循环试试~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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