2017-10-05 22 views
-3

FORTRAN gnuコンパイラを使用して、fortran(.f90)を使って書かれたコードをコンパイルします。他のコンパイラとは異なり、write文の出力は、出力ファイルに書き込まれるのではなく、画面に表示されます。Gnu fortranコンパイラ書き込みオプション

たとえば、ソースコードの途中で「write(*,*)」をチェックして、誰かがコンパイル済みのコードを実行したときにこのメッセージが画面に表示されるようにします。

私はこのメッセージがターミナルウィンドウに表示されない理由を理解していませんが、コードを実行しているのに出力ファイルに書き込まれています。

この問題を解決していただきありがとうございます。

>

私はコンパイルしていますこれらのソースコード:私は、コードをコンパイルするために使用しています

https://github.com/firemodels/fds/tree/master/Source

メイクファイルは次の場所にあります。

https://github.com/firemodels/fds/tree/master/Build/mpi_intel_linux_64

私は実行makefileが作成する実行可能ファイルを使用するプログラム

私が使っているコンパイラのバージョンはありがとう

GNUのFortran(Ubuntuの〜16.04.5 5.4.0-6ubuntu1)5.4.0 20160609

>

です。

+1

あなたの動作は予期していない。 gfortranコンパイラは問題ではありません。コードを投稿してください。 – Manfredo

+1

あなたがしていることを正確に教えてください。 * exact *コード([mcve]参照)とそれをどのようにコンパイルするか(使用しているすべてのコンパイラオプションとフラグ)と実行方法は必要です。あなたのオペレーティングシステムとコンパイラのバージョンが必要です。 –

+0

この質問に**ここにコード**を入れてください。外部リンクのコードでは不十分で、コードが**大きすぎる**。 [ask]と[mcve]を参照してください。そのエラーがどこで起こったのか正確に教えてください。質問を閉じる正式な理由は次のとおりです。「デバッグのヘルプを求める質問(「なぜこのコードは機能しないのですか?」)には、目的の動作、特定の問題またはエラー、および質問自体にそれを再現するのに必要な最短コード"* –

答えて

0

大きな画像:NISTからバイナリを直接ダウンロードするのではなく、ソースからFDSを作成する理由はありますか?つまり、https://pages.nist.gov/fds-smv/downloads.html

安全性に関するコードを認定する場合は、他の人のバイナリを使用するのではなく、ソースからコンパイルする必要があるかもしれません。 QA要件を満たすために、コードバージョン、実行日などのヘッダーページに特定の情報を追加する必要があります。

FDS(火災分析の練習、CFDの学習、コードの評価)を学ぶだけなら、NISTのバイナリを使用することを強くお勧めします。ソースからコンパイルする必要がある場合は、問題を診断するためにさらに情報が必要になります。

これは、コードをビルドする必要があるというユースケースがあると仮定して動作していますが、具体的な問題は、デフォルトの出力ユニット*に書き込むと、期待通りの出力が得られないようです。

現代Fortranは、Fortranの不明瞭なトリビア(この場合はデフォルトの入力および出力単位)を形式化するiso_fortran_envモジュールを提供しています。あなたが編集しているモジュールで

、のようなものを探して:あなたはとしてoutput_unitか(の輸入が表示された場合

use iso_fortran_env 

または

use iso_fortran_env, only: output_unit 

または

use, intrinsic:: iso_fortran_env, only: STDOUT => output_unit 

最後のケースでは)エイリアスを追加する場合は、*の代わりにそのユニットに書き込みます。

iso_fortran_envからインポートしない場合は、印刷しているルーチンまたはモジュールに上記の最後の行を追加し、*ではなくSTDOUTに書き込んでください。

これは、FDSの作成者がIOをリダイレクトするのに奇妙なことをするかどうかによって、問題を解決する場合としない場合があります。彼らはかもしれません。私は、コードがネットワーク化されたマシン上で並列に実行されるMPI環境で、画面への書き込みがどのように機能するのかよくわかりません(その場合、ネットワークログシステムに書きます。しかし、コード実行の単一インスタンスの単純なケースでは、に書き込む方が*に書き込むよりも正確で、6に書き込むよりも読みやすく、読みやすいです。

FDSで幸運を祈る。私は空気中の水素ガスのプルームから層形成をモデル化するために簡単に使用しようとしました。 FDSは私の貧しい8 CPUマシンを膝に持ってきたので、私はCFDを動作させるのではなく、手で見積もることに戻った。

+0

だから、あなたが示唆され、1は一般的に、私はありません願っています。彼/彼女は間違ったIFITは奇妙な何かを何かを行っている必要があります。 –

+0

書き込みに関する不正確なものは何もありません? 'の代わりに'書き込み(* 'の書き込み(STDOUTを、'使用する必要がありますもしあなたが同じ問題を抱えていれば 'print'文を修正するように提案するのですか? –

+0

私に' write(*、...) 'は曖昧ですFortranのプロセッサが '*'が何を意味するのかを決めるという点で、標準化され文書化されている可能性がありますが、私はまだ不安です。私はそれを避けることができます:) – arclight

関連する問題