圧力-速度連成手法の設定

2015年5月1日

はじめに

圧力-速度連成手法の設定の設定について。

使用バージョン

OpenFOAM 2.2.2

圧力-速度連成手法の設定

圧力-速度連成手法である SIMPLE、PISO、PIMPLE などの設定は system/fvSolution で行う。

SIMPLE 法

SIMPLE 法は以下の手順で計算される。

SIMPLE 法の設定を以下に示す。

SIMPLE
{
    nNonOrthogonalCorrectors 0;
    pRefPoint       (0 0 0);
    pRefValue       0;

    residualControl
    {
        p               1e-3;
        U               1e-3;
        "(k|epsilon|omega|R)" 1e-3;
    }
}

relaxationFactors
{
    fields
    {
        p               0.3;
    }
    equations
    {
        U               0.7;
        "(k|epsilon|omega|R)" 0.7;
    }
}

"SIMPLE" において SIMPLE 法の各種設定を行う。

nNonOrthogonalCorrectors
非直交補正のループ回数。メッシュの non-orthogonality (非直交性) が 5 以上で laplacianSchemes/snGradSchemes で非直交補正を有効にしているのであれば、この値を 1 くらいにしておく。non-orthogonality の数値については、checkMesh で調べることができる。
pRefPoint, pRefValue
圧力指定境界がない場合に、領域内部のある点で圧力を固定するための参照位置とその圧力値の設定。
residualControl
収束判定値。すべての変数で初期残差が判定値よりも小さくなったら計算を停止する。

relaxationFactors は緩和係数である。計算が発散する場合、あるいは収束が遅い場合、緩和係数を小さくしてみるとよい。どの緩和係数を小さくすべきかは変数の残差の値を見て判断する。ここで "fields" と "equations" とあるが、ソルバーの中で陽的に緩和されているもの (たとえばソルバーのソースで "p.relax()" などと書かれている) が fields、方程式に組み込まれる形で緩和されているもの (たとえば "UEqn().relax()" などと書かれている) が equations に記述されている。

PISO 法

PISO 法は以下の手順で計算される。

PISO 法の設定を以下に示す。

PISO
{
    momentumPredictor yes;
    nCorrectors     2;
    nNonOrthogonalCorrectors 0;
    pRefPoint       (0 0 0);
    pRefValue       0;
}

momentumPredictor で運動方程式を解くかどうかを切り替えられる。nCorrectors は PISO 法の圧力補正ループの回数で、通常は 2 である。圧力がうまく解けない場合は、これを大きくするとうまくいくかもしれない。PISO 法は反復計算を行わないため、収束判定や緩和係数の設定はない。

PIMPLE 法

PIMPLE 法は以下の手順で計算される。

PIMPLE 法の設定を以下に示す。

PIMPLE
{
    momentumPredictor yes;
    turbOnFinalIterOnly yes;
    nOuterCorrectors 10;
    nCorrectors     2;
    nNonOrthogonalCorrectors 0;
    pRefPoint       (0 0 0);
    pRefValue       0;

    residualControl
    {
        p
        {
            relTol          0.05;
            tolerance       1e-3;
        }
        U
        {
            relTol          0.05;
            tolerance       1e-3;
        }
        "(k|epsilon|omega|R)"
        {
            relTol          0.05;
            tolerance       1e-3;
        }
    }
}

relaxationFactors
{
    fields
    {
        p               0.3;
    }
    equations
    {
        U               0.7;
        "(k|epsilon|omega|R)" 0.7;
        ".*Final"       1;
    }
}

nOuterCorrectors は反復回数を指定する。これを 1 にすると PISO と同じになる。residualControl では収束判定値として tolerance と relTol が設定でき、すべての変数で代数方程式の初期残差が tolerance 以下になるかイテレーションの初期残差との比が relTol 以下になれば、反復計算を止めて時間ステップを進める。relTol を 0 に設定すれば、tolerance だけで収束判定される。

緩和係数は、".*Final" について、つぎの時間ステップに進む前にきっちり解いておくために 1 を設定したりする。