本計算では行列計算に数値計算ライブラリ SSL II を利用している. 本計算で扱う行列は非常に性質が悪いので, 行列計算に利用する数値計算 ライブラリの質が悪いと「正しい」結果が得られない.
本計算では行列が非正則になった際に, 非正則の原因となる化学種を取り除くと いう作業を行っている. そのため, 非正則の判定が甘いと正しい計算結果が得ら れない.
例として行列計算に利用する数値計算ライブラリを SSL II, LAPACK の 両方を用いた結果を比較する. SSL II ではそれなりに計算されているが, LAPACK の方は値ががたつく. ログファイルから見る限り, LAPACK を使った 場合にはギブス自由エネルギーが増加してしまう場合が見られる. 枢軸選択の精度の問題か?
2003-06-23 追記:
SSL II, LAPACK の標準的な行列計算パッケージはLU 分解する際に部分枢軸選択を採用している. 本計算のような行列のコンディ ションが悪いものを解くためには, 部分枢軸選択ではなく, 完全枢軸選択を採 用すべきである. 現在は, 竹澤照(著) Fortran II --数値計算-- のサンプル を参照に完全枢軸選択のLU 分解を行う行列計算ルーチンを使っている. これ を用いる方が圧倒的に非正則になる頻度が低い.
SSL II (DLAX + DLAXR)の場合 | LAPACK (dgesv ルーチン) の場合 |
---|---|
![]() |
![]() |