Cygwin - Fortran95 を使う!

Updated:


Cygwin 上で Fortran を使えるようにしてみました。 大学時代に FORTRAN77(パンチカード式)に少しだけ触れた程度でしたが、思い出す意味も含めてコンパイルできる環境を準備してみました。

Fortran は現在、オブジェクト指向プログラミングのできる Fortran2003 が最新のようですが、Cygwin で使用できる Fortran は Fortran95 が最新のようです。

以下が、環境構築記録です。

記録

1.コンパイラのダウンロード&展開

Fortran95 のコンパイルには G95 というものを使用します。The G95 Project のサイトのダウンロードリンクからアーカーブをダウンロードします。 今回は Cygwin での使用なので、ダウンロードするアーカイブは “Cygwin x86 tarball” です。 そして、展開する際にはルートである必要があります。

$ cd /
$ wget http://ftp.g95.org/g95-x86-cygwin.tgz
$ tar zxvf g95-x86-cygwin.tgz

展開すると、”/usr/local/bin/” ディレクトリに “i686-pc-cygwin-g95.exe” が配置されます。

2.コンパイラへのリンケージ

コンパイラへのリンクを貼ります。

$ cd
$ ln -s /usr/local/bin/i686-pc-cygwin-g95.exe ./g95
$ source .bashrc

3.導入確認

コンパイラが導入されたかを確認します。

$ g95 --version
G95 (GCC 4.1.1 (g95 0.93!) Jun 16 2010)
Copyright (C) 2002-2008 Free Software Foundation, Inc.

G95 comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of G95
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING

4.動作確認用ソースの作成

実際にコンパイルできるかどうかを確認するためにテスト用のソースを作成します。 今回は、モンテカルロ法による円周率計算のソースを作成。 【ファイル名:pi_montecarlo.f95】

program pi_montecarlo

  ! モンテカルロ法による円周率の計算

  ! 暗黙の型指定を使用しない
  implicit none
  ! 単精度実数(8バイト)
  real(8) x, y, pi, pi0
  ! 整数型(im は乱数により定められる点の総数)
  integer :: n, i, im = 2 ** 20
  ! 計算結果比較用に組み込み関数により定めた円周率
  pi0 = 2.0d0 * acos(0.0d0)

  n = 0
  do i = 1, im
    call random_number(x)
    call random_number(y)
    if (x ** 2 + y ** 2 <= 1.0d0) n = n + 1
  enddo

  pi = 4.0d0 * dble(n) / dble(im)

  ! 結果出力
  write(*, *) 'pi   = ', pi       ! 計算結果
  write(*, *) 'pi0  = ', pi0      ! 組み込み関数の円周率
  write(*, *) 'diff = ', pi - pi0 ! 誤差

end program pi_montecarlo

5.コンパイル

以下のようなコマンドでコンパイルします。

$ g95 pi_montecarlo.f95 -o pi_montecarlo.exe

6.動作確認

以下のようにして実行する。

$ ./pi_montecarlo.exe
 pi   =  3.1432952880859375
 pi0  =  3.141592653589793
 diff =  0.001702634496144384

今回は円周率計算をしてみました。 中学生レベルの計算方法でしたが、本格的に円周率を計算してみたかったら、以下のサイト等を参考にしてください。

当方もいつか別の方法で計算してみたいとは思っています。





 

Sponsored Link

 

Comments