2015-01-13 40 views
4

我有一些編寫fortran代碼的經驗,但我從未見過這樣的事情。添加/刪除PRINT語句更改變量

我正在使用一個大的HPC代碼(~10K行),我在修改子程序。我使用打印語句來驗證一切正確,並在必要時進行調試。當我用我使用的最後一條PRINT聲明運行我的代碼時,代碼給了我無處不在的實數。一旦我評論這最後PRINT聲明,代碼是給我NaN是我的一些變數。由於我的代碼是太大了,我顯然不能張貼在這裏,但我會發布PRINT聲明:

PRINT*, "outletBC up1 ", SUM(ABS(up(nptsx,:,:))) 

其中up是一些速度陣列。

問題:

這怎麼可能? PRINT陳述如何可能影響任何變量?

+3

這表示代碼中其他位置存在缺陷,可能與訪問數組越界有關。嘗試打開邊界檢查 – agentp

+0

像@agentp說。同時檢查過程調用是否正確匹配虛擬參數和實際參數 –

+0

@HighPerformanceMark我運行我的代碼與多個調試標誌ifort可用。我修復了所有錯誤(有些超出了數組訪問範圍),但錯誤仍然存​​在。 我將繼續調試代碼,但我對於理解print語句如何對代碼中的其他任何內容產生任何影響感到非常感興趣。 – solalito

回答

1

我認爲這代表了代碼中的其他錯誤(例如內存損壞)。我不確定你使用了哪些調試標誌。但是,請嘗試使用編譯標誌「-check all」(對於intel fortran編譯器)。該標誌檢查多個可能的錯誤。有關更多詳細信息,請參閱https://software.intel.com/sites/default/files/m/f/8/5/8/0/6366-ifort.txt

+0

*「我用多個調試標誌ifort有可用的代碼運行我的代碼。」*我認爲這是一個比答案更多的評論,並沒有帶來任何對現有的評論者是新的。 –

+0

這不提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/18676108) –

+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的重要部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18676108) –