2012-04-08 51 views
0

我正在使用有限元分析程序的fortran子例程。我必須在兩個子程序之間共享變量,所以我使用COMMON塊(編輯:模塊更好)。問題是隻有一些變量被傳遞給另一個子程序,而另一些則不是。在Fortran中使用常見塊的問題

我的代碼是這樣的:首先 子程序:

real knom, krot 

COMMON /kVAR/ kmom, krot 
SAVE /kVAR/ 

二子程序我使用相同的語法。我在每個子程序到一個txt文件中寫入kmom和Krot的值來控制結果:

write(6,*) 'I am in URDFIL', or 'I am in UFIELD' 
1 KINC, kmom, krot 

的結果是:

I am in URDFIL   1  -16700 -2.3857285E-03 
I am in UFIELD   2  -16700 -1155769886 

所以Krot的值丟失。任何建議是最受歡迎的。

若昂

解決:

module shared_var 
    implicit none 
    real*8 kmom, krot 
    save 
end module shared_var 

而且在每個子程序:

use shared_var 
+2

爲什麼不使用'module'而不是'common',以便只需要_one_聲明。 – ja72 2012-04-08 06:52:31

+0

是的,謝謝你的建議! – jpcgandre 2012-04-08 12:25:13

回答

3

是否包含knom在第二個程序申報,Krot的?可能你得到了隱式輸入,並且krot以整數形式輸出。看起來你有一個錯字:knom與kmom。這就是爲什麼在這兩種情況下kmom都是以整數形式輸出 - 因爲knom是真實的,所以將其作爲整數進行隱式輸入。如果隱式類型生效,這些變量將是整數,因爲它們以「k」開頭。我強烈建議不要使用隱式鍵入,除非從遺留代碼中刪除太多工作。強烈建議使用「隱式無」,這樣編譯器會在您忘記輸入變量或在變量名中輸入拼寫錯誤時發出警告。大多數編譯器具有與「隱含無」等價的選項。

+0

沒錯。問題解決了。 – jpcgandre 2012-04-08 12:11:33