2012-04-08 5 views
0

私は有限要素解析プログラムのFortranサブルーチンを使用しています。私は共通のブロックを使用しているので、2つのサブルーチン間で変数を共有する必要があります(EDIT:モジュールが優れています)。問題は、一部の変数だけが別のサブルーチンに渡され、他のサブルーチンは渡されないということです。 まずサブルーチン: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 

結果は以下のとおりです。だから、krotの値が失われ

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

。どんな助言も大歓迎です。

ジョアン

は解決:

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

そして、各サブルーチン内:

use shared_var 
+2

「common」ではなく「module」を使用して、_one_宣言だけが必要なのはなぜでしょうか。 – ja72

+0

はい、ありがとうございます! – jpcgandre

答えて

3

あなたは、第二のルーチンでkrotをknomの宣言が含まれていましたか?おそらくあなたは暗黙のタイピングを取得しており、krotは整数として出力されています。そして、それはあなたがタイプミスを持っているようです:knom対kmom。これは、knomが実数であるため、kmomが両方の場合に整数として暗黙の型指定として出力される理由です。暗黙の型指定が有効な場合、これらの変数は "k"で始まるので整数になります。レガシーコードから削除する作業があまりにも多くなければ、暗黙の型を使わないことを強くお勧めします。変数を入力するのを忘れたり、変数名にタイプミスをした場合、コンパイラが警告するように、 "暗黙のnone"を使用することを強くお勧めします。ほとんどのコンパイラには、 "暗黙的なnone"と同等のオプションがあります。

+0

そうです。問題は解決される。 – jpcgandre

関連する問題