液面に浮いた物体の振動によって生じる波

OpenFOAM 4.x

ケース

$FOAM_TUTORIALS/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox

概要

液面に浮いた物体が振動した場合に生じる波の動きを静水圧を計算することで評価します。領域 floatingObject、floatingObjectBottom が振動物体、領域 freeSurface が液面とし、領域 leftWall、bottomWall、 rightWall はすべり無し壁とします。また Z 方向は1メッシュとして2次元問題として計算します。

モデル形状 モデル形状

振動はメッシュ形状を時間変化させることで模擬します。設定はファイル 0.orig/pointDisplacement で以下のように領域 floatingObjectBottom の境界条件を指定することで指定します。また領域 leftWall、領域 floatingObject の上の節点が振動に追従する様に同じファイルで両領域に fixedNormalSlip を指定します。

floatingObjectBottom
{
    type            oscillatingDisplacement;
    amplitude       (0 -0.05 0);
    omega           6.2831853;
    value           uniform (0 0 0);
}

ファイル system/controlDict 内で以下の様に設定することで、領域 floatingObject にかかる力と領域 f0 の液面の平均水位を計算中に出力します。計算結果はフォルダ postProcessing 以下に保存されます。

領域(フェイスゾーン)f0 領域 f0(赤色部)
functions
{
    forces
    {
        type            forces;
        libs ("libforces.so");
        writeControl    writeTime;
        patches         (floatingObject);
        rho             rhoInf;
        log             yes;
        rhoInf          1000;
        CofR            (0 0 0);
    }

    poolHeight
    {
        type            surfaceRegion;
        libs ("libfieldFunctionObjects.so");
        writeControl   timeStep;
        writeInterval  1;
        log             yes;
        writeTotalArea  no;
        writeFields     no;
        regionType      faceZone;
        name            f0;
        operation       areaAverage;
        fields
        (
            zeta
        );
    }
};

全体のメッシュは以下の通りで、メッシュ数は3829です。

メッシュ メッシュ
メッシュ(拡大) メッシュ(拡大)

計算結果は以下の通りです。

圧力(p_gh)
最終時刻での圧力(p_gh) 最終時刻での圧力(p_gh)
領域 f0 の平均水位の時間変化(横軸:時間、縦軸:平均水位変動量) 領域 f0 の平均水位の時間変化(横軸:時間、縦軸:平均水位変動量)

実行コマンド

cp -r $FOAM_TUTORIALS/multiphase/potentialFreeSurfaceDymFoam/oscillatingBox oscillatingBox
cd oscillatingBox

blockMesh
topoSet
subsetMesh -overwrite c0 -patch floatingObject
topoSet -dict system/topoSetDict-selectBottom
createPatch -overwrite

cp -r 0.orig 0
potentialFreeSurfaceDyMFoam

# 3次元描画
paraFoam

# 領域 f0 の平均水位をグラフ描画
awk '{print $1 " " $3}' postProcessing/poolHeight/0/surfaceRegion.dat > poolHeight_vs_time
gnuplot
gnuplot>plot "poolHeight_vs_time" using 1:2 title 'poolHeight vs time' with lines lc rgb "black"

計算時間

3分15.5秒 ※シングル、Inter(R) Core(TM) i7-2600 CPU @ 3.40GHz 3.40GHz

参照