adjustTimeStepの使い方

OpenFOAMにはCourant Numberの最大値が指定した値以下となるようにtimeStepを自動的に調整する機能が備えられており、pimpleFOAMには最初から組み込まれている。その使い方は、system/controlDictの最後に、

adjustTimeStep yes;
maxCo          0.9;

という行を追加し、writeControlを、

writeControl  adjustableRunTime; (可変時間ステップに対応)
writeInterval 10;   (データ書き出しの時間間隔を指定)

とすれば良い。ただし、ソルバーがこの機能に対応している必要がある。

adjustTimeStep機能の組み込み

この機能を有効にするためにはソースファイルを触る必要がある。applications/solvers/incompressible/の中に、ソルバーのソースファイルが含まれている。ここではpisoFoamにadjustTimeStepを組み込んでみよう。ソースを改変するので、オリジナルのソースファイルをコピーしよう。

$ cp -r pisoFoam pisoFoam_m
$ cd pisoFoam_m
$ wclean

まず、ソースファイルとインクルードファイルの名前を新たなソルバー名(ここではpisoFoam_m)に変える。

$ mv pisoFoam.C pisoFoam_m.C

そして、pisoFoam_m.Cの中の

while (runTime.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;

#include "readPISOControls.H"
#include "CourantNo.H"

// Pressure-velocity PISO corrector

の部分(OpenFOAM-2.3.0の場合)を、

while (runTime.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;

#include "readTimeControls.H"
#include "readPISOControls.H"
#include "CourantNo.H"
#include "setDeltaT.H"

runTime++;

Info<< "Time = " << runTime.timeName() << nl << endl;

// Pressure-velocity PISO corrector

のように書き換える。さらに、Make/filesの中のpisoFoamを全てpisoFoam_mに書き換える。

pisoFoam_m.C

EXE = $(FOAM_APPBIN)/pisoFoam_m

そして、pisoFoam_m.Cのあるディレクトリの中で、wmakeを実行すると、adjustTimeStep機能の備わったpisoFoam_mが生成される。あとは、上で説明したadjustTimeStep機能を有効にするための初期設定をsystem/controlDictに加えてpisoFoam_mを実行すれば良い。

謝辞

以下のURLを参考にさせていただきました。ここに記し、感謝の意を表します。

http://www.idurun.com/?p=371

お約束

ここに書かれた情報は私の環境でうまくいった例を紹介しており、その他の環境でうまくいくことを保証するものではありません。また、ここの情報に沿って試した結果生じた不利益に対して一切責任を追いません。

執筆者:M.Noda