講義ノート(「計算理学基礎論」冨田博之)

「Fortranプログラムの作成と実行」

演習室のパソコンでは Digital Visual Fortran (V.5) が使えます。ワークステー
ションでは,日立の最適化Fortranが使用できます。いずれも98年現在のJIS規格である
「Fortran90」をサポートしています。(現在は「Fortran95」がJIS規格)


 1.「統合開発環境」の超簡単な使い方  ⇒ Developer Studio

 2. MSDOSコマンドプロンプトでの利用法 ⇒ MSDOS

 3. UNIXワークステーションでの利用   ⇒ UNIX

 4. WindowsからのUNIX利用  ⇒ TELNET +(注)日本語使用

 5. Windowsからワークステーションへのファイル転送 ⇒ FTP 

 6. ライブラリ結合など更に進んだ使い方 ⇒ Advanced Course


自宅からインターネットによって利用できるのは,4, 5 だけです。

ホームページへ もどる




1.Developer Studio の超簡単マニュアル

ここでは,この講義で必要な簡単なFortranプログラムを作成し実行する方法だけ説明
します。詳しい使い方は,Developer Studio のオンラインマニュアルか,メーカー
(Digital/COMPAQ)提供のWEBページを参照してください。  

 ⇒ http://www.compaq.co.jp/products/dvf/devstudio_use.html

「ライブラリ結合」など,もう少し進んだ使い方は ⇒ Advanced Course


用語
プロジェクト 少々大げさですが,ある目的のプログラムを作成・実行・デバグ(虫取り)
をするといった一連の作業のことで,これに「プロジェクト名」を付ける。最初のうちは
「1つのプロジェクトには1つのプログラム」と理解すること。
 例えば,「問題3-5をやってみよう」という作業プロジェクトなら,「problem3_5」
のような名前を付ける。

ソースファイル Fortranの文法にしたがって書いたプログラムのファイルのこと。プロ
ジェクトと同じ名前でもいいし,別の名前をつけてもかまわない。後ろに「.f90」
(自由形式のプログラムの書き方の場合)がつく。固定形式では「.for」とする。
異なるOS(例えばWindowsとUNIX)の間で同じプログラムを使用したいときには,ソース
プログラムのレベルで移動 を行う。

実行ファイル ソースファイルをコンパイルしてできる実行可能なファイルのことで,
普通はプロジェクトと同じ名前で,後ろが「.exe」となる。コンパイルして実行ファイル
を作る作業をプロジェクトでは Build と呼んでいる。


※センターのDeveloper Studioは 日本語版 ですから,以下の説明は日本語に解釈して
 読んでください。

新規作成
@ 「スタート」「プログラム」「Visual Fortran 5.0」「Developer Studio」
 を開く。

A「File」メニューの「New」,「Win32 Console Application」を選ぶ。

B「Project Name」を記入:

 「Location(場所)」はデフォルト(お任せ)ではなく,必ず自分のディスク領域 M:\ 
 か,そこに作ったフォルダ,例えば M:\Myfort とする。ここに,先に記入したプロ
 ジェクト名と同じ名前を持つ サブ・フォルダ ができる。

 :センターでは各ユーザが自由に書き込めるハードディスクの領域に M:\  という
 「仮想ドライブ名」を付けている。

C「OK」をクリックする。(次に,もし出てくれば「Empty Project」「Finish」「OK」
 の順に進む。センターのでは出てこないようだ。)

Dソースプログラムの作成

     「Project」「Add to Project」「New」
 または
     「File」「New」「Add to Project」

 のあと

     「Fortran Free Format Source File」

 を選び,プログラムファイル名を書き込む。(ファイル名の後ろには自動的に「.f90」
 が付けられる。)

 これでプログラム作成画面が出てくるので,ここにプログラムをドンドン書き込んで
 いく。プログラムで約束されている[キーワード,ユーザ命名の変数名コメント行]
 の文字でそれぞれ別の色分けがされるので,間違いがわかりやすい。

Eできあがったら「Build」メニューから「Build ***.exe」を選べば,自動的にコンパ
 イル・リンクが行われ,枠の下の方にコンパイル時メッセージが出る。

         ***.exe - 0 error(s), 0 warning(s)

 となっておれば,文法的にはカンペキということ。

F実行:「Build」メニューの「! Excute ***.exe」で実行する。

G結果が思わしくなければ,プログラムを修正して繰り返す。

H終了は「File」「Exit]


実行ファイルの場所
 できあがった実行ファイル「***.exe」は,プロジェクト名と同じ名前のフォルダの下の
 「Debug」というサブフォルダに保管されている。直接,これを指定して実行することも
 可能である。

 例: 実行結果の出力を リダイレクトの方法 でデータファイルに書き込みたいときは,
    MSDOSコマンドプロンプト画面で以下のように打つ:

        実行ファイル名 > データ書き込みファイル名


プログラムの印刷
 ソースファイルが表示されているときに,「File」「Print」を選ぶ。

注意レポートプログラムの先頭には必ず,コメント行で「作成者名」を入れること。


作業の再開
 同じようにして Developer Studio を開き,「File」「Open Workspace」で,プロ
 ジェクト名を探す。または下の方の「Recent Workspaces」の中から選んでもよい。
 次に,「File」「Open」でソースファイルを開く。

 あるいはエクスプローラか何かでプロジェクト・フォルダを探し,そこにある

      プロジェクト名.dsw

 というファイルをクリックすれば,再開できる。(.dsp ではなく,.dsw の方を
 クリックすること。)


ディスクの整理]

 実行ファイルは簡単なプログラムでも予想外に大きなものになる。メディアセンター
で1ユーザにあてがわれているハードディスク領域は多くはないので,ときどき整理し
ないと以後の作業ができなくなる。すでにレポート提出の終ったものは,プロジェクト
を解体して,ソースプログラムだけ,どこかにまとめて残しておくようにすればよい。

もどる

2.Windows-MSDOSコマンドプロンプトでの利用法

@まず,必ず自分の個人用フォルダ(ディレクトリ)M:\ に,Windowsのエクスプローラ
 か何かで作業用の サブフォルダ を作成しておく。この名前を仮に「M:\myfort」
 だとする。

A「スタート」「プログラム」「アクセサリ」「メモ帳」(あるいは自分でインスト
 ールしてあるテキストエディタでもいい)でプログラムを作成し,これを「ファイル」
 「名前をつけて保存」で先ほどの M:\myfort に保存しておく。この名前を例えば仮に
  M:\myfort\ex1.f90 とする。(プログラムを「固定形式」で書いた場合は ex1.for 
  としておくこと。)

B「スタート」「プログラム」「アクセサリ」「コマンドプロンプト」で MSDOS を開く。

Cここでプロンプトが自分のディレクトリになっていなかったら,M: と入れる。

Dこのあと cd \myfort と入れ,次いで dir と打ってみる。

 ※ もしサブディレクトリがまだできていなかったら,ここで作ることができる。
   md myfort と打つ。このあと cd  myfort と打つ。(mdmkdir の
   省略形,cdchdir の省略形。)

Eこのとき,先ほど作った ex1.f90 というファイルが示されるがどうか確認しておく。
 なければ探し出し,エクスプローラなどを用いてここへ移しておく。

F(コンパイル)ex1.f90(またはex1.for)がここにあれば
  
    df ex1

 と打つ。ミスがなければ,ex1.exe という実行形式のファイルができる。

G(実行)単に実行ファイル名を打てばよい:

    ex1

Hソースファイルの形式(free または fixed)を特に指定したいときは

    df  /fixed  ソースファイル名    ・・・自由形式なら /free

 で指定する。デフォルトでは,ファイル名が .f90 なら自由形式,.for なら固定形式
 と解釈される。


I(リダイレクトの方法)出力結果をファイルに書きたければ,ファイル名を例えば
   abc.txt とすると

    ex1 > abc.txt 

 と書いて実行する。このファイルを「メモ帳」か何かで開いて中を確認したあと,印刷
 することがでる。次の実行で同じファイルを指定すると,「重ね書き」される。もし,
  「追加書き」にしたければ以下のようにする:

    ex1 >> abc.txt

 これを使えば,ソースプログラムを先ずabc.txtにコピーしておき,その後ろに実行結果を
 書き込んでレポートや質問状を作成することも可能である。ただしエラーメッセージなど
 は,この方法では採取できないようだ。「ログ記録」を採取する方法を誰か見つけたら,
 教えてください。


※コマンドプロンプト利用はアイコンでも用意されてある。「スタート」「プログラム」
 「Visual Fortran 5.0」を開けると「Fortran Command Prompt」がある。これを
 右クリックして「プロパティ」「プログラム」を指定する。この中の「作業ディレクト
 リ」を「M:\Myfort」のように直しておけば,@と全く同じように使うことができる。

もどる

3.UNIXでの利用  ( さらに進んだ利用は ⇒(付)UNIXでの注意事項 )

@ワークステーションにloginし,自分のホームディレクトリに mule でプログムを作成
 し保存しておく。(外からインターネットのPPP接続telnet利用をする場合は,自宅
 のパソコンのエディタで作成・修正し,FTP で送る方が効率的であろう。)これを仮に
 ex1.f90 とする。(固定形式で書いた場合は,ex1.f として保存しておく。)

A(コンパイル)

    f90  ex1.f90 (または  f90  ex1.f )

Bこれで a.out という実行可能ファイルができるが,この実行は

    ./a.out

 とすること。(自分でPATH設定を変えていないときには,必ず ./ をつけないと働かな
 いことに注意。⇒ PATH設定の変更)

C a.out の名前を変えたければ,例えば以下のようにする:

    mv a.out ex1

 これは ./ex1 で実行できる。

D実行結果をファイルに書く方法は上のMSDOSのHと全く同じである。

もどる

4.WindowsからのUNIX利用 (TELNET)


新システムでUNIX利用(ws24.ipse)するには、先ず利用申請してください。
センターの手引き

分かる人は、安全のためtelnetではなく「ssh」で接続してください。

@「スタート」「ファイル名を指定して実行」で開いた枠に

    telnet ws24.ipse.media.kyoto-u.ac.jp

 と記入してEnterキーを打つ。

A出てきたウインドウで

  login:  利用番号 a0******
  password:パスワード


B終われば

    logout

 とうち,ワークステーションと別れを告げる。


旧IDでの利用(旧システムのUNIXは今まで通り利用できます。)
運用が停止されました。(2002年5月7日現在)




★ telnet利用し,muleで日本語を扱う場合(5月7日追加)

 Windowsパソコンは「Shift-JIS」系,UNIXワークステーションは「EUC」系,ただしエディ
 タのmuleはデフォルトでは「JIS」に設定されているため,注意がいる。要は,telnetターミ
 ナルの漢字設定と,ファイルの漢字設定を使い分けることである。

 経験的にはtelnetの「ターミナル」「基本設定」で「JIS漢字」にしておけば,作成,表示
 ともにうまくいくようである。日本語入力は,UNIX側のWnn,またはパソコン側のIMEのどち
 らも可能であるが,両方を混ぜて使用しないこと。

  ・ すでに作成されているEUCファイル => 編集後のファイルもEUCのまま。
  ・ telnet + muleで新規作成するもの => JISファイルとして出力される。
  ・ パソコンで作成しFTPで送ったもの => S-JISファイルのままである。

 ただし,作成したファイルがEUCでない場合,muleの外でcatコマンドなどを用いて表示し
 たり,コンパイル,実行するときには EUCファイルに変換してから行うこと。この場合,
 ターミナル設定も「EUC」におしておくこと。(JISのままでも実行できる場合もあるが,
 私の経験では文字化けが起きた。)

 ファイルをFTPでパソコンに移動して扱うときは,事前にSJISに変換してから運ぶ。

 <S-JISコードへの変換> nkf -s 元ファイル名 > 新ファイル名

         EUCへの変換は -s の代わりに -e,JISへの変換は -j

もどる

5.Windowsからワークステーションへのファイル転送 (FTP)

@「スタート」「プログラム」「MSDOSプロンプト」でMSDOS-Windowを開き,できれば
 cd で転送したいファイルのあるサブフォルダまで行き着いておいてから,以下のよう
 に打つ。

    ftp ws24.ip.media.kyoto-u.ac.jp


AUser名の確認があるので,自分の利用番号(ID)を入れる。ここでもpassword はワーク
 ステーション用パスワード。(すぐ上の4.「WindowsからのUNIX利用」のAを参照)

Bこのあと,ftp> となるので,まず ascii  と打っておき,次に,たとえば先ほどの
 「M:\myfort\ex1.f90 」を転送したいのであれば(すでに cdM:\myfort に
 移っているとして)

     put ex1.f90  ex1.f90 

 と打つ。ファイルの名前を変えたければ,うしろの ex1.f90 を好きなように変えれば
 よい:

     put DOSファイル名 UNIXファイル名 

 これで,UNIXで作ったファイルと全く同じように扱うことができる。逆にUNIXからパソ
コン
 に取り寄せるときは,put の代わりに get とする:

     get UNIXファイル名 DOSファイル名 

 ascii はFortranプログラムや文書など,普通の文字で書かれた「テキストファイル」
 の転送の指定である。実行ファイルのような「機械語ファイル」の転送は binary 指定
 をする。ただし,実行ファイル(exeファイル)は,UNIXに送ってもOSが違うため,実行は
 できない。

C必要なファイルの転送が終われば,今度は logout ではなく bye で別れる。

D以上は誰でもできる方法である。もっと便利な「FTPツール」がフリーウェアで出回っている
 ので,自分のパソコンを持っている人は,手に入れてインストールしておくと便利である。
 例えば=>http://www.forest.impress.co.jp/ を探せば見つかるであろう。

もどる

6.高度なプログラム開発のために

 ここでは,よく使うサブルーチンやモジュールを自分で作成してライブラリにしておき,これ
 を結合して使う方法を紹介します。Developer-Studioのオンラインマニュアルをすみからすみ
 まで読めばどこかに書かれているのですが,なかなか読みにくいものです。ある特別なプロ
 グラムだけで使うとか簡単で短いサブルーチンなら,ソースプログラムで残しておき,必要な
 ときにソースプログラムを編集するときにカットアンドペーストして結合して使えばよいので
 すが,何種類ものルーチンを備えたグラフィックスパッケージや数値計算プログラムを自作し
 て研究室で共有するなど,プログラム開発の際に必要になります。

Developer-Studio の基本的な使い方については「超簡単マニュアル用語
ソースファイル Fortranの文法にしたがって書いたプログラムのファイルのこと。プロジェク
 トと同じ名前でもいいし,別の名前をつけてもかまわない。後ろに「.f90」(自由形式のプロ
 グラムの場合)がつく。固定形式では「.for」とする。異なるOS(WindowsとUNIXなど)の間
 で共通に使用できるのは,ソースファイルのレベルのみであり,コンパイル,リンクはOSに
 依存する。
モジュール Fortran90で新たに付け加えられたもので,MODULE文で始まる副プログラム単位。
 以下のように,サブルーチンや外部関数の副プログラムとは少し異なる使い方がされる。

コンパイル ソースプログラムを機械語に翻訳する段階である。Fortranプログラムの宣言文や
 DATA文,FORMAT文はこの過程で処理される。したがって,USE宣言されるモジュールは,コン
 パイル時に結合(INCLUDE)する。

オブジェクトファイル ソースファイルをコンパイルしてできる機械語ファイルのことで,
 ファイル名に「.obj」がつけられる。

インクルードファイル モジュール副プログラムの場合は,コンパイルすると,「.obj」と
 ともに「.mod」というファイルができる。モジュールをUSE宣言したソースプログラムをコン
 パイルするときには,この.modファイルをINCLUDEする。

ライブラリ 関連するサブルーチンなどを,.objファイルのレベルで一つの書庫に統合してしま
 っておくことができる。ライブラリ名の後ろに「.lib」がつく。

リンク プログラムの中で引用しているサブルーチンや外部関数を,.obj ファイルやライブラ
 リのレベルで結合することで,これによりプログラムが実行可能な「.exe」ファイルになる。
 システムで用意されている組み込み関数なども,この段階で結合される。

パス指定 コンパイルでINCLUDEする .modファイル や,リンクで結合する.objファイル や.lib
 ライブラリの置かれた場所(ディレクトリ)を作業前にパス指定しておかなければならない。
 システムで用意されている標準のものは,デフォルトで指定されているが,ユーザの作ったもの
 は自分で指定する。


(WindowsとDOSプロンプト)  (付)UNIXでの注意

ソースレベルで結合(初歩的な方法)]

@ 別々に作られたプログラム単位を一つのファイルにまとめてしまうことができる。この場合,
 プログラム単位を並べる順序は問わないが,モジュールだけはプログラムの先頭(USEするプロ
 グラム単位より前)に持ってきておく。

A DEV-Studioでは,「Project」「Add to Project」「Files」で,必要なソースプログラム
 を複数取り込んでもかまわない。まとめてコンパイルできる。

 <モジュールソースを含んでいる場合>
  「Build」メニューで「Update All Dependences」をクリックしてから,Buildする。ある
 いはモジュールファイル名をクリックしてから「Compile モジュール名」を選んで先にコンパ
 イルしておく。(あとのプログラムのコンパイルのときに .modファイルが必要なため。)この
 あとで実行ファイルをBuildしてもよい。


コンパイル(.objファイルの作成)]

@ プロジェクトにソースファイルを「Add to project」「files]し,目ざすファイル名を
 クリックしてから,Buildメニューの「Compile ***.f90」を選ぶ。

A DOSプロンプトモードでは以下のように書いて実行する:

     DF /Compile_only  ソースファイル名.f90

  または

         DF -c  ソースファイル名.f90    (c は必ず小文字で)

B インクルード .modファイルを必要とするときには以下のいずれかで行う:

 1)コンパイルしたいプログラムのソースファイルと同じディレクトリに置いておく。

 2)DEV-Studioではツールバーの「Tools」「Options」「Directories」を選び,表中の
  「Show Directories for」で「Include Files」一覧表を表示させ,.modファイルの
  置かれた ディレクトリ名 を追加する。

 3)DOSプロンプトモードでは

    DF /Compile_only /module:パス ソースファイル名.f90

  で「パス」のところに.modファイルの置かれた ディレクトリ名 を書く。


リンク](exeファイルの作成)

@ リンクすべき.objファイルまたは.libがある場合,Dev-StudioではBuildの前に

    「Project」「Settings」「Link」,Category「General」
  で
    「Object/library modules」

  の欄に objファイル名 または libファイル名 を書き加える。このときファイル名にフルパス
 を指定しないのであれば,上の「コンパイル」のBの2)と同様にして,今度は「Library files」
 を表示させ,パス指定情報を付け加える。

  ※モジュールでサブルーチンや関数を定義してある場合には,コンパイルで.modファイルを
   インクルードする以外に,この段階でもモジュールプログラムの .objファイル または
   これを含む ライブラリ をリンクする必要があることに注意すること。

A DOSプロンプトでの実行は,メインプログラムの objファイル を main.obj として

     LINK main.obj objファイル名 または libファイル名

  である。インクルードファイルがない場合には,ソースからでも実行できる。

     DF main.f90 objファイル名 または libファイル名



ライブラリの作成

@ 新規プロジェクトの開設で,その種類を「Fortran Static Library」にする。ライブラリ
  に入れるプログラムを「Project」「Add to project」「files」で全部取り込み,あとは
  「Build」でいっきに .libファイル を作成することができる。

A DOSプロンプトでは,ライブラリに入れるプログラムを全てコンパイルして.obj にしておい
  てから,

  LIB objファイル名 objファイル名... /OUT:ライブラリ名.lib

  で作成できる。


ライブラリなどの保管

  こうして作成したライブラリ(.lib)やインクルードファイル(.mod)は,自分のディスク
 領域「M:\」にたとえば「M:\Mylib」といったディレクトリを作りまとめておき,このパス情報
 をDEV-Studioの「tools」「Options」で書き込んでしまっておけば便利に使える。


(付)UNIXでの注意事項(メディアセンターのワークステーション)

 ○ コマンドは f90(コンパイル・リンク)と ld(リンク)である。
 ○ モジュールは ソースレベルで結合 する。
 ○ モジュール単位を独立したプログラムにする場合には,モジュールのソースファイル名は
   モジュール名と同じにする。

   例 MODULE abc   → モジュールファイル名も「abc.f90」とする。
            .....
            .....
          END MODULE abc   Mainプログラムには宣言文 USE abc

 ○ オブジェクトファイル名は「***.o」となる。
 ○ 実行ファイル名の .exe に相当する識別子は不要。
 ○ ライブラリファイルは「***.sl」(共用ライブラリ)または「***.a」(アーカイブライ
   ブラリ)とする。

 <f90 コマンドの各種の使い方>

   (1) ソースファイル xa.f90(自由形式)を単独でコンパイル,リンク:

         f90  xa.f90   実行ファイルはデフォルトで a.out となる。

   (2) 同じく,実行ファイル名を x としたい:

         f90  xa.f90  -o x  (この -o の o は,「out-file」の o)

   (3) use宣言されたモジュール(Includeファイル)が,ホームディレクトリ下 の ./mod 
   に置かれている:

         f90 -I./mod  xa.f90

   モジュールファイル名がモジュール名と一致しており,xa.f90と同じディレクトリに
   置かれているなら,-Iオプションを指定する必要はない。

   (4) sub.f90 をコンパイルだけしたい:

         f90  -c  sub.f90   (オブジェクトファイル sub.o ができる。)

   (5) xa.f90 に sub.o を結合して,実行ファイルを作成する:

         f90  xa.f90  sub.o
      
   (6) xa.o と sub.o を結合して実行ファイル exf を作る:

         f90  xa.o  sub.o  -o exf

   (7) a.f90, b.f90, c.f90 をまとめたライブラリ abc.sl を./mylib に作成しておき,xa.f90
    に結合して実行ファイル exf を作成,実行する:

         mkdir mylib ・・・・・ サブディレクトリを作っておく

         f90  -c  +z  a.f90  b.f90  c.f90

         ld  -b  a.o  b.o  c.o  -o mylib/abc.sl

         f90  xa.f90  mylib/abc.sl  -o exf

         ./exf   ← ※ 末尾に注あり

   (8) 固定形式を指定してプログラム aaa.f90 をコンパイル・リンクする:

         f90 -W0,'form(fixed)'  aaa.f90  (注:Wオー ではなく Wゼロ)

       自由形式なら form(free)とする。

   ※「デフォルトでは,.f90 は自由形式, .f は固定形式とみなされる」と覚えておく
    方が便利だ。

 ☆ オプション(-b,+z,-W0など)については以下の UNIXコマンドを参照:

     man f90  および  man ld


 ※ path設定を行っていない場合である。以下のようにしてpath設定を変更しておけば,実行    ファイル名にいちいち「./」をつけなくてもよい。    PATH設定の変更 自分のホームディレクトリにある「.cshrc」ファイル(なければ作る)    に次の1行を書いておき source .cshrc を実行するか,またはloginし直す。一度書いて    おけば次回からはloginするときに自動的に設定される。(正確には「共通に自動設定され    ているパス $PATH に,ホームディレクトリ『.』を追加する」という意味である。) set path=(. $path) ← ".cshrc" file に書き加える。  ↑(period space $path) もどる