2013-04-01 34 views
0

我對Fortran是非常新的,所以請原諒對此問題的任何無知。 無論如何,我正在優化一些仿真軟件。Fortran對變量的引用

爲了更清楚我編輯的子程序在開始時初始化了一些靜態變量,無論啓動條件如何,它們都應該是相同的。

問題是我有另一個編碼調用這個子程序在每個時間步驟重新初始化數百個變量,應該保持不變。爲了解決這個問題,我創建了一個派生類型,其中包含程序中其他模塊的所有這些變量,並且我正在編輯該軟件以初始化派生類型變量而不是模塊變量,以便我可以在不同的時間步驟中進行引用。

我的問題是,我是否做了不必要的工作。如果我只是將所有初始化的東西放到我的主程序之外的子程序中,然後在編譯時將它們鏈接起來,那麼所有變量都會在函數調用中保留它們的值。

回答

2

如果您有應初始化一次,從來沒有改變過一個變量,給它的參數屬性:

real, parameter :: pi = 3.141592

編譯器將把「變量」,如不能改變一個常數。如果您錯誤地嘗試更改此類變量,編譯器會通知您您的錯誤。

這是回答您的問題嗎?

+0

有點問題是,需要儘可能多的工作。 我在想什麼是模塊如何工作。如果我在一個子例程中從一個模塊初始化一個變量,它將保持其值,如果我將該模塊包含在另一個子例程中 –

-2

我不能告訴你在做什麼,但FORTRAN是3GL,它通過引用傳遞參數。如果你想讓main的變量在子例程中,你需要把它放在一個公共塊中。 COMMON塊與C中的全局變量類似。

+2

任何人都不應該使用公共塊編寫新的Fortran。除此之外,建議將變量傳遞給子例程的唯一方法是使用通用塊是錯誤的。錯了。 –