我有一些執行模擬的Fortran代碼。所用時間存儲在et
中,時間步存儲在dt
中。兩者都被定義爲真實類型。還有一個實際變量tot
,它保存了模擬應該運行的最長時間。 i
是整數類型的計數變量。我第一次嘗試是這樣的:使用Fortran進行循環內計數
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
integer :: i
et = 0.0
i = 0
do
i = i+1
et = real(i)*dt
if (et > tot) exit
! main code here
end do
我想擺脫i
,因爲它是在一個地方只用,但是,當我嘗試這樣做,程序時的總時間是大掛起:
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
et = 0.0
do
et = et + dt
if (et > tot) exit
! main code here
end do
導致程序響應如此不同的兩個代碼示例有什麼不同?我的編譯器是g77。
編輯:我已經將聲明和初始化添加到上面的代碼示例。
編輯2:傳遞給子程序的初始值是dt = 1e-6
和tot = 100.
程序如何掛起?錯誤?無限循環(即'等'永遠不會達到'tot')? –
@Anders:我假設一個無限循環,因爲程序運行10分鐘以上而不停止(使用代碼的第一個版本,大約1.5分鐘後停止)。 – astay13
我猜'et'會在主代碼裏面重新定義。您是否嘗試過打印這些值以檢查其行爲是否符合您的期望? –