vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。
vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。
PROGRAM MAIN
DIMENSION C(5000),IA(1000),EK(36)
OPEN(5,FILE='IN.DAT')
OPEN(6,FILE='OUT.DAT',STATUS='UNKNOWN')
10 READ(5,*)NG
IF(NG.EQ.0) STOP
WRITE(6,15)
15 FORMAT(//,5X
& '************ PLANE PROBLEM ***********',/)
READ(5,*)NE,MC,NX,NB,ND,EO,VO,T
WRITE(6,20)NG,NE,MC,NX,NB,ND,EO,VO,T
20 FORMAT(//,10X,'NG=',I4,5X,'NE=',I4,5X,'MC=',I4,5X,'NX=',I4,/,
& 10X,'NB=',I4,5X,'ND=',I4,/,10X,'EO=',E10.4,5X,'VO=',F7.2,
& 5X,'T=',F7.2)
READ(5,*)NWA,NWE,NWK,NWP,NWD
WRITE(6,25)NWA,NWE,NWK,NWP,NWD
25 FORMAT(/10X,'NWA=',I2,3X,'NWE=',I2,3X,'NWK=',I2,3X,
& 'NWP=',I2,3X,'NWD=',I2)
NT=2*NG
M1=3*NE+1
M2=M1+2*NB
N1=2*NG+1
N2=N1+NB
N3=7*NE+N2
N4=N3+NT*ND
N5=N4+NT
NEND=N5
IF(NEND.LE.5000) GOTO 35
WRITE(*,*)'***EXCEED THE LIMIT OF ARRAY C(IN THE MIDDLE)!!***'
WRITE(*,30) NEND
30 FORMAT(/,'*******NEND=',I6,1X,'>5000********')
STOP 111
35 CALL INPUT(NE,NG,NB,IA(1),C(1),IA(M1),C(N1))
WRITE(*,40)
40 FORMAT(/10X,'##### INPUT PASSED ######')
IF(MC.EQ.0)GOTO 45
E=EO/(1.0-VO*VO)
V=VO/(1.0-VO)
GOTO 50
45 E=EO
V=VO
50 NX1=NX
A1=E/(1.0-V*V)/4.0
A2=0.5*(1.0-V)
CALL ABC(NE,NG,NWA,IA(1),C(1),C(N2))
WRITE(*,55)
55 FORMAT(/10X,'###### ABC PASSED ######')
DO 60 I=N3,N4
C(I)=0.0
60 CONTINUE
DO 65 K=1,NE
IO=K
CALL KE(IO,NE,NWE,T,A1,A2,V,EK(1),C(N2))
CALL SUMK(IO,NE,ND,NT,IA(1),C(N3),EK(1))
65 CONTINUE
WRITE(*,70)
70 FORMAT(/10X,'##### SUMK PASSED #####')
CALL CHECK(NT,ND,NWK,C(N3))
WRITE(*,75)
75 FORMAT(/10X,'##### CHECK PASSED #####')
80 READ(5,*)NF,NP
M3=M2+2*NF
N6=N5+NF
NEND=N6+NP-1
MEND=M3+2*NP-1
NM=0
IF(NEND.LE.5000)GOTO 85
WRITE(*,*)'***EXCEED THE LIMIT OF ARRAY C(AT THE END)!!***'
WRITE(*,30)NEND
NM=1
85 IF(MEND.LE.1000)GOTO 95
WRITE(*,*)'***EXCEED THE LIMIT OF ARRAY IA(AT THE END)!!***'
WRITE(*,90)MEND
90 FORMAT(/,'********MEND=',I6,1X,'>1000*******')
STOP 222
95 IF(NM.EQ.1)STOP 222
DO 100 I=N4,N5
C(I)=0.0
100 CONTINUE
IF(NF.GT.0)CALL PF(NF,NP,NT,NWP,C(N4),IA(M2),C(N5))
WRITE(*,105)
105 FORMAT(/10X,'##### PF PASSED #####')
IF(NP.GT.0)CALL PP(NP,NT,NG,NWP,C(1),C(N4),IA(M3),C(N6))
WRITE(*,110)
110 FORMAT(/10X,'##### PP PASSED #####')
CALL DBC(NT,ND,NB,NX,NX1,C(N3),C(N4),IA(M1),C(N1))
WRITE(*,115)
115 FORMAT(/10X,'##### DBC PASSED #####')
CALL GAUSS(NT,ND,NWD,NX,NX1,C(N3),C(N4))
WRITE(*,120)
120 FORMAT(/10X,'##### GAUSS PASSED #####')
CALL STRESS(NE,NT,A1,A2,V,IA(1),C(N2),C(N4))
WRITE(*,125)
125 FORMAT(/10X,'#####STRESS PASSED #####')
NX1=NX1-1
IF(NX1.GT.0)GOTO 80
GOTO 10
END
vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。
SUBROUTINE KE(IO,NE,NWE,T,A1,A2,V,EK,BCA)
DIMENSION B(7),BCA(7,NE),EK(6,6)
DO 10 I=1,7
B(I)=BCA(I,IO)
10 CONTINUE
A=A1/B(7)*T
DO 20 I=1,3
DO 20 J=I,3
I1=2*I
J1=2*J
EK(I1-1,J1-1)=A*(B(I)*B(J)+A2*B(I+3)*B(J+3))
EK(I1-1,J1)=A*(V*B(I)*B(J+3)+A2*B(I+3)*B(J))
EK(I1,J1-1)=A*(V*B(I+3)*B(J)+A2*B(I)*B(J+3))
EK(I1,J1)=A*(B(I+3)*B(J+3)+A2*B(I)*B(J))
20 CONTINUE
DO 30 I=3,6
DO 30 J=1,I
EK(I,J)=EK(J,I)
30 CONTINUE
IF(NWE.EQ.0)GOTO 60
WRITE(6,40) IO
40 FORMAT(/1X,'EK NE=',I5)
WRITE(6,50)EK
50 FORMAT(1X,6E11.4)
60 RETURN
END
vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。
vvt 发表于 2015-3-4 09:04
从代码片段里找出错误的难度非常大。
建议你直接上传全部源代码文件(而非复制粘贴),及输入文件 in.dat ...
781 Bytes, 下载次数: 2
计算单元参数
483 Bytes, 下载次数: 1
检验主元
507 Bytes, 下载次数: 1
引入给定位移
1.27 KB, 下载次数: 1
高斯消去
746 Bytes, 下载次数: 3
数据输入
625 Bytes, 下载次数: 1
计算单刚矩阵
2.95 KB, 下载次数: 2
主程序
552 Bytes, 下载次数: 1
组装载荷
714 Bytes, 下载次数: 3
计算等效节点荷载
927 Bytes, 下载次数: 1
计算单元应力
495 Bytes, 下载次数: 3
总刚集成
vvt 发表于 2015-3-4 09:38
及输入文件 in.dat
2.85 KB, 下载次数: 4
输入文件
vvt 发表于 2015-3-4 09:38
及输入文件 in.dat
3.21 KB, 下载次数: 2
书中原主程序
vvt 发表于 2015-3-4 10:31
与 status = 'old' 无关。
file not found 是你把 in.dat 放错了位置。
vvt 发表于 2015-3-5 09:03
越界发生在 SUMK 函数里
SK(M,N)=SK(M,N)+EK(MO,NO)
此时的 N=2*(IJ(J)-IJ(I))+1 = 2*(57-48)+1 = 19
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |