· 靳贺伟 · 网格基础 · 17 min read
OpenFOAM v2512 拓扑变化网格:层增删、接口连接与专用动态网格
讲解 OpenFOAM v2512 中拓扑变化网格的基本理论、场映射、层增加与删除、attach/detach、滑动接口、阀门和活塞类应用,以及建模和验证流程。
本文以 OpenCFD 发布的 OpenFOAM v2512 为基准。拓扑变化网格包含较多专用类,不同算例的字典结构差异较大。文中的字典片段用于说明组织方式,实际运行应以 v2512 对应类的源码、运行时帮助和教程为准。
1. 什么是拓扑变化
移动/变形网格只改变网格点坐标,单元、面和点之间的连接关系保持不变。拓扑变化网格则允许计算过程中改变离散网格本身,例如:
- 增加或删除一层单元;
- 把一个接口从断开状态连接起来;
- 把相连区域重新断开;
- 重新配对滑动界面的面;
- 分裂或合并单元;
- 改变单元数量、面数量或邻接关系。
因此,拓扑变化不仅要更新几何量,还必须重建:
owner和neighbour关系;- 边界 patch 面列表;
- cellZone、faceZone 和 pointZone;
- 单元中心、面中心和体积;
- 离散场从旧网格到新网格的映射。
OpenFOAM 的 dynamicFvMesh 抽象框架允许网格发生几何变化、拓扑变化或两者同时发生。
2. 为什么不总是使用变形网格
以往复活塞为例。若活塞向上移动而网格拓扑固定,活塞顶面附近的单元会持续被压缩:
初始: | | | | | |
压缩: | |||||||||||||| |随着间隙减小,单元高度接近零,容易出现:
- 非正交角急剧增大;
- 面权重恶化;
- 单元体积过小;
- 网格 Courant 数过高;
- 最终产生负体积。
若在活塞接近一层网格高度时删除该层,剩余单元可以保持合理纵横比;活塞反向运动时再增加网格层。这就是 layer addition/removal 的基本思想。
拓扑变化网格适合运动规律明确、几何连接变化具有结构性的问题。若运动轨迹任意且难以定义层或接口,重叠网格往往更灵活。
3. 三类典型拓扑操作
3.1 网格层增加与删除
层增删通常依赖一个可识别的 faceZone 或 cellLayer。算法根据局部层厚度与目标厚度判断:
- 层被压缩到下限时删除;
- 间隙增大到上限时增加;
- 新增单元由邻近单元复制或插值场值;
- 删除单元的守恒量映射到保留单元。
可概括为:
运动边界位移
↓
计算目标层厚度
↓
是否低于删除阈值?——是→删除一层
↓否
是否高于增加阈值?——是→增加一层
↓
更新网格和场层增删特别适合:
- 活塞缸;
- 直线阀芯;
- 规则往复压缩腔;
- 沿一条坐标方向伸缩的区域。
3.2 接口连接与断开
Attach/detach 用于两个网格区域在运动过程中改变连接状态。
- attach:将两侧相对应的边界面连接为内部面;
- detach:把内部连接重新拆成两个边界 patch。
典型场景包括阀门闭合、机械接触前后的流道切换,以及某些多区域模型的临时连接。
接口连接不应只按几何距离触发,还要考虑:
- 两侧面是否可配对;
- 面法向是否相反;
- 面积覆盖是否充分;
- 连接后的单元是否有效;
- 何时更新边界条件和通量。
3.3 滑动接口重连
传统 sliding interface 会随着转子转动改变界面面之间的拓扑连接。与 AMI 不同,AMI 通常保持两侧 patch 独立并通过非共形插值传递;拓扑滑移接口则可能显式切割、配对或重构连接。
该方法可用于混合器和旋转机械,但实现和维护成本较高。现代固定轴旋转问题通常优先考虑 cyclicAMI,除非已有经过验证的专用拓扑网格框架。
4. v2512 中的相关类
v2512 仍包含若干面向特定机构的动态拓扑类,例如:
topoChangerFvMesh
movingConeTopoFvMesh
linearValveFvMesh
linearValveLayersFvMesh
mixerFvMesh这些名称反映了其用途:
movingConeTopoFvMesh:移动锥体类问题;linearValveFvMesh:直线阀门运动;linearValveLayersFvMesh:阀门运动与网格层处理;mixerFvMesh:混合器或滑动接口类问题。
需要注意,这些类不是一套统一的“万能拓扑变化字典”。每个类可能要求不同的:
- faceZone 名称;
- cellZone 名称;
- pointZone 名称;
- 运动函数;
- layer 参数;
- attach/detach 接口;
- 阀门或活塞几何参数。
使用前应先运行:
foamDictionary constant/dynamicMeshDict并结合:
foamHelp -entry dynamicFvMesh
foamSearch $FOAM_TUTORIALS dynamicFvMesh查找 v2512 本机安装中的实际示例。
5. 拓扑更新中的场映射
网格改变后,旧网格上的场不能直接逐单元复制,因为单元数量和连接关系已变化。需要建立网格映射:
[ \phi^{new}=\mathcal{M}(\phi^{old}) ]
其中 (\mathcal{M}) 表示从旧网格到新网格的插值或守恒映射。
不同类型变量的要求不同:
5.1 单元中心标量和矢量
如 (p)、(T)、(U)、组分质量分数,可通过体积权重或邻域插值映射。但应保持:
- 压力场平滑;
- 温度和浓度有界;
- 速度不产生非物理跳变。
5.2 面通量
质量通量 phi 是压力—速度耦合的关键。拓扑变化后新增面或删除面,需要重新构造或修正通量,确保离散连续性:
[ \sum_f \phi_f = 0 ]
若只映射 U 而未正确处理 phi,拓扑事件后常出现压力残差爆发。
5.3 守恒标量
对于相分数、组分质量、焓和颗粒浓度,应优先关注积分守恒:
[ Q=\sum_c \phi_c V_c ]
拓扑更新前后的 (Q) 不应无故改变。若物理边界在拓扑事件期间确实做功或有质量交换,则应把真实源项和数值映射误差区分开。
6. 几何守恒律与网格运动通量
移动控制体上的有限体积方程需要满足几何守恒律。对于任意单元:
[ \frac{dV}{dt}=\sum_f \phi_{mesh,f} ]
式中 (\phi_{mesh,f}) 是网格面扫掠体积通量。
拓扑变化时,新旧网格之间没有简单的一一对应关系,几何守恒处理更复杂。若网格体积变化与网格通量不一致,即使流体保持静止,也可能产生虚假速度或压力波动。
因此应在无流动或均匀流场条件下先做“空运动测试”:
- 设定均匀速度或静止场;
- 仅执行一个完整运动周期;
- 检查速度、压力和总质量是否保持;
- 检查每次 layer/attach 事件后的残差峰值。
7. 层增删网格的设计原则
7.1 层厚阈值
增加和删除阈值不应完全相同,否则在临界位置附近可能频繁增删,形成数值抖动。应设置一定滞回区:
删除阈值 < 保持区 < 增加阈值7.2 层方向
层面应尽量与运动方向正交。若运动边界倾斜或曲率变化很大,新增单元可能产生高偏斜。
7.3 面网格一致性
新增层的面拓扑来自既有界面,要求:
- faceZone 连续;
- 面法向方向一致;
- 不存在裂缝、重复面和非流形边;
- 层内单元可形成完整闭合体积。
7.4 最小间隙
拓扑变化可以缓解单元压缩,但不能跨越物理上零厚度的几何奇点。阀门完全关闭时,需要明确采用:
- detach/attach;
- 封闭边界切换;
- 保留有限最小间隙;
- 或专门接触模型。
8. 一个通用建模流程
第一步:确定拓扑事件
先用运动学图明确:
- 哪些边界移动;
- 哪些网格层会增删;
- 哪些接口会连接或断开;
- 事件发生的位移、时间或几何条件。
第二步:生成适合层处理的初始网格
建议:
- 运动方向上保持规则层;
- 避免在 layer 区使用大量随机多面体;
- 将复杂几何变化限制在层区之外;
- 明确 faceZone、cellZone、pointZone。
第三步:设置 dynamicMeshDict
示意结构如下:
dynamicFvMesh linearValveLayersFvMesh;
linearValveLayersFvMeshCoeffs
{
// 以下名称和关键字需按具体 v2512 类核对
valvePatch valve;
pistonPatch piston;
layerZone movingLayerFaces;
minLayerThickness ...;
maxLayerThickness ...;
// 运动规律、轴线及接口设置
}该片段用于展示“选择专用动态网格类 + 对应 Coeffs 子字典”的结构,不应未经核对直接运行。
第四步:定义运动边界条件
移动壁面速度应与网格运动一致。对于无滑移壁面,常用移动壁面速度边界条件或由网格速度自动处理的条件。必须确认:
- 绝对速度还是相对速度;
- 通量是否包含网格运动;
- 运动边界处的压力法向梯度;
- 湍流壁面函数能否在拓扑更新后正确重建。
第五步:逐步测试拓扑事件
不要直接运行完整物理模型。建议顺序:
- 仅网格运动,不求解流动;
- 单次增加层;
- 单次删除层;
- 单次 attach;
- 单次 detach;
- 完整运动周期;
- 加入层流流动;
- 最后加入湍流、传热、组分或多相模型。
9. 时间步选择
拓扑事件通常发生在离散时间点。时间步过大会造成:
- 一次跨过多层厚度;
- 新增/删除单元数量过多;
- 事件时刻与真实运动不一致;
- 场映射变化过强;
- 压力校正难以收敛。
除流动 Courant 数外,应限制每步边界位移:
[ C_{mesh}=\frac{|U_{mesh}|\Delta t}{\Delta x_{layer}} ]
其中 (\Delta x_{layer}) 为层区特征厚度。一般应使运动在若干时间步内逐渐接近阈值,而不是一步跨越多个单元层。
10. 典型应用案例
10.1 内燃机活塞与气门
活塞运动改变燃烧室容积,气门还涉及开启、闭合和狭小间隙。可组合:
- 活塞方向层增删;
- 气门附近局部拓扑处理;
- 接口连接/断开;
- 燃烧、喷雾和传热模型。
该类算例的主要难点是拓扑事件与喷射、点火、湍流和壁面换热同时发生,必须验证质量、能量和组分守恒。
10.2 往复式压缩机
活塞周期运动适合层增删。可研究:
- 容积效率;
- 阀片动态;
- 余隙容积;
- 压力脉动;
- 泄漏与温升。
若阀片为柔性大变形,单纯专用拓扑网格可能不足,需要与变形网格、FSI 或重叠网格组合。
10.3 线性阀门
阀芯沿轴线移动,流通面积随位移变化。规则轴向运动可用 linearValve... 类框架。若阀芯偏心、转动或几何高度复杂,重叠网格更容易实施。
10.4 搅拌器和旋转混合器
历史上可通过 sliding interface 或 mixerFvMesh 处理旋转区。对标准固定轴问题,AMI 通常更直接;拓扑滑移方法更适合既有经过验证的专用模型。
11. 与其他动态网格方法的比较
| 方法 | 是否改变拓扑 | 优势 | 主要限制 |
|---|---|---|---|
| 变形网格 | 否 | 无插值、实现直观 | 大位移导致网格畸变 |
| AMI | 通常否 | 固定轴旋转成熟、界面清晰 | 运动需适配滑移接口 |
| 重叠网格 | 子网格内部通常否 | 复杂大运动灵活 | 插值和守恒复杂 |
| 拓扑变化 | 是 | 规则机构可保持高质量网格 | 设置、映射和调试复杂 |
| 动态加密 | 是 | 自动追踪高梯度 | 不能独立描述固体运动 |
拓扑变化网格不是“比重叠网格更高级”,而是适用于不同运动结构。
12. 常见问题
12.1 增加层后出现极差单元
检查 layer faceZone 是否连续、运动方向是否与层法向一致、相邻面尺寸是否突变,以及阈值是否允许一次增加过厚单元。
12.2 拓扑事件后压力发散
检查:
phi是否被正确重构;- PIMPLE/PISO 是否有足够校正;
- 新单元场值是否合理;
- 时间步是否过大;
- 边界条件是否在 patch 变化后仍有效。
12.3 总质量或组分突然跳变
记录拓扑事件前后:
[ M=\sum_c \rho_c V_c, \qquad M_i=\sum_c \rho_c Y_{i,c}V_c ]
若没有真实边界交换,跳变主要来自场映射、通量重构或有界性修正。
12.4 attach 后接口泄漏
检查面配对、面法向、覆盖率、重复面和连接后的内部面方向。可用 checkMesh -allTopology 检查非法内部面和非流形连接。
13. 验证清单
- 初始网格拓扑和几何均通过
checkMesh; - faceZone/cellZone/pointZone 名称与字典一致;
- 每个增加、删除、连接、断开事件都单独测试;
- 拓扑事件前后无负体积和严重偏斜;
- 网格运动通量满足几何守恒;
-
phi在更新后得到正确修正; - 质量、能量、相分数和组分积分量连续;
- 完整周期结束后网格和场不存在累积漂移;
- 完成时间步和层厚阈值敏感性分析;
- 与实验、理论容积变化或简化模型进行对比。