我目前正在用 Fortran 90 写我的文凭论文。在我的代码的某个阶段,我只是想计算一个整数(结果应该在网格单元的笛卡尔网格中给出一个方向)。
没有错误信息,但结果是错误的。会是什么?我正在寻找的值是变量的值idirhf
(见下文)。它应该始终是1
,2
或3
。取决于计算的preferred
方向。但是,它通常是idirhf = 0
或什idirhf = 1195
至或其他的……值fcdx
,fcdy
并且fcdz
是Real
值。它们代表梯度的组成部分。
所有变量都在前面的步骤中声明,未显示。
有人可以帮忙吗?我现在已经在那个小问题上花了几个小时......
这是代码的一部分:
distz = ( dr ( k ) + dr ( k - 1 ) + dr ( k + 1) ) / 2.
fcdx = ( fv ( i + 1, j, k ) - fv ( i - 1, j ,k ) ) &
& / ( 2. * dz )
fcdy = ( fv ( i, j + 1, k ) - fv ( i, j - 1, k ) ) &
& / ( 2. * dp )
fcdz = ( fv ( i, j, k + 1 ) - fv ( i, j ,k - 1 ) ) &
& / ( distz )
gradf ( 1 ) = ABS ( fcdx )
gradf ( 2 ) = ABS ( fcdy )
gradf ( 3 ) = ABS ( fcdz )
!
! Prüfung in welche der 3 Kooridnatenrichtung x,y,z
! die HF gebildet werden soll:
!
IF ( gradf(1) > gradf(2) ) THEN
IF ( gradf(1) > gradf(3) ) THEN
idirhf = x
x = 1
ider1 = y
ider2 = z
nsten1 = 5
nsten2 = 5
END IF
END IF
!
IF ( gradf(2) > gradf(1) ) THEN
IF ( gradf(2) > gradf(3) ) THEN
idirhf = y
y = 2
ider1 = x
ider2 = z
nsten1 = 4
nsten2 = 5
END IF
END IF
!
IF ( gradf(3) > gradf(1) ) THEN
IF ( gradf(3) > gradf(2) ) THEN
idirhf = z
z = 3
ider1 = x
ider2 = y
nsten1 = 4
nsten2 = 5
END IF
END IF
! WRITE(*,*)'###Nach gradf-Vergleich.idirhf = ', idirhf