問題タブ [fortran77]
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.
file-io - Fortran でバイナリ ファイルを開く: ステータス、フォーム、アクセス
私は何年も Fortran を使用してきましたが、ファイル I/O はまだ漠然としています。status
、、、form
についての私access
の理解recl
は限られています。大学院では特定のユースケースしか必要としなかったからです。
Fortran バイナリ ファイルには、ファイルのサイズを説明する追加情報がファイルの先頭にあることを知っています。しかし、Fortran コードで Fortran ファイルを処理する必要があっただけで、余分な情報が必要でありながら目に見えないため、これまで問題になったことはありませんでした。
しかし、Fortran でフラットなバイナリ ファイルを開くにはどうすればよいでしょうか。
以前は、次のようにして Fortran を使用して Fortran バイナリを開くことができました。
しかし、Fortran ヘッダー情報を持たないフラットなバイナリ ファイルの場合、これはどのように変化するのでしょうか? さらに重要なことは、これらの用語をより詳細に説明するための適切なリンクがどこにあるstatus
かform
です。access
recl
python - FORTRAN77関数は配列を返します
このような基本的な質問をしてすみません。私はいくつかのFOTRAN77コードに取り組んでおり、Pythonからそれを呼び出そうとしています。ただし、関数から2つ以上の値を返す際にいくつかの問題が見つかりました。
以下はコードです。4つの入力(APPRAT、APPNUM、APSPAC、KOC)があり、GENEEC3に格納されている3つのパラメーター値(APPTOT、KD、TDEGF)を返したいと思います。コンパイルされたコードは、1つのパラメーターのみが返される場合は正常に機能しますが、3つのパラメーターを返送するように要求すると機能しません。
だから私にいくつかの提案をしてくださいそして助けてくれてみんなに感謝します!
c - Fortran 77 から C へのポインター変数へのポインターの受け渡し
Fortran 77 と C を組み合わせたコードを書かなければなりません。署名付きの C 関数があるとします。
したがって、C でfooを呼び出すと、
ここで、Fortran 77 に次のようなものがあるとします。
xをfooに渡すと、C コードで"&x" をfooに渡すのと同じことになりますが、それは機能しません。xの Cray ポインターを作成してから、Cray ポインターをfooに渡す必要がありますか? それはうまくいくでしょうか?Crayポインタなしでこれを行う方法はありますか? ありがとう!
fortran - 算術定数式のべき乗
Fortran 77 では、以下は違法であることが判明しました。
その理由は、パラメーター ステートメントが定数演算式を取り、指数が整数の場合を除き、べき乗が正しくないためです。(セクション 6.1.3 および 8.6 http://www.fortran.com/F77_std/rjcnf0001-sh-8.html#sh-8.6 )。この制限が標準の新しいリビジョンで緩和されたかどうかは誰にもわかりませんか? そもそもなぜこれが違法になるのでしょうか?
c - Fortran 77 は共通ブロック変数をどのように割り当てますか?
C、C++、または Fortran コードで動作するライブラリを C で開発しています。使用するメカニズムの 1 つは、スタック、ヒープ、またはデータ/bss セグメント内のページへの書き込みをトラップすることです。この場合の「ヒープ」は、マップされたファイルからライブラリが作成する特別なヒープです。ライブラリが Fortran アプリケーションの変数への書き込みをトラップできないことがわかりました。変数は次のように宣言されます
ここで、I、J、および K は整数パラメーター (定数) です。次に、コードは「フィールド」と呼ばれる共通ブロックに u を含めます。
GDB の下でデバッグすると、u のアドレスが 3 つのデータ セグメントのいずれの範囲にも収まらないことがわかりました。(そのため、ライブラリは書き込みをトラップできませんでした!) 次に、/proc//maps 疑似ファイルを調べたところ、u のアドレスが、システムが「ヒープ」として注釈を付ける範囲内にあることがわかりました。しかし、どうやってこの「ヒープ」に入ったのですか?この場合の Fortran 77 コードは、非標準の「割り当て」キーワードを使用してヒープに割り当てません。Fortran 77 (Ubuntu Linux x86-64 の下) が「ヒープ」に割り当てる変数と、この「ヒープ」が最初にどのように作成されるかを誰かに説明してもらえますか?
segmentation-fault - dlatrsサブルーチンは、呼び出し元のサブルーチンでカウンターの割り当てを解除します
シミュレーションソフトウェアをクラッシュさせるsegfault/sigabortをデバッグしようとしています。これを特定のLAPACKサブルーチンまで追跡して、(他のいくつかのサブルーチンを介して)このLAPACKサブルーチンを呼び出すサブルーチンのグリッドカウンターを変更する(または実際に割り当てを解除する)ことができました。このバグを追跡する私のgdbデバッグセッションは次のとおりです。
そしてバックトレース:
Ubuntu11.10とgfortran4.6.1、Ubuntu12.04とgfortran4.6.3、Scientific Linux5.6とgfortran4.3.4、MicrosoftWindowsとgfortran4.5.0-1で再現できました。LinuxボックスでIntelコンパイラを使用すると、このエラーを再現できませんが、アカデミックライセンスを使用しているため、Windowsではifortを使用できません。ただし、一部の学生にはWindowsバージョンが必要なため、gfortranでこれを修正する必要があります。リリースバージョンにはコンパイラフラグ-funroll-all-loops-fno-f2c-O3を使用し、デバッグバージョンにはフラグ-fno-f2c-O0-g3を使用しています。どちらのオプションでもこれらの問題が発生します。
また、このバグは、大きなアレイが使用されている場合にのみ再現可能です。最大サイズ(500、Ns)の配列とサイズ(Ns、Ns、500)の配列を使用しています。クラッシュしないシミュレーションではNs=53を使用し、クラッシュする場合はNs = 153を使用しますが、Nsの宣言されたサイズは200です。
最後に、クラッシュするコードを示します:solver.f、サブルーチンtrifactorize:
dlatrs.f:
間違ったコンパイラフラグを使用しているのか、それともまれなgfortranバグに遭遇したのか疑問に思っていました。誰かがこれを解決する方法を知っていることを願っています。
file - Fortran77 を使用して、FOR90 で OPEN(POSITION="APPEND") と同じことを行うにはどうすればよいですか?
Fortran77 を使用してファイルを開きたい場合、ファイルはファイルの最後に移動し、ファイルは上書きされません。
FORTRAN90/95 の OPEN(**,ACCESS="SEQUENTIAL",POSITION="APPEND") と同じ
performance - fortran での二分探索効率と線形探索効率
この質問は、線形検索の効率と、連続したストレージ内の事前に並べ替えられた配列のバイナリ検索の効率に関するものです...
Fortran (77!) で書かれたアプリケーションがあります。コードの一部で頻繁に行われる操作の 1 つは、配列内のインデックスを検索することgx(i) <= xin < gx(i+1)
です。私は現在、これを次のように実装していますbinary search
-- ステートメントのラベルについては申し訳ありませんが、- goto
fortran 90 を使用すると、同等のステートメントがどのようなものになるかをコメントしました...
しかし、今日、ウィキペディアで二分探索について読んでいて、これに出くわしました。
私はこのステートメントを完全には理解していません.キャッシュフェッチは一度に大きな(っぽい)チャンクに集められたので、配列の先頭から開始すると、配列のほとんどがキャッシュにあると思いました.すでに(少なくとも線形検索の場合と同じくらい)、それが問題になるとは思いませんでした。
だから私の質問は、どちらのアルゴリズムがより優れたパフォーマンスを発揮するかを知る方法はありますか (線形検索またはバイナリ検索ですか?) 配列サイズの境界はありますか? 私は現在、約100要素のサイズの配列を使用しています...
fortran - gfortran は、f90 と f95 のどちらのコードをコンパイルしているかをどのように判断できますか?
gfortran が f90 または f95 をコンパイルできることを理解していますか? コンパイルしているものをどのように知るのですか? また、f77 コードをコンパイルできますか? ubuntu にはすでに fortran コンパイラがありますか、それとも gfortran をダウンロードする必要がありますか?