FORTRAN:将数组设置为 0 不起作用

问题描述 投票:0回答:3

我正在做一些我已经做过一次又一次的事情,在 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

有人有什么想法吗?
谢谢。

fortran fortran90
3个回答
2
投票

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


1
投票

coeffs = 0.0d

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


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.