Ruby-ISPACK ISPACKは石岡@京大理さん作のFOTRAN77による数値計算ライブラリーです。 http://www.gfd-dennou.org/arch/ispack/ Ruby-ISPACKはISPACKをRubyで使えるようにしようとするものです。 使用方法: ・F77版ISPACKをインストールしておく。 ruby本体のコンパイラと同系列のもの(gccとg77など)で コンパイルした方が、以下でおこなうmakeが成功しやすい、と思います。 ・ruby-ispack-0.? をダウンロード、展開する。 $ tar zxvf ruby-ispack-0.?.tar.gz ・Makefileを作成する。 $ ruby extconf.rb --with-ispack-lib=パス あるいは $ ruby extconf_FFC.rb --with-ispack-lib=パス $ ruby extconf_ifort9.rb --with-ispack-lib=パス でうまくいくMakefileができる、かもしれない。 うまくいかない場合はsample/以下にサンプルをおいていますので 参考にしてください。 ・makeする。 makeがうまくいくと ispack_raw.o, ispack_raw.so ができます。 これが下位ラッパーで、rubyとF77ライブラリの橋渡しをする部分。 ・下位ラッパーを使用する。 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) といったようになります。 ・上位ラッパーを使用する。 下位ラッパーだけでは使いにくいので下位ラッパーを使うための クラスを作っています。ispack.rb です。 rubyスクリプト内で require "パス/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 と同じ。 test_stpack.rb : 同心円型の渦ががおむすび型に変化します。 (05/10/04 R.Mizuta)