fortran印刷线改变了逻辑

时间:2017-12-23 01:06:57

标签: arrays fortran

首先,我必须说我是Fortran的新手,我对我的计算流体动力学(CFD)领域的能力感到非常兴奋。

但我刚刚发现了一个我似乎无法找到答案的错误。 我想做一个简单的事情:打印一个数组(好吧,我做得很好),在那个数组之前,我想要打印一个新行(使用print'(/)')或只打印数组的名称,如“ P =“。原因是因为我的数组是在很多次迭代中计算出来的,我希望看到每次迭代的进度,所以我希望它们被某些东西分开。

但是当我插入代码以在我的函数中打印这些行中的任何一行时,我的数组之前在所有迭代中显示为数字,在一些迭代之后开始显示为NaN。有谁知道我能做些什么来解决这个问题?有人可以向我解释为什么在Fortran中会发生这种情况吗?就像,为什么简单的print语句会改变逻辑呢?

我通常会在q = 0,nit循环内的任何地方插入我的“print'(/)'”,但在i,j循环之外,这就是改变逻辑的原因吗?该计划?

function pressure_poisson(p,dx,dy,nit,nx,ny)
    real, dimension(10,10) :: pressure_poisson,p,pn
    real :: dx, dy 
    integer :: i,j, q, nit, nx, ny

do q = 0,nit
    pn = p

    do i = 1,nx
        do j = 1,ny
            p(i,j) = ((( pn (i+1,j) + pn (i-1,j) )* dy ** 2 + &
            ( pn(i,j+1) + pn (i, j-1) ) * dx **2 ) / (2 * (dx**2 + dy ** 2)) - &
            dx **2 * dy **2 / (2 * (dx **2 + dy **2)) * b(i,j))
        end do
    end do

    do i = 1,nx
        do j = 1, ny
            write (*,'(3x, es10.3)', advance='no'), p(i,j)
        end do
        print '(/)'
    end do

end do

0 个答案:

没有答案