不要总是得到预期的结果

Don't always get expected results

以下是一个简单的潮汐传输模型的代码,我已将其包含在 OpenMP 中以并行化计算:

!$OMP PARALLEL SHARED(w, u, v, nthreads, chunk) PRIVATE(i, j, tid)
do it = 1, itlast
    !$OMP DO SCHEDULE(DYNAMIC, CHUNK)
    do j = 2, nyw-1
        do i = 2, nxw-1
            w(i,j) = w(i,j) - rx*depth*(u(i,j) - u(i-1,j))                  &
                            - ry*depth*(v(i,j) - v(i,j-1))
        end do
    end do
    !$OMP END DO
    !$OMP SINGLE
    call boudary_condition(it)
    !$OMP END SINGLE
    !$OMP DO SCHEDULE(DYNAMIC, CHUNK)
    do j = 1, nyw
        jv1 = j
        if (jv1 .ge. nyw-1) jv1 = nyw-1
        do i = 1, nxw-1
            u(i,j) = u(i,j) - rxg*(w(i+1,j) - w(i,j))                       &
                        - constant*u(i,j)*sqrt((u(i,j)**2.) + (v(i,jv1)**2.))
        end do
    end do
    !$OMP END DO
    !$OMP DO SCHEDULE(DYNAMIC, CHUNK)
    do j = 1, nyw-1
        do i = 1, nxw
            iu1 = i
            if (iu1 .ge. nxw-1) iu1 = nxw-1
            v(i,j) = v(i,j) - ryg*(w(i,j+1) - w(i,j))                       &
                        - constant*v(i,j)*sqrt((u(iu1,j)**2.) + (v(i,j)**2.))
        end do
    end do
    !$OMP END DO
    call transport_equation(chunk)
    !$OMP MASTER        
    mtprint = it/ntserprint
    if (ntserprint*mtprint .ne. it) goto 20
        call timeseries(it)
20  continue
    !$OMP END MASTER
end do
!$OMP END PARALLEL

问题是我并不总能得到预期的结果。使用相同的输入文件,我应该总是得到相同的结果,但有时它会在输出文件中产生 NaN 。我不太明白为什么会这样。我在 Windows 10 上使用 Intel Visual Fortran Composer XE 2013 编译和 运行 可执行文件。

您至少需要 itjv1ui1 私有。 先尝试解决这些问题,然后告诉我们。