計算の制御の設定2020年12月29日 | |
はじめに計算の制御について。 使用バージョンOpenFOAM v2006、v8 計算の制御の設定計算の制御の設定は 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計算を開始する時刻の設定。以下を指定できる。
計算を途中結果から継続するには、"latestTime" を指定する。基本的に "latestTime" を指定しておけばよいかもしれない。 startTimestartFrom で "startTime" を指定したときに使われる。ふつうは 0 を指定する。 stopAt計算を止めるタイミングの設定。以下を指定できる。
runTimeModifiable が有効になっている場合、controlDict を変更するとソルバーは設定を読み込みなおす。したがって、stopAt に "writeNow" などを指定すれば、計算結果を保存した上で実行中のソルバーを停止させることができる。 endTimestopAt で "endTime" を指定したときに使われる。計算の終了時刻を指定する。計算結果の保存は別途 writeControl で行われるため、計算終了時刻の結果が保存されるとは限らないので注意すること。 定常解析の場合は最大反復計算回数をしていする。 deltaT時間刻み幅を指定する。定常解析の場合は 1 を指定する。非定常解析の場合は CFL 条件を参考にして決める。 writeControl計算結果の出力の制御方法。以下を指定できる。
cpuTime や clockTime は、スパコンを利用するときに使うのかもしれない。 writeIntervalwriteControl の設定に応じた値を設定する。"timeStep" ならステップ数、"runTime" なら秒数を設定する。 purgeWrite計算結果を保存する個数を指定する。たとえば 2 を指定すると、最後の結果とその前の結果だけが残り、それ以前の出力は削除される。0 を指定すればすべての結果が保存される。 定常解析の場合、基本的に途中結果は必要ないため、purgeWrite を 2 くらいに設定しておけばよい。※1 でいいんじゃね? 実は収束のタイミングと writeControl の出力タイミングが一致すると結果が保存されない (バグ?)。 writeFormat計算結果ファイルのフォーマットの指定。"ascii" か "binary" を指定できる。 writePrecision計算結果の数値の桁数の指定 (writeFormat が "ascii" の場合)。精度がほしい場合は桁数を増やしたほうがよい。 writeCompression計算結果ファイルを圧縮するかどうかの指定。これを有効にするとフィールドファイルが gzip で圧縮される。ディスク使用量を抑えたい場合に使う。Foundation 版では on/off の代わりに compressed/uncompressed でも指定できる。 timeFormat時刻の書式の指定。以下が指定できる。
timePrecision時刻の桁数を指定する。 runTimeModifiableソルバー実行時に controlDict を読み直すかどうかの指定。"true" でよい。 時間刻み幅自動調整adjustTimeStep on; maxCo 0.9; 非定常解析の場合、時間刻み幅自動調整を使用できる場合がある。ソルバーが対応している場合、これを有効にすると、時間刻み幅は maxCo で指定した最大クーラン数により自動決定される。deltaT で指定した値は時間刻み幅の初期値として用いられる。計算結果の出力タイミングの指定に adjustableRunTime が利用できる。 擬似非定常計算非定常ソルバーで LTS (local-time stepping) に対応している場合、非定常項スキーム (ddtScheme) に localEuler を指定することで、擬似非定常計算を行うことができる。擬似非定常計算の時間刻み幅の設定は、controlDict ではなく fvSolution の PIMPLE 辞書の中で行う。 PIMPLE { maxDeltaT 0.01; maxCo 0.8; rDeltaTSmoothingCoeff 0.02; rDeltaTDampingCoeff 1; } maxDeltaT は最大時間刻み幅、maxCo は最大クーラン数、rDeltaTSmoothingCoeff は時間刻み幅の場のスムージング係数、rDeltaTDampingCoeff は時間刻み幅の変化の制限を行う係数である。 収束判定による計算の停止収束判定による計算の停止の設定は、定常計算においては SIMPLE の residualControl (fvSolution) で行う。非定常計算においては、PIMPLE の residualControl で内部反復の停止条件の設定はできるが、計算全体を止めることはできない。普通はそれでよいのだが、非定常ソルバーで擬似非定常計算を行う場合、収束判定によって計算全体を止めたい場合がある。 OpenCFD 版 v3.0+ 以降では、function object の runTimeControl で値の平均値の変動などを見て計算の停止を行うことができる。たとえば、平均速度の変動を見て計算を止めたい場合は、controlDict で以下のように設定する。 functions { #includeFunc mag(U,executeControl=timeStep) volAvgU { type volFieldValue; libs (fieldFunctionObjects); fields (mag(U)); writeFields false; regionType all; operation volAverage; writeControl timeStep; writeInterval 1; } runTimeControl { type runTimeControl; libs (utilityFunctionObjects); conditions { average { type average; functionObject volAvgU; fields (volAverage(mag(U))); tolerance 1e-4; windowType approximate; window 50; // [s] } } } } ライブラリのリンクあまり必要になることはないが、ライブラリをリンクする必要がある場合は、controlDict で次のように書けばよい。 libs ( "libturbulenceModels.so" ); OpenCFD 版の場合、"libturbulenceModels.so" の代わりに、引用符なしで turbulenceModels と書いてもよい。 | |
PENGUINITIS |