回 帖 发 新 帖 刷新版面

主题:真心求帮忙~求解答~求救信号

刚刚入门,下面这个程序在编译的时候没有错误,但是运行不出来。。。。。应该是数组上下标越界了。

苦啊~请各位大仙们帮忙看看吧~小弟在此不胜感激啊~谢谢各位

这个程序是计算一维非稳态温度的

program main
implicit none

integer,parameter::N=11,K=1000
real,dimension(1000,11)::t
integer i,j
real tf1,tf2,h
real Bi,Fo,e
tf1=10.0
tf2=20.0
h=1000.0
Bi=0.3
Fo=0.08617
e=0.01

do j=1,N
t(1,j)=100.0

end do !设置初始温度

do i=1,k
do j=1,N
if(j==1)then
t(i+1,j)=t(i,j)*(1-2*Fo*Bi-2*Fo)+2*Fo*t(i,j+1)+2*Fo*Bi*tf1 !计算左边节点的温度
else if(j==N)then
t(i+1,j)=t(i,j)*(1-2*Fo*Bi-2*Fo)+2*Fo*t(i,j-1)+2*Fo*Bi*tf2 !计算右边节点的温度
else
t(i+1,j)=Fo*(t(i,j+1)+t(i,j-1))+(1-2*Fo)*t(i,j) !计算中间节点的温
end if
if(abs(t(i+1,j)-t(i,j)).LE.e)exit
end do
end do
write(*,*)t(i,j)
stop
end

回复列表 (共5个回复)

沙发

这样编译通不过,“设置初始温度”前的感叹号是中文全角字符
改过以后能够运行

板凳


运行有结果吗?为什么我运行不出来,老显示 array bounds exceeded

3 楼

我扫了一下, t的定义是real,dimension(1000,11)::t
虽然后面你对循环变量j做了左边界j=1和右边界j=N的处理, 可是没有对i循环变量也做相应的处理.
因为代码中出现了i+1, 所以当i=K的时候出现K+1(=1001)这一项, 这个显然超出了原来数组的定义范围.

btw:楼主可以考虑把代码写工整一点. 不工整,短的还可以,长了看的人很累的.

4 楼

有结果,好像是8.9e-2,记不清了

5 楼

谢谢大家!

我来回复

您尚未登录,请登录后再回复。点此登录或注册