· 靳贺伟 · 网格基础  · 11 min read

OpenFOAM v2512 移动与变形网格:ALE 理论、motionSolver 设置与工程应用

介绍拓扑不变动态网格的 ALE 方程、刚体运动和网格变形方法,并给出 dynamicMotionSolverFvMesh 的设置流程、质量控制与应用案例。

移动与变形网格用于描述真实边界运动,同时保持网格拓扑不变。

其基本特征是:

  • 网格点位置随时间变化;
  • 单元、面和点的连接关系不变;
  • 不进行单元增加、删除或重新连接;
  • 不需要 AMI 或 Overset 的跨网格插值。

1. ALE 描述

对于运动控制体,守恒方程需要考虑网格边界本身的速度。设流体速度为 (\boldsymbol{u}),网格速度为 (\boldsymbol{u}_m),相对速度为:

[ \boldsymbol{u}_r=\boldsymbol{u}-\boldsymbol{u}_m ]

质量守恒可写为:

[ \frac{d}{dt}\int_{V(t)}\rho,dV +\oint_{\partial V(t)} \rho(\boldsymbol{u}-\boldsymbol{u}_m)\cdot d\boldsymbol{S}=0 ]

这属于 ALE,即 Arbitrary Lagrangian-Eulerian 描述。

  • 当 (\boldsymbol{u}_m=0) 时,退化为欧拉描述;
  • 当网格随流体质点运动时,接近拉格朗日描述;
  • 实际 CFD 中网格速度由几何运动和网格平滑策略决定。

2. 几何守恒律

动态网格不仅要满足物理守恒,还要满足几何守恒律。直观地说:

即使流场是均匀的,网格运动本身也不应凭空制造质量、动量或能量。

单元体积变化必须与网格面扫掠体积一致。OpenFOAM 在动态有限体积框架中计算网格运动通量,求解器再使用相对通量进行离散。

因此,用户不能只定义物体位移,还必须:

  • 使用支持动态网格的求解器;
  • 合理设置时间步;
  • 检查网格 Courant 数;
  • 在网格更新后执行必要的压力和通量修正。

3. 刚体运动与变形运动

3.1 刚体运动

刚体运动保持局部网格形状不变,包括:

  • 匀速或变速平移;
  • 绕固定轴旋转;
  • 往复运动;
  • 预定义组合运动;
  • 受流体力驱动的六自由度运动。

3.2 变形运动

边界位移向内部传播,网格发生连续变形。

常用思想包括:

  • Laplace 位移平滑;
  • 速度 Laplace 平滑;
  • SBRStress 应力型平滑;
  • 弹性类平滑;
  • 距离加权扩散。

基本方程可概括为:

[ \nabla\cdot(\gamma\nabla\boldsymbol{d})=0 ]

其中 (\boldsymbol{d}) 为网格位移,(\gamma) 为运动扩散系数。通过设计 (\gamma),可保护运动壁面附近网格,并把主要变形分配到远离关键边界的区域。

4. v2512 中的主要网格类

4.1 dynamicMotionSolverFvMesh

单一运动求解器的常用动态网格类:

dynamicFvMesh dynamicMotionSolverFvMesh;

4.2 dynamicMotionSolverListFvMesh

用于多个运动求解器:

dynamicFvMesh dynamicMotionSolverListFvMesh;

solvers
(
    rotor1
    {
        solver solidBody;
        ...
    }

    rotor2
    {
        solver solidBody;
        ...
    }
);

各运动按顺序应用。若多个运动区域作用于同一批点,应特别检查运动叠加是否符合物理预期。

4.3 dynamicMultiMotionSolverFvMesh

按 cellZone 应用不同运动求解器,适合多个明确分区的运动区域。

5. 固定轴旋转的基本设置

下面给出 v2512 风格的 constant/dynamicMeshDict 骨架:

dynamicFvMesh   dynamicMotionSolverFvMesh;

solver          solidBody;

solidBodyCoeffs
{
    cellZone    rotor;

    solidBodyMotionFunction rotatingMotion;

    rotatingMotionCoeffs
    {
        origin  (0 0 0);
        axis    (0 0 1);
        omega   6.283185;   // rad/s
    }
}

需要注意:

  1. rotor 必须是已有的 cellZone;
  2. 旋转区域与静止区域如何连接,需要 AMI、Overset 或整体网格运动等其他机制;
  3. 单独使用 solidBody 不能让一个共形内部接口在两侧发生相对滑动。

也就是说,运动求解器负责“怎么动”,AMI 或 Overset 负责“运动区域怎样与其他区域连接”。

6. Laplace 变形网格设置

dynamicMeshDict

dynamicFvMesh   dynamicMotionSolverFvMesh;

solver          displacementLaplacian;

displacementLaplacianCoeffs
{
    diffusivity inverseDistance (movingWall);
}

还需要在初始时刻目录中提供点位移场:

0/pointDisplacement

示意边界条件:

dimensions      [0 1 0 0 0 0 0];

internalField   uniform (0 0 0);

boundaryField
{
    movingWall
    {
        type    oscillatingDisplacement;
        amplitude (0.01 0 0);
        omega   6.283185;
        value   uniform (0 0 0);
    }

    fixedWalls
    {
        type    fixedValue;
        value   uniform (0 0 0);
    }

    otherPatches
    {
        type    zeroGradient;
    }
}

具体运动边界条件必须以 v2512 实际可用类型为准。复杂运动可使用表格函数、固体运动函数或 codedFixedValue

7. 运动扩散系数

7.1 uniform

整个区域均匀分配变形,设置简单,但运动边界附近可能发生较大拉伸。

7.2 inverseDistance

扩散系数与到指定 patch 的距离有关,常用于保护运动物体附近网格:

diffusivity inverseDistance (movingWall);

7.3 二次距离形式

可进一步强化近壁区域的刚性:

diffusivity quadratic inverseDistance (movingWall);

最终判断标准不是关键字本身,而是整个运动周期内的最小体积、非正交、偏斜、层厚变化和边界层完整性。

8. SBRStress 方法

displacementSBRStress 通过固体转动应力形式传播位移,通常比简单 Laplace 平滑更能处理含旋转成分的边界运动。

示意:

dynamicFvMesh   dynamicMotionSolverFvMesh;

solver          displacementSBRStress;

displacementSBRStressCoeffs
{
    diffusivity inverseDistance (movingWall);
}

其代价是计算更复杂,且仍不能保证任意大位移下网格有效。

9. 六自由度运动

sixDoFRigidBodyMotion 用于由流体力和力矩驱动的刚体运动。

需要定义:

  • 质量;
  • 转动惯量;
  • 初始质心和姿态;
  • 运动积分器;
  • 约束;
  • 弹簧、阻尼等 restraints;
  • 受力 patch。

v2512 支持 symplectic、Crank–Nicolson 和 Newmark 等时间积分思想。

若物体位移较大,通常需要与 Overset 结合;若仅靠整体变形网格,网格质量可能迅速恶化。

10. 使用流程

第一步:确定运动类型

  • 预定义还是受力驱动?
  • 刚体还是边界形变?
  • 单一运动区还是多个运动区?
  • 是否存在相对滑动?
  • 最大位移与局部网格尺度之比是多少?

第二步:建立 zone 和运动边界

可使用:

topoSet
setsToZones

或在网格生成阶段直接建立 cellZone、faceZone、pointZone。

第三步:配置 dynamicMeshDict

选择动态网格类、运动求解器、运动函数、扩散系数和运动区域。

第四步:先检查网格运动

在进行流场计算前,可使用:

moveDynamicMesh

或进行短时间空跑,输出多个时刻网格,再逐时刻执行:

checkMesh -time '0:1'

第五步:使用动态求解器

应确认求解器包含网格更新、网格通量、相对通量和压力修正处理。

第六步:控制时间步

除流体 Courant 数外,还应控制网格 Courant 数。物体单步位移不宜跨越过多局部单元。

11. 应用案例一:小幅振动翼型

目标是研究翼型小幅升沉或俯仰产生的非定常升力。

推荐:

  • 翼型近场使用高质量边界层;
  • 远场网格承担主要变形;
  • 使用 displacementLaplacian 或 SBRStress;
  • 一个周期划分足够时间步;
  • 比较升力相位、幅值与实验或文献。

当俯仰角或升沉幅度过大时,应转向 AMI 或 Overset。

12. 应用案例二:移动壁面和膜片

例如膜片泵、小幅变形风道和壁面周期脉动。若边界位移相对于腔体尺寸较小,变形网格通常比 Overset 更守恒、更经济。

13. 对旋转格栅的判断

若格栅绕固定轴连续转动,单纯变形网格通常不是最佳方案,因为网格会不断扭曲。

更合理的选择是:

  • 只求平均影响:MRF 或时变边界条件;
  • 固定圆柱接口:AMI;
  • 多格栅、偏心或复合运动:Overset。

14. 常见故障

14.1 负体积

常见原因包括单步位移过大、网格过粗、运动边界距离固定边界太近、扩散系数不合理以及边界层被压缩至零。

14.2 边界层严重畸变

可扩大运动区域、调整距离扩散、降低时间步、减小层增长率,或改用 AMI/Overset。

14.3 非物理通量

检查求解器是否真正支持动态网格、是否使用相对通量、压力修正是否在网格更新后执行,以及网格 Courant 数是否过大。

15. 适用范围与边界

移动/变形网格最适合:

  • 小到中等位移;
  • 拓扑不变;
  • 希望避免插值接口;
  • 运动区域与固定区域能够通过连续变形连接。

当大位移导致不可接受的网格畸变时,不应继续通过降低松弛因子“硬算”,而应改变网格方法。

参考资料

返回“理论基础 · 网格基础”子栏目

Back to Blog

Related Posts

View All Posts »