我的简单 Fortran 程序有问题。我在 Fortran 77 中工作,使用 Compaq Visual Fortran。程序结构必须是主程序和子程序的形式,因为它是与有限元法相关的大程序的一部分。
我的问题是我想分别为NHELE
和设置值 10000 和 10000 NVELE
,但是当我运行代码时,程序停止并给出以下错误:
forrt1: server <170>: program Exception - stack overflow
我尝试反复减少所需的值,直到达到 507 和 507。此时代码运行没有错误。
但是,将值增加到 508 和 508 会导致再次出现相同的错误。
我认为问题与子程序有关NIGTEE
,因为当我在没有它的情况下重新排列程序时,一切正常。
我尝试通过使用菜单将堆栈大小增加到最大值,project>>settings>>link>>output>>reserve & commit
但这并没有什么不同。
我怎么解决这个问题?
这是我的程序:
PARAMETER(NHELE=508,NVELE=508)
PARAMETER(NHNODE=NHELE+1,NVNODE=NVELE+1)
PARAMETER(NTOTALELE=NHELE*NVELE)
DIMENSION MELE(NTOTALELE,4)
CALL NIGTEE(NHELE,NVELE,NHNODE,NVNODE,NTOTALELE,MELE)
OPEN(UNIT=7,FILE='MeshNO For Rectangular.TXT',STATUS='UNKNOWN')
WRITE(7,500) ((MELE(I,J),J=1,4),I=1,NTOTALELE)
500 FORMAT(4I20)
STOP
END
SUBROUTINE NIGTEE(NHELE,NVELE,NHNODE,NVNODE,NTOTALELE,MELE)
DIMENSION NM(NVNODE,NHNODE),NODE(4)
DIMENSION MELE(NTOTALELE,4)
KK=0
DO 20 I=1,NVNODE
DO 20 J=1,NHNODE
KK=KK+1
NM(I,J)=KK
20 CONTINUE
KK=0
DO 30 I=1,NVELE
DO 30 J=1,NHELE
NODE(1)=NM(I,J)
NODE(2)=NM(I,J+1)
NODE(3)=NM(I+1,J+1)
NODE(4)=NM(I+1,J)
KK=KK+1
DO 50 II=1,4
50 MELE(KK,II)=NODE(II)
30 CONTINUE
RETURN
END
谢谢。