我现贴出主程序部分:
PROGRAM MAIN
USE SAME
IMPLICIT NONE
N=120
M=241
ITMAX=60
ITER=0
CALL INPUT
CALL GRID
DO I=1,M !!!!!!初始条件!!!!!!!!!!
DO J=2,N-1
W(I,J)=1-EXP(-ETA(J))
ENDDO
ENDDO
60 ITER=ITER+1
SELECT CASE(ITER-ITMAX)
CASE(:-1) ! <= -1 整数
GO TO 70
CASE(0) ! =0
WRITE(6,2500)
GO TO 70
CASE(1 ! >=1
WRITE(6,2600)
GO TO 90
END SELECT
70 DO I=1,M
DO J=2,N-1
WOLD(I,J)=W(I,J)
ENDDO
ENDDO
CALL EDDY
CALL CMOM
CALL SOLV
DO I=2,M
DO J=2,N-1
CONVER(I,J)=ABS(1-(WOLD(I,J)/W(I,J)))
ENDDO
ENDDO
MX=MAXVAL(CONVER) !选取误差中的最大值
IF(MX.LE.EPS)THEN ! <=0.0001 !收敛判断 EPS=0.0001 误差 CONVER
GO TO 90
ELSE
GOTO 60
ENDIF
90 CALL OUTPUT
END PROGRAM
程序主要过程如下是,(计算的是一个二维网格点上的速度,即二维数组),先给迭代的矩阵赋初值,继而进行第一次迭代,每次迭代完后,把此次结果与上一次的结果进行比较,逐点比较,选出最大误差,再与收敛条件ESP比较,如满足条件则输出结果,如不满足,再返回迭代,直到满足收敛条件为止,(其中也对迭代的次数进行了判断)
我的问题如下:不知道怎么回事,程序只进行了一次计算就输出了结果,没有进行第二次,还有误差判断CONVER(I,J)总是为0,我把子程序的结果也输出看了一下,各个子程序还是运行了一次。我就不知道问题在哪了。是结构问题还是别的,求大神指道,分少别嫌弃啊,急等啊
子程序
CALL EDDY
CALL CMOM
CALL SOLV
在子程序EDDY中都用到了初始值,CMOM是矩阵系数的计算,SOLV是最后的结果计算,谢谢 |