0

sqrt を処理しようとしていますが、このプログラムをコンパイルするとセグメンテーション違反エラーが発生する理由がわかりません。sqrtが原因であることがわかりました。しかし、これらのタイプの定式化で間違いなく sqrt を使用するにはどうすればよいでしょうか?

SUBROUTINE constructImages(image,w,w_b,x_w)
    USE cellConst
    USE simParam, ONLY: xDim, yDim, obstX, obstY, obstR,L_max
    USE D2Q9Const, ONLY: v

implicit none
integer, INTENT(INOUT):: image(yDim,xDim),w_b(yDim,xDim),w(yDim,xDim)
double precision, dimension(L_max,0:1),     INTENT(INOUT):: x_w
integer:: x,y,i,cont_L
double precision::x2,y2
!Disk Shape
do x = 1, xDim
    do y = 1, yDim
        if (((x-obstX)**2.0d0 + (y-obstY)**2.0d0) <= (obstR**2.0d0) ) then
    image(y,x) = wall
    w(y,x) = wall
    end if
    end do
end do
do x = 1, xDim
    do y = 3, yDim-2
    do i= 1,8
    if ((w(y,x) == fluid) .and. (w(y+v(i,1),x+v(i,0)) == wall)) then
        w_b(y,x) = 2
    end if
    end do
end do
end do
do x = 1,xDim
do y = 3, yDim-2
    if (w_b(y,x) == 2) then
    w_b(y,x) = wall
    w(y,x) = wall
    image(y,x) = wall
    end if
end do
end do

x_w = 0.0d0     !Lagrangian vector for boundary exact position
cont_L = 0

do x = 1, xDim
    do y = 1, yDim
        do i = 1, 8
        if ((w(y+v(i,1),x+v(i,0)) == fluid) .and. (w_b(y,x) == wall)) then 
        cont_L = cont_L +1

. x_w(cont_L,0) = x2 - ((x-obstX)^2.0d0 + (y-obstY)^2.0d0) ^0.5d0 - obstR

. x_w(cont_L,1) = y2 - ((x-obstX)^2.0d0 + (y-obstY)^2.0d0) ^0.5d0 - obstR

 !          write(*,*) x2,y2
 !          write(*,*) x_w(cont_L,0),x_w(cont_L,1)
        end if
        end do
    end do
end do
 END SUBROUTINE constructImages

さらに情報が必要な場合はお知らせください。

心から、

アルバート・P

PD、3 つの整数オイラー メッシュは 0 / 1 2D メッシュで、1 は壁に割り当てられ、丸い円盤で区切られます。w_b(y,x) は境界点、w(y,x) は円盤全体です。 points and x_w 障害物の離散化された正確な位置のラングランジュ ベクトルを設定したいと考えています。これは本当に理解する必要はありません。

4

1 に答える 1

0

問題は実際には w で 1 未満の配列インデックスであり、sqrt を設定するときにそのエラーに何らかの形で派生する複数の問題がありました。

do x = 1, xDim
    do y = 1, yDim
        do i = 1, 8
if ((w(y,x) == fluid) .and. (w(y+v(i,1),x+v(i,0)) == wall))
.....

ここで、w が >1 になり、範囲外になると述べています。整数が 1 未満および yDim を超えないようにする問題を解決しました。これはすべてのルーチンで発生し、コードの実行中にチェックバウンスでその問題を検出しました。

ともあれ皆様ありがとうございました。大変でしたね!!

アルバート・P

于 2013-01-07T12:23:08.307 に答える