• ベストアンサー

Fortranについて教えてください

Fortran90で書かれた、又はこれから書く、プログラム実行したく GCCのgfortranをインストールしました。OSは、Windows XPです。 ところが、コンパイルのところで、つまずいてなかなか進みません。 (gfortranは動いてますので、インストールに問題はないと思います。) そこで、gfortranについて(オプション等)、解説しているサイトや文献を教えて頂きたいと思います。 英語力があまり無いので、日本語のものを紹介いただけると助かります。 また、十数年ぶりのフォートランですので(現在はVBAしか触っていません)、初学者向けだと、なお助かります。 どうか、よろしくお願いします。

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

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

#3です。確認しました。確かに Fortran 95コンパイラのようですね。ただ、 GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental) Copyright (C) 2006 Free Software Foundation, Inc. とありますし、webページを見てもまだ開発段階の初期のものとみなされて いるようなので誰もが問題なく使えるものではなく、ドキュメントも整備されている途上ですから、この時点で日本語に訳したものとか初学者向けを期待するのは少々無理があるかと。 ただ、他の f95という名のコンパイラと同じように使えるようなのでそれ向けの解説を見たりすると良いかもしれません。 ところでgfortran はコンパイル対象のファイルの拡張子が .for だと、それは Fortran 77で書かれたものとしてみなすようですがそれは大丈夫なのですか? COMMONブロックが、includeされる方のファイル(f2.fi)に記述されているのなら、include自体はできているようです。 コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか?

参考URL:
http://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/mr/man1/f95.1.html
OoToToO
質問者

お礼

ありがとうございます!お手数をお掛けしております。大変参考になります。 >GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental) >Copyright (C) 2006 Free Software Foundation, Inc. > >とありますし、webページを見てもまだ開発段階の初期のものとみなされて そうなんですか。コンパイラの選択から考えたほうがいいかもしれませんね。あまり英語得意じゃないもので・・・、(experimental)を見逃していました。 #2様の >GCC の gfortran って, Fortran90 もコンパイルできたんでしたっけ? で、少し、いや~な予感がしたのですが。。。そういう問題もあるのですね。 >COMMONブロックが、includeされる方のファイル(f2.fi)に記述されているのなら、include自体はできているようです。 はい、COMMONがf2.fiに記述されています。#5様からお示しいただいたサンプルプログラムでも、includeを確認できました。 >コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか? プログラムの説明には、「公開(無料)」「プログラムの書き換え自由」と書いているのですが・・・、入手窓口が公開されていませんので、申し訳ございませんが、私の判断でお知らせする訳にはいかないと思います。恐れ入ります。

その他の回答 (7)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.8

「-x f95 って付けると Fortran95 だと思ってくれる」って書いてありますね....

OoToToO
質問者

お礼

ありがとうございます。 またまた、読み落としてしまったようです。  http://gcc.gnu.org/wiki/GFortranUsage の >When gfortran is run on a file whose name ends ・・・・(省略) >・・・・For Fortran 95 this is f95. は、コンパイル時に明示的に言語を指定するためのやり方だったんですね。よく分からなくて読み飛ばしてしまっていました。ご忠告ありがとうございます。(^_^;)助かります。

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

拡張子 .f でも Fortran77形式(固定書式)のソースとしてみなされます。 Fortran95形式(自由書式)のソースとして認識させたいなら、 .f95 という拡張子を使います(.f90でもよいかもしれませんが試してません)。

OoToToO
質問者

お礼

ありがとうございます。 今回調べてみて、フォートランの自由書式というのをはじめて知りました。 ただ、現在動かそうとしているプログラムは、「6カラム+コード」という、私が知っているf77の書き方と同じです。 そして、GCCのgfortranのホームページ  http://gcc.gnu.org/wiki/GFortranUsage にて >Since Fortran 95 allows for two different kinds of input source forms ・・・ とあって、 >1.Files whose name ends in .f or .for are assumed to be fixed form >2.Files whose name end in .f90 or .f95 are assumed to to be free form なるコメントを見つけましたので、今回のプログラムの場合では「.f」または「.for」でも良いのかなぁと解釈しました。(私の英語力では、またまた見逃しがあるかもしれませんが・・・)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.5

>「f1.for」ソースコード内のサブルーチンごとに「include 'f2.fi'」が書かれています。 >そして、「f1.for」と「f2.FI」は同じフォルダにあります。 >・・・・ということでした。 「サブルーチンごとに」と言うのがちょっと気になりますが、includeしているのであれば、 gfortran f1.for でよいです。 gfortran f1.for f2.FI ではいけません。 エラーなしに何かコンパイル成功したことはないのでしょうか? ためしにやってみてください。ただしこのBBSは頭のスペースが取れてしまいますので、7カラムのスペースを頭につけてください。 まず、includeされるテストファイルincl.f(1行のみ) write(*,*)'include ok' 次にincludeする側のテストファイルtest.f include 'incl.f' write(*,*)'hello, world!' end これで、 gfortran test.f とやってみてください。 エラーが出るようなら、そのまま全部返信してください。

OoToToO
質問者

お礼

ありがとうございます! ご教示いただいたサンプルプログラム、無事動きましたっ! つまり、includeを使った、複数ファイルのコンパイルは、 お示しいただいた、コマンド gfortran test.f のパターンで行うということですね。 おかげ様で、ひとつ、可能性を潰すことができました。

OoToToO
質問者

補足

さてさて、 おかげ様で、ひとつ可能性を潰すことができましたが・・・ gfortran f1.for をたたいてみました。 それから、#6様のご指摘も踏まえまして、ファイルの拡張子を換えて、 gfortran f1.f をたたいてみましたが、 やっぱり、滝のようなエラーが流れていきます。 つまり、 ソースコードがエラー、又は、gfortranと合わない ということでしょうか? ちょっと気になったのは、 f2.FI のコードが、 「6カラム空白+コード」ではなく、 「タブ+コード」となっていたことです。 そこで「タブ」を「6カラム空白」に置換してコンパイルしてみたのですが、結果は同じエラーの滝です。 ここからは、ソースコードとのニラメッコになるのでしょうか? 一難さって、また一難です。 お手数ですが、ご助言いただけると幸いです。よろしくお願いします。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

>ファイルが2つありまして、f1.for と f2.FI f1.for で f2.FI をinclude しています。 >そこで、 >> gfortran -Wall s1.for s2.FI includeしているのだったら、 gfortran f1.for -o f1 だけでよいのではないでしょうか?

OoToToO
質問者

補足

ご回答ありがとうございます。 さてさて、 >gfortran f1.for -o f1 >だけでよいのではないでしょうか? たたいてみましたが、滝のようなエラーは変わらずです。 もしかして、 「f1.for で f2.FI をinclude しています。」 という私の表現がまずかったかもしれません。 正確には・・・・ 「f1.for」ソースコード内のサブルーチンごとに「include 'f2.fi'」が書かれています。 そして、「f1.for」と「f2.FI」は同じフォルダにあります。 ・・・・ということでした。 ひょっとして、includeがうまくできていないのでしょうか? 私、includeの動きがよく分かっていません。 私の理解レベルは、ファイルが複数あるときは、 「そういえば、コンパイラとかリンカとか使っていたような・・・でもどうやって使ってたかなぁ?」位しか覚えておりません。 この現象もそうですが、コマンドのオプションや使い方等について、良い情報(できるだけ日本語)があれば、それも教えていただけると助かるのですが・・・ すみません、欲張りで。どうか、よろしくお願いします。

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

Windows XP 上で使われているとのことですが、具体的にどのパッケージのバイナリを使われていますか? ダウンロード元の場所などを教えてください。

OoToToO
質問者

補足

>ダウンロード元の場所などを教えてください。 はい、  http://gcc.gnu.org/wiki/GFortranBinaries からダウンロードしました。 ここで2種類ありますが、  mingw/"native Windows" のほうです。  (2006-05-04) とカッコ書きされたインストーラをダウンロードしました。 理由は、 「mingw/"native Windows"」と「Cygwin」の2つのうち、どっちを選んだら良いか分からない人は、「mingw/"native Windows"」がよいと書かれているようでしたので。どっちがいいか分からない私は、コッチにしました。 よろしく、お願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

GCC の gfortran って, Fortran90 もコンパイルできたんでしたっけ?

OoToToO
質問者

補足

つたない英語の読解力ですが、 GCCのホームページを見て、 Fortran95まで対象にしていると解しましたが・・・ 何か問題があるのでしょうか?

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

>ところが、コンパイルのところで、つまずいてなかなか進みません。 具体的にどう躓いているのでしょうか? g77 test.f と打つだけなので、正しくInstallされているなら、躓きようがない様に思いますが。

OoToToO
質問者

補足

>具体的にどう躓いているのでしょうか? はい、実は・・・ ファイルが2つありまして、f1.for と f2.FI f1.for で f2.FI をinclude しています。 そこで、 > gfortran -Wall s1.for s2.FI とか > gfortran -o test s1.for s2.FI とか たたきました。すると、  >Error: Syntax error in COMMON statement at (1) とか  >Error: Expected another dimension in array declaration at (1) とか  >Unexpected STATEMENT FUNCTION statement at (1) 等などのエラーが大量に、滝のように流れます。 ソースのコードがエラーなのか? ソースが他のfortran仕様なのか?(Fortran90とは書いてます。無償公開プログラムです。) gfortranの操作ミスなのか? 見当がつきませんでしたので、質問しました。 この際ですので、じっくり勉強したいとも思っておりますので、 この問題に限らずに、初学者が理解できそうな、できれば日本語で書かれたよい情報があれば、教えていただきたいと思っております。 よろしくお願いします。

関連するQ&A

  • Macでfortran

    Mac(Mac OS X Lion 10.7.4)でFortranをコンパイルしたいのですが、なかなかできません。 まずXcode 4.3をインストールしました。 gfortran4.6もインストールしました。 ターミナルで「gfortran」を打つと、 gfortran: 致命的エラー: 入力ファイルがありません と返ってきます。 そこで「gfortran test1.f」とソースコードtest1.fをコンパイルしようとすると、 gfortran: error trying to exec 'as': execvp: No such file or directory と出てきて、コンパイルできません。 何が問題で、どのようにしたらコンパイルできるようになるのでしょうか。

  • Fortranについて

    私は今大学生のものです。 今卒業研究でFortranのプログラムを用いています。しかし私はプログラミングには疎く、独学で勉強しようと思うのですがなにか初心者にわかりやすいお勧めの本、サイトなどはあるでしょうか? 本屋に行ってもFortranの本は販売されておらず、通販では手にはいるのですがどの本がいいのかわかりません。是非教えていただければと思いここに書き込ませていただきました。 また、家でもFortranのプログラムをコンパイル、実行できる環境をつくりたいのですがどうすればよろしいでしょうか? 学校ではcygwinをインストールして行っていますが家でもcygwinをインストールすればいいのでしょうか? また今もととなるプログラムはあるのですがこのプログラムはLinux上では正常にコンパイルされないところがあるらしく書き直さなければならないらしいのですがLinux上でのFortranのプログラムは普通のFortranのプログラムとは違うのでしょうか?ちなみに学校のパソコンのOSはWindows Vistaです。 初心者の質問ばかりになってしまってすみません。自分でしっかり学びたいと思うのでぜひ教えてください。

  • fortranについて

    fortranでプログラムをコンパイルし、実行したところRun-time Errorと出てきて、00401000 main [+0052]と書いてありました。何が原因なんでしょうか?

  • Fortran : 複数の.fファイルのコンパイル

    先輩からあるシミュレーションコードをもらったので、Cygwin上でコンパイラにgfortranを用いてプログラムを回したいのですが、複数の.fファイルと.hファイルが有りどうすればコンパイルできるのか解りません。gfortran ???←ここのコマンドがわかりません。 全くのド素人だと思ってください。 先輩にはVisual Fortranを用いているので解らないと言われてしまいました。 どなたかアドバイスお願いします。

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • FORTRANとC++の連動について

    私は,Fortranを用いて解析の業務をしている,プログラム初心者です。 購入したのは,Intel Visual Fortran8.0(VF)ですが,Windows環境でコンパイルリンクするには,Microsoft Visual C++ .NET 2003(VC++)が必要ということで,こちらも購入しました。 普段は,Fortranのコンソールで ifort **.f といったコマンドでコンパイルリンクし,実行しているだけです。 これからは,VC++の方に移行していきたいと考えていますが,しばらくはFortranで作成したサブルーチンを有効活用したと考えています。 そこで,VC++ベースのメインプログラムからFortranのサブルーチンを呼び出すプログラムの作成方法,コンパイルリンク方法をご教授ください。よろしくお願いします。 (1)ソースにどう記述するか? void CMyDlg::OnBnClickedOk() { ここで,FORTRANのサブルーチンを呼び出したい。     Fortranなら call subroutine( a, b ) } (2)コンパイルするときは, Visual Studio開発環境で,コンパイル→実行で良いのか? それとも,あらかじめVC++とVFで.objファイルを作成する必要があるのか?

  • fortranで長いプログラムを書き、コンパイルはできたのですが

    fortranで長いプログラムを書き、コンパイルはできたのですが 実行の際、実行時間がかなりかかり実行がなかなか終わりません。 プログラムが長いと言っても、30分以上かかるようなプログラムではないと思うのですが。 実行時間が長くかかってしまう原因についてご存知の方は教えて下さい。 よろしくお願いします。

  • FedoraCore4でFORTRAN

    数ヶ月前にFedoraCore4をインストールし(インストールの種類は「パーソナルデスクトップ」を選んでいます)、使い始めた者です。 10年以上も前の話になりますが、学生時代にUNIX上でFORTRANプログラムを組んで走らせたことを思い出し、久しぶりにやってみようかと思っています。 「アプリケーションの追加/削除」で「開発ツール」を追加インストールし、a.fという名前でFORTRANのプログラムを作り、「g77 a.f」を実行したのですが「そんなコマンドは無い」(英語のメッセージを忘れてしまいました)と怒られてしまいます。 何かインストールが足りないのでしょうか。他にやるべきことはあるのでしょうか。 また、Linux上でのFORTRANプログラミングについて解説しているような書籍・サイト等も教えていただけると幸いです。

  • fortran77のプログラム時間を計測したい

    fortran77のプログラム時間を計測したい こんばんわ。fortran77で実行結果が出るまでの時間の測定をしたいのですが、どうすればいいのでしょうか? 調べてみるといろいろな方法があるようです。しかし、そのほとんどがlinuxでの環境においての説明です。 私はwindowsの環境でfcpadを使ってコンパイルしています。ですので、「a.out」のコマンドを打ってプログラムを実行したことがありません。windows環境でもfortran77で時間計測というのはできますでしょうか? また、今回linuxの存在の大きさを感じた次第です。linuxでコンパイルするというのはメリットがあるのでしょうか?

  • WindowsとLinuxのOpenMPコンパイル

    fortranを用いたプログラムをOpenMPを用いて並列化した際のトラブルについてです。 Fortranを使ってプログラムを作成しています。 Windows上でフリーコンパイラGFortranを用いて,OpenMPで記述したCPU並列化プログラムをコンパイルし,実行したところ問題なく並列計算が動作しました。 しかし,プログラム中で用いる配列や変数が多いため,Windowsでのメモリ使用制限2GBを超えてしまい,Linuxでの開発を余儀なくされました。 そのため,初心者ながらUbuntuを導入し,GFortranをインストールして同じく並列化を指示しコンパイルしたところ,2GBの制限を超えないようにしたWindowsと全く同じプログラムでも数値がおかしくなってしまいました。 Ubuntuでも,並列化の指示をせずに逐次計算を行えばWindows上と同じようにプログラムを回すことができ,正しい値が算出されています。 つまり,UbuntuではWindowsと全く同じプログラムでも並列化がうまくできていません。 なぜこのようなことが起きるのでしょうか,対処法があればお願いします。

専門家に質問してみよう