Fortran 90 で配列をゼロに設定して、何度も行ったことを実行しています。しかし、何らかの理由でこの場合は機能せず、その理由がわかりません。
配列を割り当てて使用しますA = 0.d0
が、コンポーネントの1つを書き出すと、0.4xxxとして出力されます
これが違いを生む場合、私の配列はモジュールレベルの配列であり、サブルーチン内で初期化しています。
なぜこれが起こっているのか、誰にも分かりますか?
編集:申し訳ありませんが、私は不在だったので応答していません。これはまだ起こっています。gfortran 4.3 を使用しています。役立つかどうかを確認するためにいくつかのことを変更しましたが、そうではありません。以下で、要素を2 つの方法でゼロに設定していることに注意してください。ループ内ではそれらは確実にゼロに設定されていますが、ループ後に少なくとも 1 つの要素が明確な理由もなく非ゼロになっています。他のすべての要素もゼロではないことを知っています。関連する配列をローカル サブルーチン配列に変更しましたが、これは効果がありません。以下は、私に間違った出力を与えているコードです:
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
誰にもアイデアはありますか?ありがとう。