問題タブ [fortran95]

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 投票する
1 に答える
6296 参照

python - 最新の Fortran コードを Python でラップするための現在の最良の方法

f2py2eを使用して古い Fortran 77 コードをラップしたことは知っていますが、新しい Fortran 95 コードでは機能しないことを理解しています。私は何を使用すべきかを調査し、fwrapG3 f2pyに出くわしましたが、どちらも現在の状態や使用方法について何の説明もしていないようです。f2py のバージョンには、第 3 世代の f2py を使用するオプションがあることがわかりましたが、機能しないとコメントされています。これを考えると、どのプロジェクトを使用すればよいかわかりません。どちらを使用する必要がありますか?

この質問は現在、Computational Science スタック交換サイトにクロスポストされています (そして回答されています)

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

fortran - 実装を非表示にして、Fortran95+モジュールのライブラリに明示的なインターフェイスを提供する方法

私はgfortranの95以上の拡張機能を使用しています。他のプロジェクトにリンクしたいユーティリティモジュールのライブラリがあります。つまり、ライブラリまたは共有オブジェクト/dllとしてです。ただし、Fortranでは、モジュールインターフェイスの2つのコピーを維持せずに、Fortranの実装からインターフェイスを分割する方法がわかりません。

Cでは、次のようにインターフェイスを実装から分離します。

最新のFortranで同じ効果を達成する方法はありますか?ライブラリに.modファイルをユーザーに提供する必要がありますか?

  • 明示的なインターフェースの単一の定義
  • インターフェイス定義のみがユーザーコードに公開されます

編集:(私が思うに)答えを要約すると:

  • 明示的なインターフェイス定義が含まれているため、.modファイルが必要です

  • モジュール用の標準​​のFortranABIはありません-.modファイルはコンパイラ固有になります

  • 実装を隠す問題への唯一の直接的な類似のアプローチは、Fortran 2008で定義され、gfortranがサポートしていないサブモジュールです。

  • @ High-Performance-MarkとFedoraページで示されているように、モジュールを回避する以外の最も実用的なアプローチは、実装用にプリコンパイルされた.modとともに、インターフェイスのみのモジュールのインクルードファイルを配布することです。

  • インクルードを使用すると、一般的なブロックの再定義の可能性など、よく知られた厄介なトリップアップが発生します。

ここに実際に簡単な答えがないことに少し驚いています。

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

gfortran - 多次元動的配列割り当て

マルチブロック CFD コードに動的割り当てを使用したいと考えています。ここで、インデックス (i、j、k) はブロックごとに異なります。n個のブロックに任意の配列インデックスを割り当ててサブルーチンに渡す方法は本当にわかりません。gfortran を使用してコンパイルすると、「エラー: Expression at (1) must be scalar」というエラー メッセージが表示されるサンプル コードを示します。

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

fortran90 - 型定義から呼び出される配列値関数

画像値を読み取るためのライブラリを作成しているときに、次の問題が発生します。という新しい型を定義しましたrealimage。このタイプ内で関数が参照され、結果として配列が返されます。

gfortranを使用してモジュールをコンパイルし、を使用して関数を呼び出すとimage1%pxvalues(x,y)、常に次のエラーメッセージが表示されます。

メインプログラムで関数を直接呼び出すと(pxvaluesreal(image1,x,y))、すべて正常に動作します。

関数の戻り値の次元であるコンパイラーに通知するために、型定義で配列の次元を定義することは可能ですか?

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

function - 予期しない型と値を返す Fortran 関数

Fortran でいくつかの数値メソッドを実装する必要があるプロジェクトに取り組んでいます。このために、いくつかの再帰関数を作成する必要があります。これが私のコードです。

このプログラムの出力は次のとおりです。

print ステートメント (30 行目と 31 行目) の順序を変更すると、出力は次のようになります。

出力は次のようになります (元の print ステートメントの順序の場合):

ウィキペディアのFortran 95 言語機能ページから階乗関数を取得しました。

  • コンパイラ: gfortran 4.5.3 with Cygwin
  • IDE: ネットビーンズ 7.0.1
  • プラットフォーム: Windows 7
0 投票する
1 に答える
1089 参照

memory-management - Fortranの割り当て可能な配列の有効期間

私が以下のコードを持っているとしましょう:

変数var1は2回割り当てられますか?(私はそうだと思います)。呼び出しごとに割り当てられた場合、最初の呼び出しで割り当てられたメモリは解放されますか?

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

fortran - fortranポインターから一意の値を取得するにはどうすればよいですか?

割り当てられたメモリを参照するFortranポインタがあります。そのメモリを参照する一意の番号を取得できるように、それを「ハッシュ」したいと思います。Cでは、ポインターの位置を整数に変換します。

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

pointers - Fortranの型コンストラクタでポインタを使用することは可能ですか?

一部の Fortran 95 コードでは、ポインター フィールドを持つ型があります。type(foo)コンパイル時に初期化されるモジュール変数を宣言したい。このようなもの:

上記のスニペットはコンパイルされません。bar次のような別のサブルーチンを使用して、実行時に初期化できることを理解しています。

しかし、初期化サブルーチンなしでこれを行うことは可能ですか? または、コンパイラによって明示的に呼び出される初期化サブルーチンを宣言することは可能ですか? 注: これは Fortran 95 で行う必要があります。

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

fortran - ifortを使用した配列コピーのプログラムクラッシュ

このプログラムはIllegal instruction: 4MacOSXLionand ifort(IFORT)12.1.020111011でクラッシュします

同じプログラムがgfortranで動作します。問題ありません。何か案は ?コピーを展開し、列に対して明示的なループを実行すると、両方のコンパイラで機能します。

ポインタの代わりに割り当て可能であることに注意してください。問題はありません。

ステートメントがモジュール内にあるかどうかに関係なく、動作は同じです。ifort(IFORT)12.1.320120130でも同じ動作を確認します。

どうやら、Linuxとifort12.1.5では問題は発生しません

次のリンクオプションを使用してスタックサイズを増やしてみました

ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90

しかし、それでも同じエラーが発生します。ulimit-sを同じ問題に増やす。

編集2:もう少しデバッグを行いましたが、アレイのスプライシング操作時に問題が発生するようです

16Mのデータに疑わしいほど近い値が含まれます。

作成されたオペコードを比較していますが、よりコミュニケーションのとれた中間コード形式を見る方法があれば、喜んで感謝します。

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

fortran - 「グローバル」に使用するためにプログラム入力をモジュールに保存する

私はFortran90で、テキストファイルからの入力を何百も読み取り、それらに対して多くの異なる順次操作を実行するプログラムを作成しました。

これらの数百の値を各サブルーチンに渡し続けたくありません(たくさんあります!)。このファイルから読み取ったデータを、任意のサブルーチンからアクセスできるグローバル変数に保存する方法はありますか?どういうわけか、これらの値を各サブルーチンから呼び出すことができるモジュールに保存できると思いますが、その方法がわかりません。