境界パッチの動きが時間や空間の関数として分かっている場合にどうするかを調べたい。
境界パッチ形状の移動に伴う流体メッシュ変形については、例によってPenguintsさんのサイトにまとめられていた。ただし、パッチ形状が変形するわけではなく、あくまで剛体運動する場合のようである。
constant/dynamicMeshDictには以下の例の通り記述する。dynamicFvMeshには、dynamicMotionSolverFvMeshを指定する。
dynamicFvMesh dynamicMotionSolverFvMesh;
motionSolverLibs ("libfvMotionSolvers.so");
solver velocityComponentLaplacian;
velocityComponentLaplacianCoeffs
{
component x;
diffusivity inverseDistance (move);
}
ここで、solverの指定と、指定solver毎のCoeffsサブディクショナリの組み合わせでパッチ移動に伴うメッシュ変形計算を行う。solverの指定により、境界パッチの移動を記述するファイルが異なる(0/pointMotionUx やpointMotionU, pointDisplacementなど)。
4.xで選択可能なsolverは以下の7つで、motionSolverLibs ("libsixDoFRigidBodyMotion.so")と指定すれば、solver で sixDoFRigidBodyMotionも指定できるらしい。
- displacementComponentLaplacian
- displacementInterpolation
- displacementLaplacian
- displacementLayeredMotion
- displacementSBRStress
- velocityComponentLaplacian
- velocityLaplacian
この中で、パッチ移動の変位(displacement)を指定するのは、1~5、速度を指定するのは6,7ということである。Interpolationは、メッシュ移動前後の変形から補間するもので、Laplacianはメッシュ移動のラプラス方程式を解くので、より滑らかなメッシュになる。
今回の用途では、直接変位が計算できるので、移動パッチ"wing"に対するものであれば、以下のようになるのかな。
solver displacementLaplacian;
displacementLaplacianCoeffs
{
diffusivity quadratic inverseDistance ( wing );
}
移動変位は 0/pointDisplacement で指定することになり、
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class pointVectorField;
location "0.01";
object pointDisplacement;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions [0 1 0 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
wing
{
type calculated;
value uniform (0 0 0);
}[snip]
}
// ************************************************************************* //
ここで指定するtypeには様々な変位指定が可能である。(追記予定)