OpenFOAM empty 边界条件的含义
OpenFOAM如果一个内部的边界设置为empty,意味着什么?
在 OpenFOAM 中,如果把一个内部边界(Internal Boundary) 设置为 empty 类型,这通常是一个非常特殊甚至危险的操作,除非你非常清楚自己在做一个伪 2D 模拟。
以下是它的具体含义和后果:
1. 核心含义:维度的“降维打击”
empty 边界条件的唯一合法用途是指示 OpenFOAM 进行 2D 模拟。
它告诉求解器:“沿着这个面的法线方向,没有物理变化,也不需要求解方程。请忽略这个维度的存在。”
- 标准用法:通常只用于网格的
Front和Back面(前后板),且这两个面必须是平行的。这会让三维网格在计算上变成二维切片。
2. 如果用在“内部”意味着什么?
假设你在流场中间有一个 Patch(比如一个挡板面或者内嵌面),你把它设为了 empty,后果如下:
A. 物理上:绝对的隔离与滑移 (Perfect Slip & Insulation)
- 无通量 (Zero Flux):流体无法穿过这个面。质量通量为 0。
- 零梯度 (Zero Gradient):标量(如温度、压力)在这个面上没有梯度。
- 不计算壁面函数:与
wall不同,它不会计算粘性底层,不会强制速度为 0(No-slip)。流体会沿着这个面无摩擦地滑过(类似于symmetry,但比 symmetry 更“空”)。
B. 几何限制:必须平行
empty 边界有一个硬性几何要求:所有被标记为 empty 的面,其法向量必须共线且反向(即面必须平行)。
- 如果你在流场内部随意找个曲面设为
empty,OpenFOAM 可能会报错,提示这些面不平行,无法做 2D 近似。
C. 致命错误:维度的错乱
如果这个内部面是阻挡流动的(垂直于流向),而你设为 empty:
- 求解器会试图忽略垂直于这个面的维度。
- 但流体又正对着它冲过来。
- 结果:计算发散,或者得到完全错误的物理场。因为你在试图让流体在一个“不存在的维度”上停下来。
3. 你可能想表达的意思(常见误区)
根据你之前的上下文(处理 cfMesh 的内部面、缝合网格),你把内部面设为 empty 可能是为了以下几种目的,但这样做通常是错的:
| 你的目的 | 正确的做法 | 为什么不能用 empty |
|---|---|---|
| 我想让流体穿透这个面(让面消失) | stitchMesh 或 mergeBaffles |
empty 会阻断流动,流体穿不过去。 |
| 我想把它当做一个实体壁面(挡板) | type wall |
empty 不包含粘性阻力,流速在壁面处不会减为 0。 |
| 我想做 2D 模拟,这是侧面 | type empty |
这种情况下是对的,但它必须是网格的最外层边界(前后板)。 |
| 我想把它当做一个对称面 | type symmetry |
empty 强制降维,symmetry 允许 3D 效应但镜像对称。 |
4. 总结与建议
不要把位于流场中间(会被流体包围或冲刷)的面设置为 empty。
- 如果那个面是多余的(比如 cfMesh 生成的伪面),你应该删掉它(变成内部面
internalFace),方法是用stitchMesh或createBaffles -merge。 - 如果那个面是真实的挡板,你应该设为
wall。 - 如果那个面是2D 模拟的前后盖板,它是对的,但它不应该被称为“内部”边界,它应该是整个计算域的边界。
自检方法:
如果在 ParaView 里看,流线在这个面附近突然断了,或者速度场看起来很怪(没有边界层),说明 empty 用错了。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
