爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7197|回复: 18

为什么这个fortran运行不了?

[复制链接]

新浪微博达人勋

发表于 2016-12-28 18:49:43 | 显示全部楼层 |阅读模式
GrADS
系统平台:
问题截图: -
问题概况: 这个 错误实在看不懂,大家帮帮忙
我看过提问的智慧: 看过
自己思考时长(天): 2

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

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

x
PROGRAM ex_001
REAL,PARAMETER::Omega=7.292e-5,R=6371000,PI=3.1415926,Delta=2.50
INTEGER,PARAMETER :: nx=53,ny=38,nz=17,nt=480
INTEGER i,j,k,t
REAL voro(nx,ny),u(nx,ny,nz,nt),v(nx,ny,nz,nt),vorop(nx,ny),lat(ny)
DO j=1,ny
lat(j)=12.5+j*Delta
lat(j)=lat(j)*pi/180.
ENDDO
!--------------read u----------------
OPEN(1,file='D:\fortran\reanalysis\u.dat',form='binary')
DO t=1,nt         ! time
DO k=1,nz         ! level
DO j=1,ny
READ(1)(u(i,j,k,t),i=1,nx)           
ENDDO
ENDDO
ENDDO
!--------------read v----------------
OPEN(2,file='D:\fortran\reanalysis\v.dat',form='binary')
DO t=1,nt        ! time
DO k=1,nz        ! level
DO j=1,ny
READ(2)(v(i,j,k,t),i=1,nx)           
ENDDO
ENDDO
ENDDO
DO i=2,nx-1
DO j=2,ny-1
voro(i,j)=(1./(R*2))*((v(i+1,j,3,436)-v(i-1,j,3,436))/((Delta*pi/180)*cos(lat(j)))-(u(i,j+1,3,436)-u(i,j-1,3,436))/(Delta*pi/180)+2*u(i,j,3,436)*tan(lat(j)))
END DO
end do
DO i=3,nx-2
DO j=3,ny-2
vorop(i,j)=u(i,j,6,434)*((voro(i+1,j)-voro(i-1,j))/(2*R*cos(lat( j))*Delta*pi/180))+v(i,j,6,434)*((voro(i,j+1)-vorg(i,j-1))/(2*R*Delta*pi/180))
END DO
END DO
OPEN(3,FILE='D:\fortran\reanalysis\vorop.dat',form='binary')
WRITE(3) ((vorop(i,j),i=1,nx),j=1,ny)
CLOSE(1)
CLOSE(2)
CLOSE(3)
END

图片1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-28 18:50:54 | 显示全部楼层
求帮忙看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-28 19:56:54 | 显示全部楼层
自己检查清楚啊,有一行voro打成vorg了,报错的意思是有未定义的外部变量vorg,这种错误一般就是用的变量名没定义,或者你码字的时候弄错了

评分

参与人数 1金钱 +6 收起 理由
lqouc + 6

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2016-12-28 20:24:44 | 显示全部楼层
咕噜 发表于 2016-12-28 19:56
自己检查清楚啊,有一行voro打成vorg了,报错的意思是有未定义的外部变量vorg,这种错误一般就是用的变量名 ...

谢谢,知道啦,但是最后运行不了
图片2.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-28 20:46:11 | 显示全部楼层
大佬们来看看,运行了几个程序都是这个错误
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-28 20:46:20 | 显示全部楼层
来看看啊
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2016-12-28 20:46:26 | 显示全部楼层
求回复
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-12-28 20:53:15 | 显示全部楼层
错误提示是读取数据部分的要求长度大于文件的记录长度
fortran读取数据的时候,执行一次read就换一行,而对于binary数据来说并不是一行一个数据的
所以将以下部分
DO t=1,nt         ! time
DO k=1,nz         ! level
DO j=1,ny
READ(1)(u(i,j,k,t),i=1,nx)           
ENDDO
ENDDO
ENDDO
改成
read(1) ((((u(i,j,k,t),i=1,nx),j=1,ny),k=1,nz),t=1,nt)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-28 21:02:56 | 显示全部楼层
f117hqh 发表于 2016-12-28 20:53
错误提示是读取数据部分的要求长度大于文件的记录长度
fortran读取数据的时候,执行一次read就换一行,而 ...

已经把u,v,按照你说的方式去改了,可还是运行不  ,怎么办
图片1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-28 21:07:19 | 显示全部楼层
你看那河下的桥 发表于 2016-12-28 21:02
已经把u,v,按照你说的方式去改了,可还是运行不  ,怎么办

改成
do t=1,nt
read(1) (((u(i,j,k,t),i=1,nx),j=1,ny),k=1,nz)
end do
试一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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