GFD Dennou Club / Dennou Ruby / Products

Ruby-ISPACK

ISPACK は石岡@京大理さん作のFOTRAN77による数値計算ライブラリーです。 Ruby-ISPACKはISPACKをRubyで使えるようにしようとするものです。

ダウンロード:

最新版:

ruby-ispack-0.4.5.tar.gz (2011-08-17)

使用方法:

Fortran版ISPACKをインストールしておく。

ruby本体のコンパイラと同系列のもの(gccとgfortranなど)でコンパイルしたものの方が、 インストールがうまくいきやすい、と思います。

最新版をダウンロード、展開する。

$ tar zxvf ruby-ispack-0.?.tar.gz

extconf.rbでMakefileを作成する。

$ ruby extconf.rb --with-フォートランコンパイラ名

その他オプションを付加する必要があるかもしれません。例:

$ ruby extconf.rb --with-gfortran --with-ispack-name=ispack --with-ispack-lib=/usr/local/lib

うまくいくMakefileができないかもしれません。 うまくいかない場合はsample/以下にサンプルをおいていますので 参考にしてください。

makeする。

$ make
$ sudo make install

makeがうまくいくと ispack_raw.o, ispack_raw.so ができます。 これが下位ラッパーで、rubyとF77ライブラリの橋渡しをする部分。 make install で所定のディレクトリにインストールされます。

下位ラッパーを使用する。

rubyスクリプト内で require "ispack_raw.so" とすれば 使えるようになります。 例えばFortranで

CALL STSRVA(MM,JM,IM,S,U,V,P,Q,R,IT,T)

としていた部分は

u,v = ISPACK::stsrva(mm,jm,im,s,p,q,r,it,t)

といったようになります。

上位ラッパーを使用する。

下位ラッパーだけでは使いにくいので下位ラッパーを使うための クラスを作っています。lib/numru/ispack.rb です。 rubyスクリプト内で require "numru/ispack" とすれば 使えるようになります。 上の例では、まず

st = STPACK.new(mm,jm,im)

とSTPACKクラスのインスタンスを定義し、

u,v = st.srva(s)

とすることができます。こうすれば作業変数等が隠蔽され、自分で 変数を用意する必要がなくなります。

サンプルでテストする。

sample/以下に置いてあります。

  test_c2pack.rb : ベナール対流ができます。
                   本家のsample/2D-channel/benard.f と同じ。
  test_n2pack.rb : 双子渦が合体します。
                   本家のsample/2D-plane/model2d.f と同じ。
  test_sppack.rb : 球面浅水モデル(絵は出ない)。
                   本家のsample/shallow-water-sphare/model.f と同じ。

(2011-08-17 R.Mizuta)