問題タブ [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.
module - Fortran 90 で共通ブロックとモジュールを使用する際にメモリに関する違いはありますか?
私は最近、指導なしで Fortran を学習し、さまざまなバージョンを試しています。私はこのサイトから見つけました:
MODULE は COMMON ブロックより優れていますか?
ほとんどの場合、はい。COMMON ブロックを使用する唯一の理由は、FORTRAN 77 コンパイラ (まだ存在します) のみを備えたコンピューターでプログラムを使用することが予想される場合、またはデータがメモリに格納される順序を制御することが非常に重要である場合です。
モジュールを使用することは、共通ブロックを使用することよりも確かに構文的に優れています。しかし、どちらの場合もメモリ使用量と割り当ての違いは何ですか? また、パフォーマンスやアクセス速度に違いはありますか? その質問は理にかなっていますか?
c++ - C++ で同等の共通ブロック
古い Fortran 77 コードを C++ に変換しようとしていますが、ほとんどの変数は次のような共通ブロックで宣言されています。
私が理解しているように、共通ブロックは、プログラム全体のさまざまなサブルーチンで変数にアクセスできるようにするためだけに使用されます。したがって、C++ プログラムでは、(メインの外部で) 変数を使用して構造体を作成し、この方法で変数を構造体のメンバーとして呼び出すことができますか?
c++ - C++ - データを構造体に渡す
Fortran 77 コードを C++ に変換していますが、Fortran 77 は共通ブロックを使用しています。共通ブロックを構造体に置き換えようとしています。構造体に関数からの値を入力し、メインで使用するために両方を呼び出します。現時点では、私のコードは次のようになります。
現時点では、私のメインは値を出力する以外は何もしていないため、これは単なるテストです。私が欲しいのは、data
関数で値が与えられた変数をコード全体で使用できるようにすることです。現時点で迷っているのは以下の2点です。
1) 私のPierson-Moskowitz
関数は Ug に対して何も出力しません。なぜだかわかりませんか?2)その機能が必要かどうかさえわかりませんdata
。基本的に、私が翻訳している Fortran コードはサブルーチンを使用して、共通ブロック内の変数に値を割り当てます。構造体と関数を使用して値を入力することで、同様のことをしようとしています。
このコードは非常に短いので、すべてを 1 つのファイルにまとめる予定です。どんな助けでも本当に感謝しています!!
fortran - Fortranの乱数ジェネレーター
リンク (fortran 77 コード) に記載されているように、RNG コードをテストしています:
https://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html
Park & Miller アルゴリズムを適用します。 .
プログラムの関数呼び出しは
ただし、プログラムは srand() によるシードに応答していないようです。つまり、x 値は最初のシードの影響を受けず、常に ~0.218 に等しくなります。x の値は、データブロックで定義された初期化値である 123456789 としてシードを配置することと同等であるため、これは共通ブロックとデータブロックの定義に関係していると思われます。
何か案は?
gfortran でコンパイルしています。
fortran - Fortran のサブルーチンに共通変数を渡す
共通ブロックを深く使用してグローバル変数を定義する商用コードをカスタマイズしています。
私がやりたいのは、これらの変数の 1 つだけをサブルーチンに渡し、インクルードを作成しないことです。なぜなら、共通として定義された他のいくつかの変数は必要ないからです。
これを行う唯一の方法は、以前に新しいローカル変数を定義し、それにグローバル変数の値を割り当ててから、新しい変数をサブルーチンに渡すことでしたが、その方法は好きではありません..
サブルーチンに変数を渡すときに変数をローカルに変換するよう Fortran に指示する解決策はありますか?
ここに一例があります:
メインプログラム:
サブルーチン:
arrays - 配列サイズの Gfortran COMMON ブロック
gfortran でコンパイルしたい古い fortan コードに問題があります。
コードの問題は、RE がサイズ NEQ の配列であると関数が想定していることです。ただし、配列は共通ブロックに由来するため、配列のサイズを事前に指定することはできません。
コードは非常に長いので、モジュール変数に頼らずに yhis を修正したいと考えていました。私が試してみたいことは、共通ブロックを介して取得する代わりに、引数として NEQ を挿入することです。