-1

我正在做我一次又一次做的事情,在 Fortran 90 中将数组设置为零。但是,由于某种原因,在这种情况下它不起作用,我不知道为什么。

我分配数组并使用A = 0.d0,但是当我写出其中一个组件时,它打印为 0.4xxx

如果这有什么不同,我的数组是一个模块级数组,我在一个子例程中对其进行初始化。

有谁知道为什么会发生这种情况?

编辑:对不起,我已经离开,因此没有回应。这仍在发生。我正在使用 gfortran 4.3。我已经改变了一些东西,看看他们是否会有所帮助,但他们没有。请注意,我通过两种方式将元素设置为零。在循环中,它们肯定被设置为零,但在循环之后,至少有一个元素无缘无故地变为非零。我知道所有其他元素也是非零的。我将相关数组更改为本地子程序数组,但这没有效果。以下是给我错误输出的代码:

subroutine coeff_cube(f, Ng,x_max_8,coeffs)
  integer, intent(in)   :: Ng
  real(8), intent(in)   :: f(Ng,Ng,Ng)
  real(8), intent(in)   :: x_max_8


  integer               :: i,j,k,ii,jj,kk

  real(8)                :: Ints(Ng,nmax+1)
  real(8), intent(out)  :: coeffs(nmax+1,nmax+1,nmax+1)

  call cube_ints(x_max_8,Ng,Ints)

  write(*,*) "NOW NMAX IS: ", nmax       !Prints '24'
  coeffs = 0.0d0
  do i=1,nmax+1
    do j=1,nmax+1
      do k=1,nmax+1
        coeffs(i,j,k) = 0.d0
        write(*,*) coeffs(i,j,k)  !Prints 0.0000000000000000 for all i,j,k
      end do
    end do
  end do

  write(*,*) coeffs(1,3,28)               !Prints a non-zero number
  coeffs(1,3,28) = 0.0d0
  write(*,*) coeffs(1,3,28)               !Prints 0.0000000000000000

  do k=1,nmax+1
    i=1
    j=1
    if (i+j+k .GT. nmax+1)then
            exit
    end if
    do j=1,nmax+1
        i=1
        if (i+j+k .GT. nmax+1)then
            exit
        end if
      do i=1,nmax+1
        if (i+j+k .GT. nmax+1)then
            exit
        end if
        do kk=1,Ng
          do jj = 1,Ng
            do ii = 1,Ng
                coeffs(i,j,k) = coeffs(i,j,k) + &
                & f(ii,jj,kk)*Ints(ii,i)*Ints(jj,j)*Ints(kk,k)
                if(i==1.AND.j==3.AND.k==28)then
                    if (kk==1) then
                    write(*,*) coeffs(i,j,k)
                    end if
                end if
            end do
          end do
        end do
      end do
    end do
  end do
  write(*,*) coeffs(1,3,28)          !Prints 0.0000000000000000
end subroutine

有没有人有任何想法?谢谢。

4

2 回答 2

2

对不起,我已经想通了……

它实际上将数组设置为零,但是由于某种原因,我正在编写一个不在数组中的元素(超出范围)。我本以为它会给我一个错误,而不是写出任何旧的东西,但我想这只是 fortran ......

于 2012-07-24T23:49:42.963 回答
1

你知道你可以用一条语句初始化整个数组吗?

coeffs = 0.0d

将数组的所有元素设置为 0。

于 2012-07-20T21:12:40.553 回答