$FOAM_TUTORIALS/multiphase/potentialFreeSurfaceFoam/oscillatingBox
液面に浮いた物体が振動した場合に生じる波の動きを静水圧を計算することで評価します。領域 floatingObject が振動物体、領域 freeSurface が液面とし、領域 walls はすべり無し壁とします。また Z 方向は1メッシュとして2次元問題として計算します。
振動は流速を時間変化させることで模擬します。設定はファイル 0.orig/U で以下のように流速の境界条件を指定することで指定します。
floatingObject { type fixedNormalInletOutletVelocity; fixTangentialInflow false; normalVelocity { type uniformFixedValue; uniformValue sine; uniformValueCoeffs { frequency 1; amplitude table ( ( 0 0) ( 10 0.025) (1000 0.025) ); scale (0 1 0); level (0 0 0); } } value uniform (0 0 0); }
ファイル system/controlDict 内で以下の様に設定することで、領域 floatingObject にかかる力と領域 f0 の液面の平均水位を計算中に出力します。計算結果はフォルダ postProcessing 以下に保存されます。
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です。
計算結果は以下の通りです。
1分17.94秒 ※シングル、Inter(R) Core(TM) i7-2600 CPU @ 3.40GHz 3.40GHz