我正在做一些我一次又一次做的事情,在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
有没有人有任何想法? 感谢。
答案 0 :(得分:2)
对不起,我已经弄清楚了......
事实上它确实将数组设置为零,但是由于某种原因,我正在编写一个不在数组中的元素(超出范围)。我原以为它会给我一个错误,而不是写出任何旧的东西,但我想这只是fortran ...
答案 1 :(得分:1)
您是否知道可以使用单个语句初始化整个数组?
coeffs = 0.0d
将数组的所有元素设置为0。