2017-01-21 6 views
2

コードを実行すると、サブルーチンにエラーメッセージが表示されます。変数定義コンテキストのINTENT(IN)仮引数

このコードは、Kincaid & Gauss Seidelの楕円偏微分方程式を解く方法に関するCheneyの本の練習からのものです。

エラーメッセージがある:(1)における変数定義コンテキスト(割当)でINTENT(IN)と

仮引数 'U'。

私は以下のコードの(1)を参照します。エラーメッセージが表示されないようにサブルーチンを修正する方法はありますか?

subroutine seidel(ax,ay,nx,ny,h,itmax,u)  
    real, dimension(0:nx,0:ny), intent(in) :: u   
    real, intent(in) :: ax,ay, h     
    integer, intent(in) :: nx, ny, itmax   
    integer:: i,j,k 

    do k = 1,itmax  
    do j = 1,ny-1  
     y = ay + real(j)*h 
     do i = 1,nx-1 
     x = ax + real(i)*h  
     v = u(i+1,j) + u(i-1,j) + u(i,j+1) + u(i,j-1) 
     u(i,j) = (v - h*h*g(x,y))/(4.0 - h*h*f(x,y))   (1) 
     end do 
    end do 
    end do 
end subroutine seidel 

答えて

3

intent(in)は、ルーチンが引数の値を更新しようとしないことをコンパイラに約束します。コードあなたが行に約束区切りを示しています。この

real, dimension(0:nx,0:ny), intent(inout) :: u   

inoutのように、あなたの約束を破ったり、この場合はおそらく、より適切な、意図inoutをしていないことで、このいずれか

​​

修正ルーチンに引数が渡され、そのルーチンに変更が加えられる可能性があることがコンパイラに通知されます。

(私はこれはおそらく重複していると思いますが、まだものを見つけることができません。)の助けを

+0

感謝。私がインテント(inout)に変更したとき、私はまだエラーメッセージを受け取ります。これは、 "グローバルプロシージャでのインタフェースの不一致:引数uでのINTENTの不一致"エラーメッセージは、私がサブルーチンと呼ぶ行を参照しています。上記の私のコードの最初の行。なぜこれが起こっているのか知っていますか? –

+2

「インターフェイスの不一致」というフレーズは、表示されないコードの部分の問題を示唆しています。作業する[mcve]を私たちに与えてください。 '暗黙のnone'の少しでも役立つでしょう、そして、宣言されていない' v'や 'x'などの変数を使って、最終的にポップアップする問題を説明する必要はありません。 –

+0

@HighPerformanceMarkありがとうございます。あなたが私の質問を提案して編集するときに、私は完全な/最小限の例を思いつきます。 –

関連する問題