我想補充兩個數組,但由於某種原因選擇目標磁盤陣列只包含零。 當我編譯和運行程序時,我沒有得到任何錯誤,但輸出文件是錯誤的。 在代碼我叫dhscf填補陣列Gnaatm和Gnascf與價值觀,我(TRY),拯救那些在gavenaa和gavenas,呼叫dhscf再次爲Gnaatm的Gnascf獲得新的價值。當我將所有這些數組寫入文件gavenas en gavenaa似乎是空的,雖然Gnaatm和Gnascf不是。Fortran數組除了出錯
我使用的代碼是:
模塊變種
real(dp), dimension(:), allocatable :: Gnaatm(:), Gnascf(:), gavenaa(:), &
& gavenas(:)
端模塊
grdsam.f:
allocate (Gnaatm(nasize))
allocate (Gnascf(nasize))
allocate (gavenaa(nasize))
allocate (gavenas(nasize))
call dhscf(.....)
gavenaa = Gnaatm
gavenas = Gnascf
do ipt = 1, npt
call dhscf(....)
gavenaa = Gnaatm + gavenaa
gavenas = Gnascf + gavenas
enddo
open(unit=12, file="Zgavenaatm.txt", status="replace")
do iwrite = 1, nasize
write(12, *), iwrite, gavenaa(iwrite), Gnaatm(iwrite)
enddo
close(12)
open(unit=12, file="Zgavenascf.txt", status="replace")
do iwrite = 1, nasize
write(12, *), iwrite, gavenas(iwrite), Gnascf(iwrite)
enddo
close(12)
deallocate (Gnaatm)
deallocate (Gnascf)
deallocate (gavenaa)
deallocate (gavenas)
端grdsam
當我跑過程序我沒有得到錯誤,但輸出文件是錯誤的。典型的輸出是這樣的:
10 0.0000000000000000 -2.35488624992556957E-015
11 0.0000000000000000 -4.75822627213221874E-017
12 0.0000000000000000 -7.16040821425613171E-014
13 0.0000000000000000 8.33283089385797112E-021
14 0.0000000000000000 -1.04121906025281556E-014
第二列只包含零,但第三列確實包含數字。 所以數組'Gnaatm'和'Gnascf'包含數字,但不知何故將它們添加到'gavenaa'和'gavenas'出錯了。任何人都可以告訴我我做錯了什麼?
ps。我使用gfortran編譯器在Ubuntu 12
我認爲這個問題存在於你的子程序'dhscf'中......到目前爲止你沒有發現任何錯誤。 – sigma
如果您尚未這樣做,請嘗試使用最大調試選項編譯並查看編譯器是否可以幫助找到問題。用gfortran我建議:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck = all -std = f2008 -pedantic -fbacktrace –
你確定在計算結束時這些數組應該包含0以外的值嗎? –