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

2012年11月15日

はじめに

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

使用バージョン

OpenFOAM 2.1.1

問題

interFoam のチュートリアルケース damBreak をベースにする。system/setFieldsDict を次のように変更する。

    boxToCell
    {
        //box (0 0 -1) (0.1461 0.292 1);
	box (0 0 -1) (1 0.292 1);
        fieldValues
        (
            volScalarFieldValue alpha1 1
        );
    }

これで setFields を実行すると、つぎのようになる。

interFoam を実行すると、つぎのようになる。

液面には変化なし。液面上に少し速度がでる。

今度はメッシュを少し変更する。constant/polyMesh/blockMeshDict の vertices の "(4 4 0)" と "(4 4 0.1)" をそれぞれ "(4 3 0)" と "(4 3 0.1)" にする。これで blockMesh を実行するとつぎのようになる。

setFields 実行結果。

メッシュ線が液面に沿っていないため、初期がギザギザになる。

interFoam 実行結果。

ギザギザの液面が平らになろうとするため、液面が左に移動する。その際の液面付近の速度が速すぎるような気がするので、これを抑えることを考える。

interFoam の修正

気相の挙動にたいして興味がないものとして、液相率が小さい領域で速度を 0 にしてみる。

alphaEqnSubCycle.H (先頭)

        forAll(alpha1, i)
        {
            if(alpha1[i] < 0.01)
            {
                U[i] *= 0.;
            }
        }
	
	...

計算結果。

多少マシになっている。

もとの damBreak の計算結果。

左: オリジナル、右: 修正版。ちょっとなまった感じになる。

津波解析の場合 (深さ 5 m、波の高さ 3 m)。

左: オリジナル、右: 修正版。オリジナルでは界面がぼけた感じになっているが、修正版ではそれが抑えられている。

確かに計算は安定するが、U = 0 というのは抵抗が強すぎる。もとの U を 0.7 倍するなどの緩和のほうがよいかもしれない。

        forAll(alpha1, i)
        {
            if(alpha1[i] < 0.01)
            {
                U[i] *= 0.7;
            }
        }
	
	...

これだと、気相の不自然な速度を抑えつつ、damBreak の結果をそれほど大きくは変えない。

左: オリジナル、右: 修正版。津波の様子が U = 0 の場合と結構違う。設定した波の高さからすると、こちらのほうがほんものっぽい。

参考文献