• ベストアンサー

fortran90/95における計算結果の書き出し

初心者です。 簡単にするため以下のようなコードを書きます。 real d do 100 d=0,0.4,0.001 write(*,*)'d=',d OPEN(10, FILE='delta.txt', action='write') write(10,*) d close(10) 100 continue end このコードだと、TextFileにはなぜか一つの値しか書かれません。dの値を0から0.4まで0.001刻みで、すべての値を書き出すにはどうすればよいのでしょうか? なにとぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

なんでループの中で、毎回毎回ファイルをオープンしては閉じているのでしょう? ループの外で開いて、ループで書き込み、ループから出たところでクローズ。 で良いと思いますが。

yoichiro11
質問者

お礼

ありがとうございます!書き出すことができました。

yoichiro11
質問者

補足

追加に質問してもよろしいでしょうか? このコードで計算した結果を、gnuplotなどのソフトを用いて、計算と同時にグラフを書かせることは可能なのでしょうか?

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> 使用しているfortranは「Fjitsu Fortran&C Academic Package V4.0L10」というものです。 > これを使ってグラフは書けるのでしょうか。 これですか↓ Fortran&C Academic Package : 富士通 http://software.fujitsu.com/jp/fcaca/ Fortranでサポートしている独自の拡張機能 とかが ぜんぜんわからないのでなんともいえませんねえ。 ただ、Cプログラムと混ぜてリンクできるようなので、 > write(10,*) d のようにFortanプログラムで書かれている部分を、 Cで組んだ出力ルーチンに渡すようにすればいいんじゃないですかね。 で、そのCの部分をどう書くかですが、 お手軽には Controling GNUPLOT from your C program http://tortoise1.math.ryukoku.ac.jp/~takataka/gnuplot/fromC.html にあるような popenを使った形でいいんじゃないでしょうか。 多分サポートOSのどれでも使えますし。 ただ質問にあるFortranプログラムではループの中で 出力しているので、 Cプログラムを ・popen する関数 ・出力する関数 ・pcloseする関数 に分けて、適切なタイミングでそれらを Fortran側から呼ぶなどしないといけないでしょう。 動くコードをくれという話なら有料です :)

yoichiro11
質問者

お礼

何度も丁寧に回答ありがとうございます。 紹介していただいたサイト等を参考にもう少し学んでみます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

> このコードで計算した結果を、gnuplotなどのソフトを用いて、計算と同時にグラフを書かせることは可能なのでしょうか? 可能か否かということであれば可能です。 子プロセスでgnuplotを立ち上げて、その標準入力に向けて コマンドやデータを放り込むだけです。 しかし、このプロセス起動等があなたの使っている Fortranコンパイラでできるかどうかがわかりませんので、 質問の直接の答えは「わかりません」です。 ついでにdoのほうも Fortran90 PROGRAMMING_Sec5 http://ocw.kyoto-u.ac.jp/jp/common/course10/resources/sec5.html にあるように do の直後の文番号がなく、ループの終端に end do をおきます。 do d=0,0.4,0.001 write(*,*)'d=',d write(10,*) d end do こんな感じ。

yoichiro11
質問者

お礼

再び御回答ありがとうございます。

yoichiro11
質問者

補足

使用しているfortranは「Fjitsu Fortran&C Academic Package V4.0L10」というものです。 これを使ってグラフは書けるのでしょうか。 書けるのであれば、実際の操作を教えていただけないでしょうか? 何度も失礼します。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

せっかく、fortan90/95を使うなら、ラベル付doではなくて、構造化Do文(do,end do)を使ったほうがいいと思います。 f77との互換性が必要というなら別ですが。

yoichiro11
質問者

お礼

即答感謝します! 構造化Do文というのはどのように使用すればよいのでしょうか? 以前に見た書籍では、ほとんどこのコードと同様の形で書いてあったので・・・ ご迷惑をかけますが、初心者でサッパリわかりません。よろしくお願いします。

関連するQ&A

専門家に質問してみよう