sqrt函数fortran 90错误

时间:2013-01-03 17:48:11

标签: fortran90 sqrt

我正在尝试处理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

如果需要更多信息,请告诉我,

真诚地,

Albert P

PD,3个整数欧拉网格是0/1 2D网格,其中1分配给一个墙,由一个圆形圆盘分隔,w_b(y,x)是边界点,w(y,x)是整个磁盘点和x_w我想为障碍物设置离散精确位置的langrangian向量。真的不需要理解这一点。

1 个答案:

答案 0 :(得分:0)

问题实际上是一个低于1 in w的数组索引,并且在设置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的问题,以及所有例程,我在执行代码时检测到了这个问题。

无论如何,谢谢大家。那是一个艰难的决定!!

Albert P