求解器中如果支持动网格将包括两个头文件分别是:
dynamicFvMesh.H、createDynamicFvMesh.H
在src中搜索这文件的位置可以使用下列命令:
find $FOAM_SRC -name createDynamicFvMesh.H
dynamic mesh需要包含dynamicMeshDict文件,同理可用find命令在tutorials中进行搜索
find $FOAM_TUTORIALS -name dynamicMeshDict
c++语法:
autoPtr motionPtr_ //motionPtr_是个指针,指向的对象是motionSolver类
motionPtr_->newPoints() //调用motionSolver类中的newPoints()函数
//motionSolve是所有求解器的虚基类-newPoints()函数如下:
Foam::tmpFoam::pointField Foam::motionSolver::newPoints()
{
solve(); / /不同的求解器中对solve()函数的定义不同–动网格算法主要看这个函数
return curPoints(); / /FVM求解出来的是cell体中心的位移,这个函数就是从中心的位移插值网格顶点的位移
}
virtual void solve() = 0; / /定义在motionSolver类中的纯虚函数,必须在子类中重写
动网格主要就是两点,第一边界怎么运动:随时间正弦运动?还是solution dependent?第二点知道了边界随时间的变化规律,内部的网格点怎么变化?—关于此点,用的最多的是dynamicMotionSolverFvMesh-拓扑不改变,网格变形,其一般是通过求解一个PDE来确定位移场的,那么到底指定什么样的PDE呢,需要指定不同的MotionSolver,并给出MotionSolver求解时需要给出相应的系数。注意网格在动,流场也存在速度,那么相当于动坐标系,故而算流量要以相对速度来计算。在这求解器代码中有定义,动网格源码主要位于这两个地方:
/root/OpenFOAM/OpenFOAM-7/src/dynamicMesh/
/root/OpenFOAM/OpenFOAM-7/src/fvMotionSolver/fvMotionSolvers/ --solve()、curPoints()函数位于这里
以上笔记来源于研发埠教程
dynamicMeshDict
/ /不知道如何设置输入moveDynamicMesh
dynamicFVmesh dynamicMotionSolverFvMesh
motionSolverLibs
linux平台下,静态库通常后缀为.a,动态库为.so,位于$FOAM_LIBBIN文件夹下,使用命令ls $FOAM_LIBBIN | grep Motion发现此处链接的库有三个。我们可以这样 一级一级的debug来查看缺少什么字典。
以上操作来源于此视频https://www.youtube.com/watch?v=JmC0ohzLJfo
笔者主要需要学习的是sixDoFRigidMotion,openfoamwiki上面有学习资源:https://
openfoamwiki.net/index.ph/Parameter_Definitions__dynamicMotionSolverFvMesh