0

私は有限要素解析プログラムのFortranサブルーチンを使用しています。2つのサブルーチン間で変数を共有する必要があるため、COMMONブロックを使用しています(編集:モジュールの方が優れています)。問題は、一部の変数のみが他のサブルーチンに渡され、他の変数は渡されないことです。

私のコードは次のようなものです:最初のサブルーチン:

real knom, krot

COMMON /kVAR/ kmom, krot
SAVE /kVAR/

2番目のサブルーチン私は同じ構文を使用します。各サブルーチンのkmom値とkrot値をtxtファイルに書き込むことで結果を制御しています。

  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の値は失われます。どんなアドバイスでも大歓迎です。

João

解決済み:

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

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

use shared_var
4

1 に答える 1

3

2番目のルーチンにknom、krotの宣言を含めましたか?おそらくあなたは暗黙のタイピングを取得していて、krotは整数として出力されています。そして、あなたにはタイプミスがあるようです:knom対kmom。これが、どちらの場合もkmomが整数として出力される理由です。knomは実数であるため、整数として暗黙的に入力します。暗黙的な入力が有効な場合、これらの変数は「k」で始まるため整数になります。レガシーコードから削除するのに手間がかかりすぎない限り、暗黙の入力を使用しないことを強くお勧めします。変数の入力を忘れたり、変数名にタイプミスをしたりした場合にコンパイラーが警告するように、「implicitnone」を使用することを強くお勧めします。ほとんどのコンパイラには、「暗黙のなし」と同等のオプションがあります。

于 2012-04-08T03:32:54.907 に答える