爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 18066|回复: 11

[求助] fortran程序出现错误:fortran 161 Program Exception - array bounds exceeded

[复制链接]

新浪微博达人勋

发表于 2011-10-6 19:17:16 | 显示全部楼层 |阅读模式

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

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

x
程序如下:
common /t/X(200)
integer,parameter::n=59,ih=1
open(1,file='avepreci2_3d.txt')
read(1,*) (x(i),i=1,n)
close(1)
open(6,file='glp_3d.txt')
call tsa(n,ih)  
close(6)
end     

SUBROUTINE TSA(IDAY,IH)
COMMON /T/X(200)
DIMENSION L(18),AKI(18,4),B(4),SP(1000),SQ(1000),R1(1000),R(1000)
PARAMETER(PI=3.141592653589793)
DATA L/ 2,  3,  4,  5,  6,  8,  10, 15, 20,30, 40, 50, 60, 80, 100,200,400,1000/
DATA AKI/.010, .038, .074, .111, .145, .206, .256, .349, .413, .498, .554, .594, .625, .669, .701, .782, .843,  .899,  .052,  .117,  .178,  .229,  .272,  .342, .394,  .484,  .543,  .616,  .663,  .695,  .720,  .775, .779,  .841,  .887,  .928, 3.000, 2.605, 2.372, 2.214,  2.099, 1.938, 1.831, 1.666, 1.570, 1.459, 1.394, 1.350, 1.318, 1.274, 1.243, 1.170, 1.119, 1.075, 4.605, 3.782, 3.319, 3.017, 2.802, 2.511, 2.321, 2.038, 1.878, 1.696, 1.592, 1.523, 1.473, 1.404, 1.358, 1.247, 1.172, 1.107/
N1=IDAY
N=N1-IH+1
M=INT(N/3-1)
C=0.
DO 10 I=1, IH
10 C=C+X(I)
DO 20 I=1, N1-IH
D=C-X(I)+X(I+IH)
X(I)=C/IH
20 C=D
X(N)=C/IH
C=X(1)
D=X(1)
AMX=0.
DO 30 I=1, N
30 AMX=AMX+X(I)
AMX=AMX/N
CGM=0.
DO 40 I=1, N
40 CGM=CGM+(X(I)-AMX)*(X(I)-AMX)
CGM=SQRT(CGM/N)
DO 50 I=1, N
50 X(I)=(X(I)-AMX)/CGM
DO 70 K=0, M
C=0.
DO 60 J=1, N-K
60 C=C+X(J)*X(J+K)
C=C/FLOAT(N-K)
R1(K)=C
70 R(K)=C*(1.0-1.0*K/M)
WRITE (6,'(/24H Coefficient correlation)')
WRITE (6,'(10F7.3)') (R1(K),K=0,M)
DO 90 K=0, M
C=COS(PI*K/M)
U1=0.
U2=0.
DO 80 I=M-1, 1, -1
U0=R(I)+2*C*U1-U2
U2=U1
80 U1=U0
D=U1*C-U2
X(M+K+2)=(R(0)+2*D+R(M)*(-1)**K)/M
90 SP(K)=X(M+K+2)
D=((N-1)*R(1)+1)/SQRT(FLOAT(N-2))
C=0.
DO 100 K=0, M
100  C=C+X(M+K+2)
C=C/(M+1)
WRITE (6,'(/15H White spectrum,/11X,F12.6)') C
U0=(1-R(1)*R(1))*C
U1=1+R(1)*R(1)
U2=2*R(1)
DO 110 K=0, M
110 X(2*M+K+3)=U0/(U1-U2*COS(PI*K/M))
WRITE (6,'(/15H Red   spectrum)')
WRITE (6,'(10E7.2)') (X(2*M+K+3),K=0,M)
K=(2*N-M/2)/M
IF (K.LE.1000) THEN
I=18
DO 150 J=1, 4
C1=FLOAT(L(I))/L(I-1)
C2=FLOAT(K)/L(I-1)
150  B(J)=ALOG(C2)/ALOG(C1)*(AKI(I,J)-AKI(I-1,J))+AKI(I-1,J)      
END IF
WRITE (6,'(/13H White - 0.95,/16X,F9.6/)') C*B(3)
DO 170 K=2*M+3, 3*M+3
170 SQ(K-2*M-3)=X(K)*B(3)
WRITE (6,'(A6,9X,A4,12X,A4,11X,A5,8X,A6,9X,A4,12X,A4,11X,A5)')
&  'Period','Cal*','0.95','Error','Period','Cal*','0.95','Error'
DO 190 I=1,(M-1)/2
R(I)=SP(I)-SQ(I)
R1(I)=2.*M/I
R(I+(M+1)/2)=SP(I+(M+1)/2)-SQ(I+(M+1)/2)
R1(I+(M+1)/2)=2.*M/(I+(M+1)/2)
190 WRITE (6,'(F6.2,3E16.6,2X,1H|,2X,F6.2,3E16.6)') R1(I), SP(I),SQ(I),R(I),R1(I+(M+1)/2), SP(I+(M+1)/2),SQ(I+(M+1)/2),R(I+(M+1)/2)
IF (M/2.EQ.(M+1)/2) THEN
R(M/2)=SP(M/2)-SQ(M/2)
R1(M/2)=2.*M/(M/2)
R(M)=SP(M)-SQ(M)
R1(M)=2.*M/M
WRITE (6,'(F6.3,3E16.6,2X,1H|,2X,F6.3,3E16.6)') R1(M/2), SP(M/2),SQ(M/2),R(M/2),R1(M), SP(M),SQ(M),R(M)
ELSE
R((M+1)/2)=SP((M+1)/2)-SQ((M+1)/2)
R1((M+1)/2)=2.*(M+1)/2/((M+1)/2)
WRITE (6,'(F6.3,3E16.6)') R1((M+1)/2), SP((M+1)/2),SQ((M+1)/2),R((M+1)/2)
END IF
WRITE (6,'(/17H Period  Analysis)')
DO 200 I=1,M-1
DO 200 J=I+1,M
IF (R(I).LT.R(J)) THEN
C=R(I)
R(I)=R(J)
R(J)=C
C=R1(I)
R1(I)=R1(J)
R1(J)=C         
END IF
200 CONTINUE
DO 210 I=1,M
IF (R(I).LT.0.) RETURN
210  WRITE (6,'(16X,F8.3,E20.6)') R1(I),R(I)
RETURN
END
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-6 20:31:07 | 显示全部楼层
好长的程序啊  看样子时数组越界了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-10-6 23:21:48 | 显示全部楼层
array bounds exceeded数组越界~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-7 08:51:28 | 显示全部楼层

这是魏凤英编写的功率谱程序,奇怪的是我用fortran6.5就会出现这样错误,用以前的fortran版本就不会错
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-7 09:30:25 | 显示全部楼层
Crystal_PP 发表于 2011-10-7 08:51
这是魏凤英编写的功率谱程序,奇怪的是我用fortran6.5就会出现这样错误,用以前的fortran版本就不会错

我放在powerstation中  没有此错误
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-7 23:25:21 | 显示全部楼层
DO 200 I=1,M-1
DO 200 J=I+1,M
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-10 21:18:19 | 显示全部楼层
guobch 发表于 2011-10-7 23:25
DO 200 I=1,M-1
DO 200 J=I+1,M

请问要怎么改
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-11 07:36:59 | 显示全部楼层
Crystal_PP 发表于 2011-10-10 21:18
请问要怎么改

你排序的时候行号为什么都是200啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-11 09:09:05 | 显示全部楼层
guobch 发表于 2011-10-11 07:36
你排序的时候行号为什么都是200啊

后面有个200 CONTINUE
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2011-10-11 09:30:42 | 显示全部楼层
鉴于楼主没有你的原始数据,程序不能运行。不过建议您debug一下,看看在什么地方数组溢出了,很可能就是一个小错误~~~ps:要是不会dubug的话,也可以逐步加一个print,看看你的程序运行到什么地方运行不下去了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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