OpenFOAMのオブジェクト関連の仕組みを整理する。
例題としてここで「inletとoutletのphiの総和をscoreとして出力する」をいろいろな方法で行う。
- 例としてTJunction/pimpleFoamを用意。
- スコアの計算と出力を既存機能で表現。
- スコアの計算と出力をcodedFunctionObjectで行う。
- ついでにawkなどを使ってlogファイルから時間とscoreを抽出する
- スコアの計算と出力をソルバーの中で行う。
- functionObjectなど無しでただ上記ソルバーを実行するだけのケース。
- スコアの計算と出力を行うclass "getScore"を作成する
- これをソルバーの中でincludeして使用する。
- 以下のように分担する。
- スコアの計算:sumInletOutletScore
- スコアの出力:getScore
- sumInletOutletScoreは"getScore"を継承しているためスコアの出力ができる
- ソルバーの中ではsumInletOutletScoreをincludeする。
- scoreに関する設定をソルバー実行時に読み込めるようにscoreDictとその読み込みを実装した。
- getScoreクラスはIOdictionaryクラスを継承することとした。
- コンストラクタを二種類用意した。「meshのみ」と「meshとIOdictionary」。
- meshのみの場合はconst/scoreDictを読み込む。後者の場合はconstant/scoreDict以外のものを読み込みたい場合にソルバー側で調整できる。
- 例としてsetFields.Hで2パターンのコンストラクタの動作を確認した。
- scoreDictから先ほどの継承クラスsumInletOutletScoreを選択できるようにした。
- このためにはrunTimeSelectionTableに登録する必要がある。
- https://openfoamwiki.net/index.php/OpenFOAM_guide/runTimeSelection_mechanism
- getScoreクラスを
wmake libso
でコンパイルする。 - それを
scoreLibsoPimpleFoam
のwmake
の際にリンクする。
- gtScoreに"coded"という継承クラスを作成する。