及输入文件 in.dat
前辈,附件为书上给的主程序,前几行程序没有看懂意思,所以就参考着别的程序给删掉了。给您发过去做下参考。
与 status = 'old'无关。
file not found 是你把 in.dat 放错了位置。
如果通过编译环境上的运行按钮运行程序,则应该放在工程文件夹。
如果通过双击debug文件夹下的exe运行,则应该放在debug文件夹。
end-of-file during read 的原因是:
in.dat 文件内容不够。
不够是相对的。
第一次循环,从第一行开始读。当最终到 GOTO 10 的时候,虽然代码里从头开始执行了,但是读取位置还是文件的末端,此时再要读,就读不了了。(因为文件里只有一次的数据)
你是否应该有一个 rewind 语句?
另外,我发现你的数据读取也有问题
主程序中,80 READ(5,*)NF,NP,此时读到的是 8,0,我假设到此为止是正确的。
那么第81行:IF(NF.GT.0)CALL PF(NF,NP,NT,NWP,C(N4),IA(M2),C(N5))
进入到 PF 函数里
SUBROUTINE PF(NF,NP,NT,NWP,F,MF,ZF)
DIMENSION MF(2,NF),ZF(NF),F(NT)
READ(5,*)((MF(I,L),I=1,2),L=1,NF),(ZF(L),L=1,NF)
此处又在读取in.dat,而此时文件里的数据是:
1,1,-3.750
8,1,-7.500
15,1,-7.500
22,1,-7.500
29,1,-7.500
36,1,-7.500
43,1,-7.500
50,1,-7.500
57,1,-7.500
64,1,-7.500
71,1,-7.500
78,1,-7.500
85,1,-3.750
被读入到 PF 函数里的 MF 和 ZF 数组里。看起来是错位了。因为 MF 是整型,2*8 的大小,而 ZF 是 8 的大小。
这一段数字是 13*3 的。 谢谢前辈,我自己再推算一遍看看。 vvt 发表于 2015-3-4 10:31
与 status = 'old'无关。
file not found 是你把 in.dat 放错了位置。
前辈,我发现问题是nd的数据取错了,改完之后计算出了81个单元刚度矩阵,但是应该计算144个单元刚度矩阵,运行时显示数组超限,这会是什么情况。nd取值为16. 越界发生在 SUMK 函数里
SK(M,N)=SK(M,N)+EK(MO,NO)
此时的 N=2*(IJ(J)-IJ(I))+1 = 2*(57-48)+1 = 19
而 SK(182,16)
19 大于 16 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
前辈一般用什么方法判断这种情况的啊,设置的断点吗? 是,你可以参考本文:http://fcode.cn/guide-44-1.html
页:
1
[2]