初期値の設定

2020年9月27日

はじめに

初期値の設定について。

使用バージョン

OpenFOAM v2006, v8

初期値の設定

各変数の初期値は、フィールドファイルの internalField で指定できる。非定常解析を静止場から始める必要があるのであれば、速度 0、圧力一定、乱流諸量には適当な値を入れておく。定常解析の場合や、定常状態から非定常解析を始める場合は、速度や乱流諸量を流入条件から決めればよい。あるいは、初期値を決めるために一度計算を実行してもよい。簡単な初期値の計算方法として、potentialFoam を使う方法がある。

potentialFoam

potentialFoam はポテンシャル流れを計算するソルバーである。いくつか設定が必要である。system/fvSolution の solvers に変数 Phi の設定を追加する。

    Phi
    {
        solver          GAMG;
        smoother        DIC;
        tolerance       1e-06;
        relTol          0.01;
    }

また、以下の設定を追加する。

potentialFlow
{
    nNonOrthogonalCorrectors 10;
}

残差を下げるために非直交補正ループを多めに設定している。system/fvSchemes の laplacianSchemes には以下の設定が必要である。

    laplacian(1,Phi)  Gauss linear corrected;

※v2.2.x 以前は Phi の代わりに p を使う。

また、圧力の出力が必要であれば、divSchemes に以下の設定も必要である。

    div(div(phi,U)) Gauss linear;

ケースディレクトリで以下のように実行する。

$ potentialFoam -writep

計算結果は 0 ディレクトリの U ファイルに反映される。オプション "-writep" で圧力の結果も併せて p に反映される。実行ログはつぎのようになる。

Calculating potential flow
GAMG:  Solving for Phi, Initial residual = 1, Final residual = 0.0961357, No Iterations 20
GAMG:  Solving for Phi, Initial residual = 0.0120506, Final residual = 0.0011272, No Iterations 4
GAMG:  Solving for Phi, Initial residual = 0.00118204, Final residual = 0.000112727, No Iterations 10
GAMG:  Solving for Phi, Initial residual = 0.000150113, Final residual = 1.3313e-05, No Iterations 14
GAMG:  Solving for Phi, Initial residual = 2.1087e-05, Final residual = 1.93632e-06, No Iterations 16
GAMG:  Solving for Phi, Initial residual = 3.35104e-06, Final residual = 9.33196e-07, No Iterations 7
GAMG:  Solving for Phi, Initial residual = 1.05904e-06, Final residual = 8.8003e-07, No Iterations 1
GAMG:  Solving for Phi, Initial residual = 8.89952e-07, Final residual = 8.89952e-07, No Iterations 0
GAMG:  Solving for Phi, Initial residual = 8.89952e-07, Final residual = 8.89952e-07, No Iterations 0
GAMG:  Solving for Phi, Initial residual = 8.89952e-07, Final residual = 8.89952e-07, No Iterations 0
GAMG:  Solving for Phi, Initial residual = 8.89952e-07, Final residual = 8.89952e-07, No Iterations 0
Continuity error = 0.00177401
Interpolated velocity error = 0.000114118

※v2.2.x 以前では実行ログはつぎのようになる。

DICPCG:  Solving for p, Initial residual = 1, Final residual = 0.00954175, No Iterations 172
DICPCG:  Solving for p, Initial residual = 0.010839, Final residual = 0.000105547, No Iterations 41
DICPCG:  Solving for p, Initial residual = 0.000238023, Final residual = 2.00456e-06, No Iterations 160
DICPCG:  Solving for p, Initial residual = 2.69716e-05, Final residual = 9.51724e-07, No Iterations 12
DICPCG:  Solving for p, Initial residual = 1.34717e-06, Final residual = 8.57731e-07, No Iterations 1
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0
DICPCG:  Solving for p, Initial residual = 8.52541e-07, Final residual = 8.52541e-07, No Iterations 0

"Initial residual" の値が十分小さくなっているのがわかる。この値の下がり具合で非直交補正の設定が妥当かどうか判断できる。

potentialFoam を使っても計算全体の収束性がよくなるとは限らないが、計算初期の圧力の代数方程式ソルバーの収束性が改善することがあり、計算時間を短縮できる可能性がある。

乱流諸量のフィールドファイルの作成

RANS モデルで乱流計算を行う際、計算の途中で k-ε モデルから k-ω モデルやレイノルズ応力輸送モデルに切り替えたい場合がある。そのとき、k, epsilon ファイルから omega, R ファイルを用意するには、ポスト処理機能の turbulenceFields を用いる。

simpleFoam を用いる場合、つぎのようにする。

$ simpleFoam -postProcess -func "turbulenceFields(omega)" -latestTime

オプションの "-latestTime" は最後の結果のみ処理するというものである。最後の時刻ディレクトリに "turbulenceProperties:omega" といったファイルができるので、必要であれば手動で omega などに名前を変更する。

注意: postProcess を実行する際は、乱流モデルを kEpsilon などにしておくこと。先に kOmega などに変更すると、ないファイルを読みに行くため実行に失敗する。

v3.0.x 以前であれば、標準ユーティリティの createTurbulenceFiels を用いることができる (v4.x や v5 にもあるが、中身は postProcess の呼び出しである)。ただし、非圧縮性流体ソルバーのケースにのみ対応している。

つぎのように実行する。

$ createTurbulenceFields -latestTime

圧縮性流体ソルバーのケースの場合は、constant/transportProperties を仮に用意してやれば createTurbulenceFields を実行できる。