2012年6月4日月曜日

Excelの有効利用(Part 1)

Officeツールである、MS-Excelを化学工学分野を始めとする自然科学分野から利用することを考える。

表計算ツールのExcelには、表計算以外に、VBAを用いたプログラミング、アドインによる機能の追加、計算結果を簡単にグラフ化し表示するなどの便利な機能がある。

これら機能の中で、インタープリタ方式を採用するVBA計算は単純な計算式であれば、手軽なコーディングでユーザーの望む機能を追加することができる。
しかし、複雑な計算、収束計算(時間がかかる計算)、大規模な計算(流体解析など巨大な配列を取り扱う技術計算)は、VBAでは負荷が重い。
そこでこうした技術計算を高級言語のFortranにより記述し、コンパイルし、Excelの外部で計算し、結果だけをExcelに受け渡す方法により、Excelの持つグラフ化機能を有効に利用することが出来る。

たとえば、プラグフロー型反応器の反応シミュレーションを実行するとき、非線型項である反応項を含む非線型微分方程式を解くことになる。解法として、差分法を用いるとすれば、計算領域(流れ方向)をメッシュを刻み、微分項を差分に置き換える操作(離散化)を行い、連立の非線型方程式に変換する。そして、収束手法を用い非線型連立方程式を解くことを行う。こうした反応シミュレーションのような複雑で収束を含む計算(計算時間がかかる)を、Fortranでコーディングし、計算時間の短縮を目指す。

一方、計算結果を表示するとき、Open-GLのような描画のための言語を用い、表示用アプリケーションを開発することもあるが、こうした言語を用いて表示プログラムをいちいちコーディングするのは手間がかかる。こうした手間を避けるため、Excelの持つグラフ化機能を利用することができる。先のプラグフロー型反応器の例で言えば、流れ方向の濃度分布をグラフ化したいとき、計算結果をExcelで読み込み、表形式で配置すれば、Excelで流れ方向の分布を簡単にグラフ化することができる。

ExcelとFortranとを連携させるとき、データの入出力をExcelで行い、大量の計算はFortran側で実施することで、トータルコストを抑え、パーフォマンスをあげることが可能となる。

Fortranの計算結果をExcelに受け渡す方法には、次の2つがある。
1) VBAを経由し、DLL(Dynamic Linkage Library)を経て、Excelに取り込む
2) Fortran側で出力ファイルとして、CSV(Comma Separated Values)ファイルを出力する

1)の方法は、Excelのワークシート上に、外部プログラムを実行するボタンを配置し、ボタンを押すと、VBAマクロを実行するようにVBAをコーディングする。そしてVBAから外部計算ライブラリ(DLL)を起動し、外部で計算させ、結果をVBAで受け、Excelワークシートに書き出すという操作になる。外部計算ライブラリはFortran言語により記述し、コンパイルすれば出来る。この方法で外部計算の負荷が大きいとボタンをクリックしてから答えが戻ってくるまで時間がかかることになり、レスポンスが悪くなる可能性がある。簡単な1変数の収束計算程度に負荷を制限する必要がある。

2)のCSVファイルはExcelから直接読み込むことが出来る。しかしオフラインでバッチ処理となる。CSVファイル経由とすることで、Fortranプログラムを独立して開発することができ、修正や改良をするとき、ExcelのVBAコードには大きな影響を与えない。逆に云えば1)の方法では修正や改良がVBAを含めて実施する必要があり困難さ・手間がかかるなどの懸念がある。

これら方法の詳細は、後日、簡単な例を紹介し、述べる。


1 件のコメント: