計算の制御の設定

2014年2月8日

はじめに

計算の制御について。

使用バージョン

OpenFOAM 2.2.2

計算の制御の設定

計算の制御の設定は system/controlDict で行う。

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      controlDict;
}

application     simpleFoam;

startFrom       latestTime;

startTime       0;

stopAt          endTime;

endTime         1000;

deltaT          1;

writeControl    timeStep;

writeInterval   50;

purgeWrite      0;

writeFormat     ascii;

writePrecision  6;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable true;

application

ソルバー名。必須ではないが、なるべく設定しておく。

startFrom

計算を開始する時刻の設定。以下を指定できる。

firstTime
存在する時刻データの中でもっとも早い時刻から開始。
startTime
startTime で指定する時刻から開始。
latestTime
存在する時刻の中でもっとも遅い時刻 (要するに最後の結果) から開始。

計算を途中結果から継続するには、"latestTime" を指定する。基本的に "latestTime" を指定しておけばよいかもしれない。

startTime

startFrom で "startTime" を指定したときに使われる。ふつうは 0 を指定する。

stopAt

計算を止めるタイミングの設定。以下を指定できる。

endTime
endTime で指定した時刻で停止。
writeNow
現時刻の計算を終えてから計算結果を書き出して停止。
noWriteNow
現時刻の計算を終えてから計算結果を書き出さずに停止。
nextWrite
次の計算結果の書き出し時刻で停止。

runTimeModifiable が有効になっている場合、controlDict を変更するとソルバーは設定を読み込みなおす。したがって、stopAt に "writeNow" などを指定すれば、計算結果を保存した上で実行中のソルバーを停止させることができる。

endTime

stopAt で "endTime" を指定したときに使われる。計算の終了時刻を指定する。計算結果の保存は別途 writeControl で行われるため、計算終了時刻の結果が保存されるとは限らないので注意すること。

定常解析の場合は最大反復計算回数をしていする。

deltaT

時間刻み幅を指定する。定常解析の場合は 1 を指定する。非定常解析の場合は CFL 条件を参考にして決める。

writeControl

計算結果の出力の制御方法。以下を指定できる。

timeStep
時間ステップ何回かごとに出力する。
runTime
ある時間経過ごとに出力する。
adjustableRunTime
時間刻み幅自動調整を使用するときに設定する。ある時間経過ごとに出力する。
cpuTime
ある CPU 時間経過ごとに出力する。
clockTime
ある実時間経過ごとに出力する。

cpuTime や clockTime は、スパコンを利用するときに使うのかもしれない。

writeInterval

writeControl の設定に応じた値を設定する。"timeStep" ならステップ数、"runTime" なら秒数を設定する。

purgeWrite

計算結果を保存する個数を指定する。たとえば 2 を指定すると、最後の結果とその前の結果だけが残り、それ以前の出力は削除される。0 を指定すればすべての結果が保存される。

定常解析の場合、基本的に途中結果は必要ないため、purgeWrite を 2 くらいに設定しておけばよい。※1 でいいんじゃね? 実は収束のタイミングと writeControl の出力タイミングが一致すると結果が保存されない (バグ?)。

writeFormat

計算結果ファイルのフォーマットの指定。"ascii" か "binary" を指定できる。

writePrecision

計算結果の数値の桁数の指定 (writeFormat が "ascii" の場合)。精度がほしい場合は桁数を増やしたほうがよい。

writeCompression

計算結果ファイルを圧縮するかどうかの指定。on/off でなく compressed/uncompressed でも指定できる。これを有効にするとフィールドファイルが gzip で圧縮される。ディスク使用量を抑えたい場合に使う。

timeFormat

時刻の書式の指定。以下が指定できる。

fixed
"12.345" のような形で表現される。桁数は timePrecision に従う。
scientific
"1.2345e+01" のような形で表現される。桁数は timePrecision に従う。
general
値に応じて上記を切り替える。

timePrecision

時刻の桁数を指定する。

runTimeModifiable

ソルバー実行時に controlDict を読み直すかどうかの指定。"true" でよい。

時間刻み幅自動調整

adjustTimeStep  on;
maxCo           0.9;

非定常解析の場合、時間刻み幅自動調整を使用できる。これを有効にすると、時間刻み幅は maxCo で指定したクーラン数により自動決定される。deltaT で指定した値は時間刻み幅の初期値として用いられる。計算結果の出力タイミングの指定に adjustableRunTime が利用できる。

ライブラリのリンク

あまり必要になることはないが、ライブラリをリンクする必要がある場合は、controlDict で次のように書けばよい。

libs
(
    "libturbulenceModels.so"
);