$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 以下に保存されます。
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です。
計算結果は以下の通りです。
3分15.5秒 ※シングル、Inter(R) Core(TM) i7-2600 CPU @ 3.40GHz 3.40GHz