· 靳贺伟 · 网格基础 · 19 min read
OpenFOAM v2512 重叠网格详解:供体—受体插值、建模流程与守恒控制
系统讲解 OpenFOAM v2512 Overset/Chimera 重叠网格的理论结构、单元分类、zoneID、插值模板、动态运动设置、质量守恒、网格设计和典型应用。
本文以 OpenCFD 发布的 OpenFOAM v2512 为基准。重叠网格在不同 OpenFOAM 分支中的类名、求解器和字典写法可能不同,不能直接混用。
1. 重叠网格解决什么问题
传统移动网格要求整个计算域保持一套连续拓扑。当物体发生大幅平移、复杂旋转、偏心运动或六自由度运动时,背景网格会被持续拉伸,最终出现高非正交、严重偏斜甚至负体积。
重叠网格的思路是把计算域拆成若干彼此独立的子网格:
- 背景网格描述远场或主体设备;
- 局部网格包围运动物体并随其一起运动;
- 多套网格在空间中留出一定体积重叠;
- 在重叠区内通过供体—受体插值交换流场变量。
因此,运动网格可以作为刚体移动,不必把位移传递到整个背景域。该方法也称 Overset Mesh 或 Chimera Mesh。
典型结构可表示为:
背景网格 zone 0
┌────────────────────────────────┐
│ │
│ 局部运动网格 zone 1 │
│ ┌──────────────┐ │
│ │ 运动物体 │ │
│ │ 及近场网格 │ │
│ └──────────────┘ │
│ │
└────────────────────────────────┘重叠网格的优势不是“精度天然更高”,而是允许复杂运动,同时维持各子网格自身的几何质量。代价是引入了额外插值、孔洞切除、供体搜索以及守恒修正。
2. 四类单元与计算拓扑
重叠网格算法的核心不是简单地把两套网格叠在一起,而是为每个单元确定计算角色。
2.1 正常计算单元 calculated cell
这类单元按普通有限体积方法离散质量、动量、能量和组分方程,未知量由线性方程组求解。
2.2 供体单元 donor cell
供体单元位于另一套网格中,为受体单元提供插值数据。一个受体单元可以对应一个或多个供体单元。
2.3 受体单元 acceptor/interpolated cell
受体单元位于网格交接带,其场值由供体单元插值得到。一般写成:
[ \phi_A=\sum_{i=1}^{N_D}w_i\phi_{D,i}, \qquad \sum_{i=1}^{N_D}w_i=1 ]
式中,(\phi_A) 为受体单元变量,(\phi_{D,i}) 为第 (i) 个供体单元变量,(w_i) 为插值权重。
2.4 孔洞单元 hole cell
被实体或更高优先级网格覆盖的单元需要从离散系统中屏蔽,否则同一物理空间会被重复求解。它们被标记为 hole cells。
由此可见,重叠网格在每次连接关系更新时需要完成:
- 判断实体遮挡和孔洞区域;
- 选择 fringe/acceptor 单元;
- 搜索可用供体单元;
- 建立插值模板和权重;
- 将插值约束加入有限体积方程。
动态运动时,这些关系可能随每个时间步更新。
3. v2512 中的主要类和求解器
v2512 中与重叠网格直接相关的动态网格类包括:
staticOversetFvMesh
dynamicOversetFvMesh其中:
staticOversetFvMesh:子网格位置不随时间变化,但仍通过重叠插值连接;dynamicOversetFvMesh:允许一个或多个网格区域运动,并在运动后更新重叠连接。
dynamicOversetFvMesh 继承多运动求解器框架,可为不同 cellZone 定义不同运动。
常见重叠网格求解器包括:
overSimpleFoam 稳态不可压缩
overPimpleDyMFoam 瞬态不可压缩动态网格
overRhoSimpleFoam 稳态可压缩
overRhoPimpleDyMFoam 瞬态可压缩动态网格
overInterDyMFoam VOF 两相流动态网格求解器是否满足具体物理需求仍需核查。例如颗粒追踪、组分输运、燃烧和自定义源项不一定在所有 over... 求解器中完整实现。
4. 建立重叠网格算例的总体流程
一个可靠流程通常包括:
分别生成背景网格和局部网格
↓
合并网格并保留 cellZone/patch
↓
创建连续 zoneID 场
↓
设置 overset patch
↓
定义局部网格运动
↓
设置插值方法和线性求解器
↓
检查孔洞、供体、受体和覆盖关系
↓
先做低速/短时测试
↓
进行守恒、时间步和网格独立性验证4.1 分别生成子网格
背景域和局部运动域可以分别用 blockMesh、snappyHexMesh、Gmsh、Fluent 等生成。重点不是生成工具,而是:
- 每套子网格自身必须封闭、合法;
- 局部网格外边界应构成完整 overset 接口;
- 运动物体壁面位于局部网格内部;
- 重叠区域要有足够宽度;
- 接口应避开叶片近壁层、射流出口、火焰面、激波和相界面等强梯度区。
多套网格通常可通过 mergeMeshes 合并到同一算例中,再用 topoSet、setSet 或网格生成阶段的 zone 信息建立 cellZone。
4.2 建立 zoneID
重叠连接需要 0/zoneID,其类型是 volScalarField,不是 cellZone 本身。编号从 0 开始并连续:
背景网格 zoneID = 0
第一个局部网格 zoneID = 1
第二个局部网格 zoneID = 2示意文件:
FoamFile
{
format ascii;
class volScalarField;
object zoneID;
}
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet { type zeroGradient; }
outlet { type zeroGradient; }
walls { type zeroGradient; }
oversetPatch{ type zeroGradient; }
}实际操作中需要将局部 cellZone 对应单元赋值为 1、2 等。可使用 setFields 或专门脚本完成。
4.3 设置 overset patch
局部子网格外边界在 constant/polyMesh/boundary 中应为:
oversetPatch
{
type overset;
nFaces ...;
startFace ...;
}在 0/U、0/p、0/k、0/omega 等场文件中,可使用:
oversetPatch
{
type overset;
}也可在场文件结尾引入约束类型:
#includeEtc "caseDicts/setConstraintTypes"这样可减少遗漏某个场的风险。新增能量、组分或湍流变量时,要确认该变量也具有正确的 overset 边界条件。
5. dynamicMeshDict:局部刚体旋转示例
固定轴旋转局部网格的基本结构可写为:
dynamicFvMesh dynamicOversetFvMesh;
motionSolverLibs (fvMotionSolvers);
solver solidBody;
solidBodyCoeffs
{
cellZone rotorZone;
solidBodyMotionFunction rotatingMotion;
rotatingMotionCoeffs
{
origin (0 0 0);
axis (0 0 1);
omega 62.831853; // rad/s,约 600 r/min
}
}对于多个独立运动体,可使用多运动求解器结构,分别指定 cellZone 和运动函数。需要注意:
axis应为旋转轴方向,而不是角速度矢量本身;omega单位是 rad/s;- cellZone 必须只包含随该运动函数移动的网格;
- 物体壁面与局部网格应保持一致运动;
- 初始时刻所有子网格不得发生非法实体穿透。
六自由度问题可采用 sixDoFRigidBodyMotion,同时定义质量、惯量、约束、阻尼和外力。此时必须特别关注时间步、碰撞和极端姿态下的供体覆盖。
6. 插值方法与离散矩阵
在 system/fvSchemes 中设置:
oversetInterpolation
{
method inverseDistance;
}反距离插值的基本思想是距离越近,权重越大:
[ w_i=\frac{d_i^{-p}}{\sum_j d_j^{-p}} ]
其中 (p) 为距离权重指数。v2512 还包含其他 cell-to-cell stencil 或权重实现,例如体积权重和最小二乘类方法,但可用性和适用性应以具体版本源码及教程为准。
重叠插值约束会改变线性方程矩阵结构,通常使其不再对称。因此不应机械照搬普通不可压缩算例的对称求解器。可从以下设置起步:
p
{
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.01;
}
U
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-7;
relTol 0.05;
}这只是起始模板,最终应根据条件数、残差衰减和守恒误差调整。
7. 质量守恒与通量修正
普通变量插值并不自动保证插值带两侧的面通量完全守恒。可能出现:
- 入口与出口质量流量长期不平衡;
- 局部压力振荡;
- 对流标量产生虚假源汇;
- VOF 相分数或组分总量缓慢漂移。
在 PIMPLE 设置中可启用:
PIMPLE
{
nOuterCorrectors 2;
nCorrectors 2;
nNonOrthogonalCorrectors 0;
oversetAdjustPhi true;
}某些 overset 场边界还支持 fluxCorrection。但通量修正不能替代独立检查。至少应计算:
[ \varepsilon_m= \frac{|\dot m_{in}-\dot m_{out}|} {\max(|\dot m_{in}|,\epsilon)} ]
并监控:
- 全域连续性误差;
- 每个子域净通量;
- 插值带附近局部通量;
- 标量和能量总量;
- 长时间积分后的累积漂移。
对于多相流和反应流,守恒要求比单相等温流更严格。一个速度场看起来连续,不代表相质量、组分质量和焓也足够守恒。
8. 壁面距离和湍流模型
常规 meshWave 壁面距离算法不能自然穿过重叠插值关系。若壁面函数或 RANS 模型依赖准确壁面距离,可在 fvSchemes 或相关字典中使用连续型方法,例如:
wallDist
{
method Poisson;
}或:
wallDist
{
method advectionDiffusion;
}需要检查:
- 局部运动网格中壁面附近的 (y^+);
- overset 区域附近的壁面距离是否跳变;
nut、omega、epsilon是否出现异常条带;- 运动后近壁层是否保持足够分辨率。
9. 重叠区网格设计准则
9.1 重叠宽度
重叠区不能只有一层单元。运动过程中受体单元需要在另一套网格中找到稳定供体。工程上应留出多层完整单元,并在整个运动轨迹内检查最小覆盖。
9.2 网格尺度匹配
供体和受体网格尺寸相差过大时,小尺度梯度会在插值中丢失。建议使插值带两侧的特征尺寸处于同一数量级,避免突然由极细网格跳到极粗网格。
9.3 避开强梯度区
重叠接口宜放在流场相对平缓区域,尽量远离:
- 固体近壁边界层;
- 叶尖涡核心;
- 喷口剪切层起始位置;
- 火焰面和点火区;
- 激波;
- VOF 自由界面;
- 高浓度颗粒或污染物源。
9.4 全运动包络检查
只检查初始位置是不够的。应在代表性姿态或完整运动周期中输出网格,检查:
- donor 缺失;
- hole 泄漏;
- acceptor 层突然跳变;
- 局部网格穿出背景域;
- 实体表面与孔洞边界距离过小。
10. 时间步和并行计算
动态重叠计算除了流动 Courant 数,还受到网格运动约束。局部网格在一个时间步内移动过多,供体模板会发生剧烈变化,导致残差和载荷振荡。
旋转问题可控制每步转角:
[ \Delta \theta = \omega\Delta t ]
叶片通过问题常要求每个特征角度划分足够多时间步。应通过时间步独立性验证,而不是只满足 maxCo。
并行计算时,供体可能位于其他处理器,增加搜索和通信。分区策略应避免把每个小型运动网格切得过碎,并检查:
- 各处理器负载;
- 重叠连接重建时间;
- 并行结果与串行或少核结果的一致性;
- 运动后是否发生供体搜索失败。
11. 后处理与诊断
推荐输出或检查:
- cell type:calculated/interpolated/hole;
zoneID;- 网格速度;
- 插值权重和供体数量;
- 质量流量与连续性误差;
- 受力和力矩的周期稳定性;
- 重叠区两侧变量剖面。
验证时可选择一条穿过重叠带的采样线,比较 (U)、(p)、温度或组分是否出现非物理跳变。还应把重叠接口位置移动一定距离,若主要结论随接口位置显著变化,说明插值误差尚未受控。
12. 典型应用案例
12.1 多旋翼和螺旋桨
每个旋翼建立独立局部网格,可定义不同转速、转向和相位。背景域不随旋翼运动。适合旋翼间干扰、旋翼—机身耦合和倾转机构。
12.2 船舶与浮体六自由度运动
船体近场高质量网格随船体平移和转动,背景域描述自由液面和远场。优点是大幅姿态变化不会拉坏背景网格;难点是 VOF 界面穿过重叠区时的相分数扩散与守恒。
12.3 阀门和运动构件
当阀芯运动轨迹复杂、间隙几何难以用层增删处理时,可用局部重叠网格。若阀门最终形成极小间隙,仍需检查供体空间是否足够,重叠网格不能自动解决零间隙接触。
12.4 车辆超车与相对运动
车辆各自使用独立局部网格,背景域保持固定,可模拟横向和纵向相对运动以及瞬态气动力变化。
12.5 旋转格栅和动态送风
多个格栅可分别定义旋转相位和转速,解析射流周期性扫掠。若格栅只绕固定轴旋转,AMI 往往更经济;若存在摆动、偏心或多个运动自由度,重叠网格更灵活。
13. 常见失败及其原因
13.1 找不到 donor
原因通常是:
- 重叠区太薄;
- 局部网格运动超出背景网格;
- zoneID 错误;
- patch 或 cellZone 设置错误;
- 网格尺度差异过大。
13.2 压力残差周期性爆发
可能原因包括:
- 每步运动过大;
- 供体模板频繁跳变;
- 线性求解器不适合非对称矩阵;
- 重叠区位于强压力梯度区;
- 通量修正不足。
13.3 质量不守恒
应依次检查:
- 边界条件和通量定义;
oversetAdjustPhi;- 插值带网格匹配;
- 时间步;
- PIMPLE 外校正次数;
- 标量方程是否也正确应用 overset 约束。
13.4 近壁湍流量异常
检查壁面距离算法、overset 区位置、近壁网格是否随物体完整运动,以及湍流场边界条件。
14. 与 AMI、变形网格的选择
| 问题特征 | 优先方法 |
|---|---|
| 固定轴、规则圆柱接口、连续旋转 | AMI |
| 小幅边界位移且网格不畸变 | 变形网格 |
| 大幅平移、摆动、偏心或六自由度 | 重叠网格 |
| 规则活塞运动、可通过层增删保持网格 | 拓扑变化网格 |
| 仅需时间平均旋转影响 | MRF |
重叠网格应在几何运动确实需要时使用,而不是作为所有旋转问题的默认方法。
15. 最小验证清单
在正式计算前至少确认:
- 所有子网格通过
checkMesh; -
zoneID从 0 连续编号; - overset patch 和所有场边界条件完整;
- 全运动包络内均可找到供体;
- 插值区避开主要高梯度区;
- 使用适合非对称矩阵的求解器;
- 壁面距离算法适用于重叠连接;
- 已启用并验证必要的通量修正;
- 入口/出口质量误差可接受;
- 完成时间步、网格和接口位置敏感性分析。