液面付近の不自然な流速の抑制 2

2012年11月15日

はじめに

interFoam において、液面付近で変な速度が出ることがある。この速度を極力抑える方法を検討してみる。

使用バージョン

OpenFOAM 2.1.1

ファイル

注意: Salome で出力した unv ファイルの 2 行目を手で修正して使った。

    -1
  164

これを以下のように修正。

    -1
   164

問題

前回、気相の速度の緩和により、気液界面付近の速度を抑えたが、これの影響の大きさについて評価する。

噴流問題を考える。

2 次元、上から下に向かって液が入る。大きさは 1x1, 上部スリット幅は 0.1。底部のみ開放。っ流入速度は 20 m/s。

interFoam の修正の影響

修正版 interFoam で噴流問題を解いてみる。

左: オリジナル、右: 修正版。修正版は液が減速し、液前面に圧力が立っているのがわかる。絵ではわかりにくいが、液の到達距離も若干短くなっている (グラフで見るとわかる)。速度の緩和が液への抵抗として働いていることになる。これが計算を安定化させるが、液の進行を邪魔することもあることになる。

interFoam の修正

interFoam の別の修正方法を試みる。気相の速度が液相の速度よりかなり大きくなるのが問題のように思えるので、気相の最大速度が液相の最大速度を越えないように調整する。つまり、前回の速度緩和の大きさに気相と液相の最大速度比を使う。

alphaEqnSubCycle.H (先頭)

scalar alpha1Umax = 0.;
scalar alpha2Umax = 0.;
forAll(alpha1, i)
{
    if(alpha1[i] >= 0.05)
    {
        if(alpha1Umax < mag(U[i]))
        {
            alpha1Umax = mag(U[i]);
        }
    }
    else
    {
        if(alpha2Umax < mag(U[i]))
        {
            alpha2Umax = mag(U[i]);
        }
    }
}

reduce(alpha1Umax, maxOp<scalar>());
reduce(alpha2Umax, maxOp<scalar>());

scalar r = alpha1Umax/(alpha2Umax + VSMALL);
if(r > 1)
{
    r = 1.;
}

Info << "alpha1Umax = " << alpha1Umax << endl;
Info << "alpha2Umax = " << alpha2Umax << endl;
Info << "r = " << r << endl;

forAll(alpha1, i)
{
    if(alpha1[i] < 0.05)
    {
        U[i] *= r;
    }
}

...

気相と液相の切り替えは、ここでは alpha1 = 0.05 としている (津波解析で調整)。

左: オリジナル、右: 修正版。あまりかわらない。噴流への影響が軽減しているのがわかる。

damBreak/津波解析への効果を見る。左: オリジナル、右: 修正版。

速度改善の効果はあるようである。

damBreak は、やはりなまる。

津波への影響は、まあまあよさそうである。