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 障害物の離散化された正確な位置のラングランジュ ベクトルを設定したいと考えています。これは本当に理解する必要はありません。