我正在做一些我一次又一次的工作,在Fortran 90中將數組設置爲零。但是,出於某種原因,在這種情況下它不起作用,而且我有不知道爲什麼。FORTRAN:將數組設置爲0將不起作用
我分配數組,並使用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
有沒有人有任何想法? 謝謝。
顯示分配數組的代碼。 –
你確定你試圖寫出的元素實際上在數組的範圍內,即索引不是太小或太大? – pafcu
向我們展示輸出值的代碼,'0.4xxx'是一個非常奇特的輸出形式。 –