• 締切済み

フォートランのsubroutineの読み込み

fortran初心者なんですけど、 subroutineを別ファイルに書いておいて、メインプログラムでそのファイルをopenしてsubroutineを実行できるのでしょうか? もしできるのでしたら、大体でいいのでどうやるのか教えていただけませんか?

みんなの回答

  • LN-TF
  • ベストアンサー率53% (320/596)
回答No.3

FORTRANに限らず、オフコン等でサブルーチンコールをする場合はダイナッミクに呼び出す場合とコンパイル後リンカ等でリンクさせてから実行型式のプログラムをつくる遣り方とがあります。 お使いのコンパイラやO/Sに拠っても違いますから、一概に言えません。(FORTRANVIやFORTRAN77のコンパイラやTinyFORTRANでは出来ないと思います) 但し、サブルーチンコールの場合は大抵引数(ひきすう)でデータを渡し結果も引数で返して貰いますのでその辺はお使いのコンパイラの手引書なり文法書を確認して頂く事になります。

  • narusuji
  • ベストアンサー率40% (4/10)
回答No.2

include "ファイル名" を使った記憶があります。 昔の記憶なので定かではありません。。

参考URL:
http://www.ep.sci.hokudai.ac.jp/~poc/tips_misc/fortran.html
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

単にソースファイルごとにコンパイルして最後にまとめてリンクするだけでいいと思う. 処理系がわからんのでコンパイルのしかたやリンクのしかたはしらない.

関連するQ&A

  • fortran77で複数のファイルの読み込み

    fortran77で複数のファイルの読み込み 現在fortran77のプログラムを勉強しております。 ファイルが複数あり、すべてのファイルを読み込みたいのですが、ファイルの数がたくさんあるため、プログラムの行数が多くなってしまいます。 do ループで次々とファイルを開くプログラムを考えているのですが、思いつきません。 どなたか考え方でもいいので、教えてください。 ちなみに私が考えたプログラムは、 open(10,file='C:\FORTRAN\100.txt',status='old') open(11,file='C:\FORTRAN\121.txt',status='old') open(12,file='C:\FORTRAN\144.txt',status='old') open(13,file='C:\FORTRAN\169.txt',status='old') open(14,file='C:\FORTRAN\196.txt',status='old') open(15,file='C:\FORTRAN\225.txt',status='old') ・・・。 これを do ループで次々に開くことを考えると、 character*3 A(10) do 100 i=1,10 A=i*i open(i,file='C:\FORTRAN\A.txt',status='old') 100 continue ・・・ みたいな感じです。 ' 'の中の一部だけを変えたい場合のcharacter 文の使い方がいまいちよく分かりません。

  • 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ファイルを作成する必要があるのか?

  • 他のexeファイルを実行する方法(Fortran)

    Fortran90で,実行中に他の実行ファイル*.exeを呼び出すことは できますでしょうか? メイン文でサブルーチンを call subroutine名() で呼び出す代わりに call 実行ファイル名.exe のように実行ファイルを呼び出したいです。 コマンドプロンプトでバッチファイルで,逐次exeを 実行することはできますが,ソースコードの中で 実行ファイルを指定したいです。 よろしくお願いいたします。

  • フォートランのサブルーチンの内部変数

    すみません。科学技術系の人間でして、フォートランが現役なのです。 あるプログラムのことですが、サブルーチンの内部の変数についてサブルーチンを呼び出すごとに加算していくようなことを行っています。 do i=1,100 call abc(i)   ← サブルーチンabcを100回呼び出す enddo end subroutine abc(i) n=n+1        ←呼び出されるたびに和をとる。 write(*,*) n return end このようなシンプルなプログラムは問題ないのですが、少し複雑になるとどういうわけか、呼び出される度にnが初期化され、writeさせた結果常に1が表示されるという現象に会いました。 昔のコンパックフォートラン(MS-Fortran, DEC Fortranを継承)と、最近のIntel Fortran(最新版)で動作が異なります。前者では和を取ってくれますが、後者では初期化されて常に1が出力されます。(上記のプログラムは問題なしです。もう少し長いプログラムでの問題です。) 言語仕様の問題(すなわちフォートランのバージョン)なのか、コンパイラ仕様の問題なのか、C言語のように宣言の仕方で変ったりするようになったというようなことはないでしょうか。 以下に示すように和をとる変数をメインプログラム側に一旦見えるようにすると、インテル版でも思ったとおりの動作をします。 call abc(i,n) suboroutine abc(i,n) としてnをメイン側に露出する。 よろしくお願いします。

  • c++からfortranの関数を呼び出す

    Linux上でintel fortran compilerとc compilerを使っているものです。 cのプログラムからfortranで書かれたsubroutineやfunction を呼び出したいと考えています。 いろいろネット上を調べたのですが、どれも細かいことは書いていても 具体的にどのようなコマンドを実行すればいいのか等については 部分的にしか書いておらず、よく把握できていません。 どなたか、非常に簡単なプログラムで結構ですので、 具体的なプログラムと、実行すべきコマンドについて 具体例を挙げて教えていただけないでしょうか? もしくは、そのようなページを教えてください。 よろしくお願い致します。

  • フォートランのエラーについて(forrtl)

    こんにちは. Fortranのプログラムなのですが,Visial Fortranを使いましてビルドをしまして,実行したところ,計算の途中で,以下の表示がでました. forttl:severe(157) Program Exception-access violation 「何だろう?」と思いましてネットで検索をかけてみたら,以下のエラー一覧にぶち当たりました. http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/em/em01_04.htm 「参照権限を持っていない仮想アドレスに書き込み,読み込みを行おうとした」との記述がありますが,「仮想アドレス」とはいったいどのようなものなのかよくわかりません.Fortranの入門書を紐解いてみたのですが,実際の文法のみで,アドレスについて知ることはできませんでした. お教えいただきたく,よろしくお願いいたします.

  • フォートランの動作に関する質問

    以下のような短いフォートランプログラムがあります。OS:Windows10 module com integer,parameter ::nd=10 end module program main use com print *, nd call sub stop end subroutine sub use com print *, nd return end 内容はモジュールで宣言したパラメータを確認してみるということです。 このプログラムがgfortranで動作せず、intel fortranでは全く問題ありません。 gfortranの結果は以下のようです。 f951.exe: Fatal Error: Reading module 'com' at line 1 column 1: Unexpected EOF GNU Fortran (Rev1, Built by MSYS2 project) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. gfortranのこのバージョンに何か問題があるのでしょうか。前からすこしおかしいことには気づいていたのですが。私のコードに問題があるでしょうか。 ※Cが一番近いと思いましてこちらに上げました。

  • 複数のソースファイルのコンパイルの仕方

    とある人からいただいた,fortranの計算プログラムを使おうと思っております.ソースファイルが1個だけというのであれば,フリーのコンパイラを使って実行した経験があるのですが,今回譲り受けたものは,ソースファイルが複数あります(メインプログラムとサブルーチンプログラム数個). コンパイラはvisual fortranなのですが,マニュアル等がない状態です.どなたか,お教え願えませんでしょうか? よろしくお願いいたします.

  • 【fortran77】空行を含む数値データの読み込み

    fortran77でプログラムを書いています。 いま以下のような空行を含むデータファイルを読み込んで、プログラム中で計算し、その結果を別のファイルに書き出すものを作りたいと考えています。 1.0 1.1 1.2 1.3 1.0 1.4 1.5 1.6 2.0 2.1 2.2 2.3 2.0 2.4 2.5 2.6 3.0 3.1 3.2 3.3 3.0 3.4 3.5 3.6 *数字はあくまでも例です。 例えば、1列目が2.0で始まる箇所のみ取り出したいのですが、どうもデータの読み込みのところでエラーが起こっているようです。 open(1,file="data.dat") do i = 1,8 read(1,*) (a(i,j),j=1,4) enddo 空行や空白の読み飛ばしを行う方法を自分なりに調べてみて、open文にblankを指定するなどの方法があることはわかったんですが、いまいち使いかたがわからず立ち止まってしまいました。 よろしくお願いします。

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。