目的
必要な準備作業
1)開発環境の構築
OpenFOAMのソルバー開発にソースコードの編集・コンパイル・デバッグは不可欠です。本来OpenFOAMはC++で書かれたため、一般的なLinux用のC++のSDK(例えば、Eclipse CDT)を使えば簡単にできると思ったが、以外と面倒です。従って、私は以下の組み合わせでソルバー開発を行っています。(もっといい方法があると思いますが)
ソースコード編集に任意のエディタでもよいが、多数のフォルダとファイルから構成されるソルバーのソースコードをより管理しやすくするため、やはりSDKを使う必要があります。私は、「Eclipse CDT」を使います。開発元のサイト(https://www.eclipse.org/cdt/)に行き、簡単に手に入ります。
本来、Eclipse CDTの環境設定を行えばコンパイルできるが、私は使いにくいと思います。従って、コマンドラインで「wmake」コマンドを使ってコンパイルします。慣れると以外と単純で使い易いです。
ここでのデバッグは2種類があると考えます。(A)コンパイル通らない際のデバッグ、(B)コンパイルできるが、実行結果正しいかどうかのデバッグの2つになります。(A)について、エラーメッセージを確認しながら、プログラムを修正していくしかないですが、慣れと経験が必要です。(B)について、私はよくプログラム中にコンソールにメッセージを出力する行を幾つかを追加し、プログラムの進行状況や変数の値の変化などをチェックしながらデバッグを実施します。
2)対象問題の支配方程式の抽出
解析したい対象が決めたら、まず、対象に支配する物理現象を抽出する必要があります、そして、これらの物理現象を支配する方程式を書き出します。要するに、「対象」→「物理現象」→「数式」の変換が必要です。正しい数式で解析対象を表現することは非常に重要です。
例えば、津波の解析を対象とする場合、物理現象では、「気液二相の流動」と「気液界面の変化」が存在する、従って、「質量・運動量保存式」に加えて気液界面を表現する「体積率保存式」も必要となります。
3)OpenFOAMのための支配方程式展開
上記支配方程式が決めたら、次にこれらの方程式を離散化して、OpenFAOM開発に利用し易いように展開する必要があります。方程式の展開方法について以下の2つの文献に参考するとよいが、結構難しいと思います。
参考文献
A)H. Jasak, Error Analysis and Estimation for Finite Volume Method with Application to Fluid Flows, Doctoral thesis, 1996.
B)H. Resche, Computational Fluid Dynamics of Dispersed Two-Phase Flows at High Phase Fractions, Doctoral thesis, 2002.
4)類似ソルバーの中身の理解
展開した方程式をいきなりプログラミングするのは難しいと思いますので、まず、使う支配方程式と一番近いソルバーを探して、そのソルバーのソースコードを眺めながら理解していくことが非常に重要です。何を眺めるかと言うと、(A)プログラム全体の流れ(SIMPLEやPISOと言った解法はどのような流れに組み込まれているか)、(B)圧力ポアソン方程式の解き方、(C)偏微分方程式の解き方などですが、また、自分が特殊な操作(例えば、自分なりの壁関数を作成するなど)を行いたいの際、似たような操作がOpenFOAMの何処かに存在しないかを探して自分のものにします。
5)コーディング
以上の準備が終わったら、自分のソルバーのプログタムができるようになります。特に上記(2)、(3)をしかっりと文章にすることは、将来的に他人がことソルバーを使っても、見てもわかり易くなります。さらに、コーティング終了し、コンパイルがうまく行ったとしても、以下の作業絶対にやるすべきです。
プログラムは想定したとおりで動くか、数式など正しくインプットされたかなどとなる。
簡単のものを対象に解析を実施し、既存の実験結果や他のソフト(あるいは一部のOpenFOAMの既存ソルバー)の解析結果と比較する。
以上です。