[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002352] Re: Ruby-ISPACK 作成中



水田です。

しばらく間があいてしまいましたが、
ISPACKを直接呼ぶCラッパーの上に、作業変数を隠蔽する上位のラッパーを
作ってみました。
http://ruby.gfd-dennou.org/products/ruby-ispack/ruby-ispack-0.3.tar.gz
として置きました。
以前の北村さん・堀之内さんのメールにあったような設計でクラスを
作っています。
例えばFortranで
  CALL N2INIT(JM,IM,ITJ,TJ,ITI,TI)             ! 作業変数を初期化
  CALL N2S2GA(LM,KM,JM,IM,S,G,W,ITJ,TJ,ITI,TI) ! スペクトル->グリッド
などとしていたところが、
  n2 = N2PACK.new(jm,im)
  g = n2.s2ga(s)
というようになります。

サンプルとして、
ISPACK本家の
sample/2D-plane/model2d.f
sample/2D-channel/barard.f
を移植して
test_n2pack.rb
test_c2pack.rb
に書きかえたものを同梱しています。
両者同じ結果になるはずです。
Linux+gcc+g77 で実行時間を比較すると、
test_n2pack.rb は model2d.f の約1割増、
test_c2pack.rb は barard.f 約5割増
といったところでした


他にもサンプルを作ってテストしようとしていたら、
問題にぶつかってしまいました。
RubyからCやFortranの関数を呼ぶ際、引数が16個以上あるとエラーになります。
調べてみると、、、
どうやらRubyの仕様のようです(eval.c 4470行目あたり)。
(http://i.loveruby.net/ja/rhg/method.html 参照)
ISPACKは引数が最大26個あって現状では動かないものがけっこうあります。
ううんどうしましょう。


-- 
水田 亮
rmizuta@xxxxxxxxxxxxx