問題タブ [fortran-common-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
424 参照

fortran - power station(4) から intel fortran コンパイラへの移植(2003/11)

fortran コードを power station から fortran コンパイラ (2003) に移植する際に注意する必要がある条件は何ですか?

私が観察したのは、発電所ではすべての変数がグローバル変数として扱われることです(ローカル変数も)。intel fortran(2003) のように、ローカルとグローバルに別々のスコープがあります。したがって、すべてのローカル変数をグローバルにする必要があります。Fortran 2003 ですべてのローカル変数をグローバルにする (プロパティからの) オプションはありますか。私のコードには何百もの変数があるためです。すべてのローカル変数をグローバルに割り当てる代わりに (COMMON ブロックを意味します)、誰かがそれに対する良い解決策を提案できますか?

これとは別に、powerstation から intel fortran コンパイラにコードを移植する際に、他の問題に対処する必要がありますか (11/2003)?

0 投票する
2 に答える
1275 参照

fortran - Fortran での一般的なブロックの使用法

私は Fortran が初めてで、仕事のために簡単なことをしているだけです。そして、一般的に新しいプログラマーとして、これがどのように機能するのか正確にはわかりません. .F ファイルの先頭には、共通の宣言があります。私にそれを説明した人は、それをCの構造体のように考え、それらはグローバルであると言いました。また、同じ.Fファイルで、どのタイプで宣言されていますか。だから、それは次のようなものです:

そして、実際に他のファイルで使用されているのを見ると、ローカル変数 (たとえば、SOMEVAR_LOCAL) を宣言し、条件に応じて、SOMEVAR_LOCAL = 1 または 0 を設定します。

次に、次のようなことを言う別の条件文があります。

(これが適切な Fortran でない場合は申し訳ありませんが、現在はコードにアクセスできません)。したがって、SOMEVAR と呼ばれる、ある程度の長さ (2 バイトのデータ?) の "構造体" のような変数があり、フラグとして使用されるローカル変数があるように思えます。 struct SOMEVAR をその値に設定できます。しかし、(PARAM) があるので、その特定のインスタンスの配列のようなものですか? ありがとう。説明が下手で申し訳ありませんが、私が求めていることを理解していただければ幸いです。

0 投票する
1 に答える
1135 参照

dll - 共通ブロック、FORTRAN、および DLL

私はプログラミングを行うモデラーです...私は自分自身をプログラマーとは決して呼びませんが、C# と FORTRAN でプログラミングしています。dll を介していくつかの C# コードに接続した FORTRAN モデルがあります。変数を dll のメモリに保持するには、共通ブロックが必要であることがわかりました。また、複数の include ステートメントを使用できないこともわかりました...共通変数のインクルード ファイルはすべてラベル付けされていません。Chapman (2008) 「科学者とエンジニアのための FORTRAN 95/2003」では、「ラベルのない COMMON ステートメントは決して使用すべきではありません ...」と述べています。

共通ファイルに破損したメモリがないことを確認するにはどうすればよいですか? 実験はできると思いますが、これについて適切なアドバイスが欲しいと思っていました。Microsoft Visual Studio 2008 内で Lahey-F バージョン 7.2 を使用しています

誰でも、何か考えはありますか?

0 投票する
1 に答える
583 参照

fortran - 整数とメモリ容量のブロックまたは変数定義

誰もがこの問題について考えを持っていますか、私は3000要素メッシュでうまく動作するコードを持っていますしかし、17000要素メッシュでそれを実行したいとき、それは私にこのエラーを示します: 共通ブロックまたは変数は2147483647バイトを超えない可能性があります

これはコードの一部です:

そして、それはエラーを示しています

なぜそのようになっているのでしょうか。

0 投票する
1 に答える
3568 参照

fortran - このレガシー FORTRAN 77 コードを *.h ファイルでコンパイルするにはどうすればよいですか?

FORTRAN コードを構成する .F ファイルと .H ファイルのコレクションがあります。.H ファイルをコンパイルするのに苦労しています。.H ファイルには、一連の共通ブロックが含まれています。.H ファイルの 1 つの例は次のとおりです。

Google で回答を検索すると、.h ファイルは c/c++ ファイルであると言われていますが、c/c++ で記述されているようには見えません。gfortran も C ファイルだと思っているようです。

コンパイルしようとすると:

gfortran-4.5 -fdefault-real-8 -fbacktrace -fno-align-commons HEAD.h

エラーが発生します:

最初の行 '*AC HEAD' をコメントアウトしようとしましたが、エラーは *. それをコメントアウトするために HEAD # 値を含む最後の列に何かが必要ですか? C++ コンパイラで .H ファイルをビルドする必要がありますか?

0 投票する
4 に答える
480 参照

function - Fortran: 共通ブロックで関数名を渡す方法

Fortran では、次のように共通ブロックに関数を配置することは可能ですか? COMMON /myblock/ func (x は変数で、func は関数です)。

私の問題は、外部関数 func(x) を呼び出す関数 s(x) を作成したいが、s(x) で func を渡さないことです。私のプロジェクトでは、s(x) は 1 つの変数のみの関数でなければなりません。つまり、そうしたくありません: function s(x,func) s=func(x)

代わりに、私ができることを望んでいます: function s(x) common /myblock/ func s=func(x)

または、モジュールなどを使用して他の提案があれば、これは素晴らしいことです。

助けてくれてありがとう。

o.

次に、s(x) を呼び出すサブルーチンに同じ共通 (myblock) があります。

0 投票する
1 に答える
278 参照

fortran - サブルーチンの呼び出し後、変数が奇妙なことにゼロの値を取る

Compaq Visual Fortran 6.6 で以前にコンパイルされたコードを gfortran に変換しようとして、いくつかの問題に直面しています。
これは私が gfortran で遭遇した特定の問題です:
値 3E+10 を取る "et" と呼ばれる変数があります。次に、プログラムはサブルーチンを呼び出します。「et」はサブルーチンに現れませんが、メイン プログラムに戻ると、値が 0 になっています
。Compaq Visual Fortran でコンパイルすると、この問題は発生しませんでした。
私が取り組んでいるコードは巨大な科学プログラムなので、その一部だけを以下に示します。

: "et" は、サブルーチン "perm" を呼び出す直前まで適切な値を保持します。このサブルーチンの直後に値ゼロを取ります。
「et」はどの共通ブロックにもありません
このコード片は、いくつかの異なるサブルーチンによって呼び出されるサブルーチンの一部です。さらに奇妙なのは、コードの他の部分で呼び出されたときにこの問題が発生しないことです (「et」はその値を保持します)
。とても感謝しています

0 投票する
3 に答える
4702 参照

performance - 割付け配列のパフォーマンス

COMMON ブロックを使用して、コード全体で使用される配列を格納する mpi バージョンのプログラムがあります。残念ながら、COMMON ブロック サイズで配列を宣言する方法はありません。そのサイズは、実行時にしかわかりません。そこで、回避策として、ALLOCATABLE 配列を受け入れるモジュールにその配列を移動することにしました。つまり、COMMON ブロック内のすべての配列が消去され、代わりに ALLOCATE が使用されました。したがって、これが私のプログラムで変更した唯一のものです。残念ながら、プログラムのパフォーマンスはひどいものでした (COMMON ブロックの実現と比較した場合)。mpi 設定に関しては、各計算ノードに単一の mpi プロセスがあり、各 mpi プロセスには単一のスレッドがあります。てるの見つけたここで質問されますが、考えないでください(理解できません:))私のケース(各プロセスに単一のスレッドがある場合)にどのように適用できるか。助けていただければ幸いです。

これは、私が話していたことを示す簡単な例です (以下は疑似コードです)。

"ソースファイル":

ご覧のとおり、ZEROSET() には並列または MPI 要素はありません。FILE_1.INC、FILE_2、...、FILE_N.INC は、ARRAY_1、ARRAY_2 ... ARRAY_N が COMMON ブロックで定義されているファイルです。そんな感じ

NX、NY、NZ は、PARAMETER ディレクティブを使用して記述された明確に定義されたパラメーターです。モジュールを使用するときは、すべての COMMON ブロックを破棄しただけなので、FILE_I.INC は次のようになります。

そして、上記の「INCLUDE 'FILE_I.INC'」ステートメントを「USE FILE_I」に変更しました。実際、並列プログラムを実行する場合、特定の 1 つのプロセスがドメイン全体 (NX、NY、NZ) を必要としないため、パラメーターを計算してから ARRAY_I を割り当てます (一度だけ!)。

サブルーチン ZEROSET() は、COMMON ブロックで 0.18 秒、モジュールで 0.36 秒実行されます (配列の次元が実行時に計算される場合)。そのため、パフォーマンスは 2 倍悪化しました。

すべてが明確になったことを願っています。大変助かります。

0 投票する
1 に答える
381 参照

fortran - Fortran の共通ブロック

Fortran には共通ブロックに共通ブロックがありますか? 構造体の中に構造体があるように。例えば

上記のコードは、common1 内にある common2 を意味しますか?

0 投票する
1 に答える
458 参照

c - C-Fortran 混合プログラミング

C で Fortran ライブラリを使用する必要があるプロジェクトに取り組んでいます。Fortran ライブラリには、複素数 * 16、4x4 配列を含む共通ブロックがあります。現在 C では、複素数変数は単純に 2 つの要素を含む構造体であり、complex*16 であるため、要素は long double である必要があります。これは、Fortran で対応する C データ型です。したがって、2 つの long double を持つ構造体があります。

この配列の要素にアクセスします。良いことは、ライブラリの他のすべての共通変数と一緒に、すでにそれを行うことができるということです。問題は、配列からインポートする要素が、

1) 「 C と Fotran の配列構造の違いを考慮しても」本来あるべき順序ではありません。

2) ほとんどの要素は正しいですが、2 つの要素はあるべき姿とは大きく異なります。

3) long double の代わりに double を使用する場合にのみ、正しい要素 (2 つを除く) を取得します。long double (および正しい文字変換) を使用すると、まったく異なるものが得られます。これは、変換の問題を明確に示しています。

私が持っていたすべての説明を使い果たしましたが、何もうまくいきません。C で配列をプライティングするための私のコードは次のとおりです。

追加情報: Fortran オブジェクト ファイルを混在させる必要があるため、gfortran を使用して C ファイルをコンパイルしています。代わりに GNU C コンパイラを使用すると、gfortran ルーチンを認識しないというエラーがスローされます。これも問題の原因である可能性があります。gfortran が C の long double を認識しない可能性があります。

どんな助けでも役に立ちます。