問題タブ [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 に答える
709 参照

module - Fortranモジュールのフォーマットステートメント

私は、すべて同じフォーマットのセットを出力に使用するいくつかのサブルーチンを備えたモジュールを持っています。今のところ、すべてのサブルーチンでフォーマットを宣言する必要があります。モジュールでそれらを宣言して、すべてのサブルーチンがそれらにアクセスできるようにする方法はありますか?

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

parallel-processing - Fortran の OpenMP ディレクティブへの文字変数引数に関する質問

現在、OpenMP を使用して Fortran で記述されたマルチグリッド コードを並列化しようとしていますが、OpenMP のスケジューリング句がパフォーマンスに大きな影響を与えることがわかりました。OpenMP スケジューリング節は、静的、動的、ランタイム、およびガイド付きであり、ループ内の作業をスレッド間で分割する方法を決定することを思い出してください。たとえば、スケジューリング句を含む OpenMP の並列化された SAXPY ループは次のようになります。

ここで、コードの一部に多数の並列化されたループがあり、これらのスケジューリング句のどれがプログラムを最も速く実行するかを先験的に決定する方法がないと想像してください。各スケジューリング節を手作業で変更するのは面倒なので、私がやろうと思ったことは次のとおりです。

次に、その文字変数 'sched' をすべての並列化されたループに配置し、たとえば sched="Static" を配置して一度にすべて変更し、実行時テストを実行して、どれが最も速く実行されたかを確認します。もちろん、少なくとも gfortran や Absoft コンパイラでは動作しません。したがって、私の質問は次のいずれかまたはすべてです: なぜこれが機能しないのですか?、どうすれば機能させることができますか?、またはこの問題を解決するためにこの構造を使用しないようにするにはどうすればよいですか? どんな助けでも大歓迎です。

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

fortran - Fortran: 同じ配列を 2 つの仮引数としてサブルーチンに渡す

入力として 2 つの配列を受け入れるサブルーチンがあるとします。1 つはインテント (イン) が与えられ、もう 1 つはインテント (アウト) が与えられます。後者は、任意の方法で前者から導出されます。しかし、両方の仮引数に同じ実引数を渡すとどうなるでしょうか? 一般に、結果はサブルーチンによって意図されたものではありません。以下のコード スニペットを参照してください。

問題は、インテント フラグを指定したにもかかわらず、コンパイラが気にしていないように見えることです。Intel Visual Fortran Composer 12 をすべての診断機能とともに使用しています。コードをより安全にするために、サブルーチンをコーディングするより良い方法、または欠落しているコンパイラ オプションはありますか?

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

linker - FORTRAN および C++ オブジェクト ファイルのリンク

ISO_C_Binding モジュールを使用している FORTRAN から C++ 関数を呼び出します。コマンドでFORTRANメインファイルとC++関数を圧縮した後

オブジェクトファイルを作成しますが、一部のメンバーが提案したように、リンク段階でコマンドを使用します

つまり、FORTRAN ライブラリにリンクして C++ コンパイラを使用すると、次のようなエラーが発生します。

したがって、主な問題は、リンカーがFORTRANライブラリとリンクできないことだと思います。そのg++ため、リンクオプションにパスを含める必要があるか、コンパイラで設定を行う必要があるかもしれg++ませんが、これはわかりませんこれを行う方法なので、この問題を整理するのを手伝ってください。

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

interface - Fortran の他の関数/モジュールから外部関数にアクセスできるようにする

私は Fortan の初心者で、コールバック関数を fortran コード全体で使用できるようにすることについて質問があります。

C# から Fortran DLL にアクセスするインターフェイスについて書いています。

Fortran コードは C# コードのいくつかの関数を使用する可能性を必要とするため、2 つのデリゲートを Fortran コードに渡します (vdiCwertCllbak、vdiIwertCllbak)。

これは、MainFunction で使用すると非常にうまく機能するため、インターフェイスはこれまでのところ機能しています。

ここで必要なのは、c# 関数が MainFunction の外部の他の関数から、さらには別のモジュールからも利用できる必要があることです。

この問題に対処するために関数ポインタを使用しようとしましたが、m_vdiTestFuncCllBak を呼び出すと常に次のエラーが発生します。vdiTestFuncCllBak の呼び出しは問題なく機能します。

関数内または外部モジュール内でポインターを初期化する場合と同じ動作です。

次の c# コードが呼び出されます。

問題は、functionpointer を使用するときに、inputValue と retValue の参照が設定されていないことです。

誰かが以前に同じ問題を抱えていて、可能な解決策を知っているか、ヘルプへのリンクを持っていますか? 私の検索では、それに関する情報は見つかりませんでした。

Intel 11 コンパイラを使用しています。

助けていただければ幸いです。

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

fortran - fortran で空きユニット番号を取得する

ファイルを開いて解析するライブラリを開発する必要があります。Fortran IO スタイルのため、ユニット番号は自分で決定する必要がありますが、クライアント コードで他のどのユニットが開いているかわかりません。のような標準機能はありgive_me_any_unit_number_that_is_free()ますか?

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

fortran - fortran モジュール -- 変数が定義/代入されている場所を見つける

大きな fortran の一部を抽出して独自のプログラムにしようとしています。特定のサブルーチンが多くのモジュールをインポートします (ここでは例として 2 つだけを示します)。

...これらのモジュールからインポートされる部分には、多くの変数が導入されています。どの変数がどのモジュールから来ているかなどを調べる良い方法 (または良いツール) はありますか? または、各モジュールを調べて、それぞれが定義され、割り当てられている場所を確認する必要があります(別のモジュールで発生する可能性があります...)?

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

linux - Linuxのpgf90コンパイラで2回目のサブルーチンの呼び出し時にセグメンテーションエラーが発生しました

Linux環境でpgf90fortrancomplierを使用して、同じサブルーチンを2回呼び出すことはできません。サブルーチンを1回呼び出すことは問題ありませんが、2回目に呼び出すと、セグメンテーション違反が発生します。誰かが私のコードの何が問題なのか、いくつかの提案をすることができますか?簡単な例は次のように与えられます

PS with gfortranはOKですが、IntelVisualFortranで試してみてもOKです。


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

loops - Fortran forall の制限

動的配列を割り当てるために使用しようとしましforallたが、gfortran はそれを好みませんでした。また、ブロック内でwriteステートメントが禁止されていることもわかりました。ステートメントも禁止されているのではないかと思います。forallread

forallブロック内で許可されていないその他の機能/操作は?

do順序が重要でない場合にループを置き換えること以外に、この構造は正確には何のためにあるのでしょうか? 特に操作の順序が重要ではない場合を示すことで、コーディングがより読みやすくエレガントになると思いましたが、 内で実行できる操作はかなり制限されているようforallです。

これらの制限の理由は何ですか?つまり、ユーザーが混乱するのを防ぐ/防止するものは何ですか? を使用することをお勧めしますforallか? もしそうなら、どのような目的で?

現在、私が取り組んでいるコードにはforallブロックが 1 つしかなく、それをすべてdoループに変換すると、ネストされた 4 つのループができてしまいます。どちらの方法が良いですか?

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

error-handling - 純粋な Fortran 手続きでの I/O

私が書いている純粋な手順にエラーチェックを取り入れようとしています。次のようなものが欲しいです:

ただし、純粋な関数は外部ファイルへの IO ステートメントを持つことが許可されていないため、ユニット番号を関数に渡してみました。たとえばoutput_unit = 6、これがデフォルトの出力です。gfortran はこれを依然として違法と見なします。これを回避する方法はありますか?realエラーが発生したときに文字列を出力する関数を(ここでは組み込み型ではなく)派生型にすることは可能ですか?