1

現在、Fortran 90 で卒業論文を書いています。コードの特定の段階で、整数を計算したいだけです (結果として、メッシュ セルのデカルト グリッドで方向を示す必要があります)。

エラーメッセージはありませんが、結果は間違っています。それは何でしょうか?私が探している値は、変数の値ですidirhf(以下を参照)。常に12、または のいずれかである必要があります3preferred計算された方向に応じて。しかし、それは多くの場合idirhf = 0、または多分偶数idirhf = 1195または何でも... 値fcdxfcdyおよびfcdzRealです。それらはグラデーションのコンポーネントを表します。

すべての変数は、表示されていない前のステップで宣言されています。

誰でも助けることができますか?私はすでにその小さな問題に何時間も費やしてきました...

コードの一部を次に示します。

              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
4

1 に答える 1

2

あなたの投稿は、 doubleステートメント内x,y,zで更新するために最初に使用される前の値を示していません。シーケンスする必要がありますidirhfIF

                idirhf = x
                x = 1

本当になる

                x = 1
                idirhf = x

など

于 2012-08-17T10:47:12.247 に答える