計算エンジンに関する考察

本計算では行列計算に数値計算ライブラリ SSL II を利用している. 本計算で扱う行列は非常に性質が悪いので, 行列計算に利用する数値計算 ライブラリの質が悪いと「正しい」結果が得られない.

本計算では行列が非正則になった際に, 非正則の原因となる化学種を取り除くと いう作業を行っている. そのため, 非正則の判定が甘いと正しい計算結果が得ら れない.

例として行列計算に利用する数値計算ライブラリを SSL II, LAPACK の 両方を用いた結果を比較する. SSL II ではそれなりに計算されているが, LAPACK の方は値ががたつく. ログファイルから見る限り, LAPACK を使った 場合にはギブス自由エネルギーが増加してしまう場合が見られる. 枢軸選択の精度の問題か?

2003-06-23 追記:
SSL II, LAPACK の標準的な行列計算パッケージはLU 分解する際に部分枢軸選択を採用している. 本計算のような行列のコンディ ションが悪いものを解くためには, 部分枢軸選択ではなく, 完全枢軸選択を採 用すべきである. 現在は, 竹澤照(著) Fortran II --数値計算-- のサンプル を参照に完全枢軸選択のLU 分解を行う行列計算ルーチンを使っている. これ を用いる方が圧倒的に非正則になる頻度が低い.




最少モル数を変化させたときの計算結果(H2O(g)モル数)の出力. 系に含まれる化学種は H2(g), He(g), H2O(g), NH3(g), H2S(g), CH4(g), H2O(l), H2O(s), NH3(s).
SSL II (DLAX + DLAXR)の場合 LAPACK (dgesv ルーチン) の場合



2003-06-09 杉山耕一朗 (sugiyama(at)gfd-dennou.org)