2011-04-12 211 views
1

嘿,我 有一個這樣的代碼:Fortran語言:簡寫形式,「做循環」

write (filehandle,'(5e14.6)') 
    & (((my_array(i,j,k,1),i=istart,iend,istep),j=jstart,jend,jstep),k=kstart,kend,kstep) 

這是一個「做環」的簡寫形式?我找不到任何關於它的谷歌... 此外,我發現了一個錯誤:

forrtl: severe (71): integer divide by zero Image PC
Routine Line Source libpthread.so.0 00007F473F0D892B Unknown Unknown Unknown libguide.so 00007F473F3CC20E Unknown Unknown Unknown

執行時的程序(程序並行使用OpenMP)有關該行(刪除行刪除錯誤MSG)。這可能是什麼原因呢? 謝謝!

回答

4

正如已經回答的那樣,這是一個隱式的do循環。

可以通過零點步進,jstep或kstep?這可能導致整數除以零,因爲程序試圖計算循環迭代次數。

當您在沒有OpenMP的情況下編譯時,程序是否可以正常運行?

+0

非常感謝!這給了我線索:istep,jstep或kstep爲零,因爲我忘記將它們設置爲在OpenMP中共享(並且是的,這就是爲什麼沒有OpenMP就可以編譯好,因爲所有這些變量都是可見的,但在使用OpenMP時,因爲默認(私人))!非常感謝! – tim 2011-04-12 10:47:20

1

這些被稱爲隱式或隱含的do循環。

我沒有在該聲明中看到除零的任何除法,它可能是周圍的線之一嗎?

+0

奇怪的是,當我有這樣的: 寫(*,*) '測試1' 寫(文件句柄, '(5e14.6)') &(((my_array(I,J,K, (*,*)'test2' 我只在我的屏幕上看到「test1」(1),i = istart,iend,istep),j = jstart,jend,jstep),k = kstart,kend,kstep) 。當我註釋掉寫循環時,我還看到「test2」Oo – tim 2011-04-12 10:35:06

+0

該文件是什麼樣子的?它是否被寫入? – jonsca 2011-04-12 10:42:21