OpenFOAM如果一个内部的边界设置为empty,意味着什么?

在 OpenFOAM 中,如果把一个内部边界(Internal Boundary) 设置为 empty 类型,这通常是一个非常特殊甚至危险的操作,除非你非常清楚自己在做一个伪 2D 模拟。

以下是它的具体含义和后果:

1. 核心含义:维度的“降维打击”

empty 边界条件的唯一合法用途是指示 OpenFOAM 进行 2D 模拟
它告诉求解器:“沿着这个面的法线方向,没有物理变化,也不需要求解方程。请忽略这个维度的存在。”

  • 标准用法:通常只用于网格的 FrontBack 面(前后板),且这两个面必须是平行的。这会让三维网格在计算上变成二维切片。

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
我想让流体穿透这个面(让面消失) stitchMeshmergeBaffles empty 会阻断流动,流体穿不过去。
我想把它当做一个实体壁面(挡板) type wall empty 不包含粘性阻力,流速在壁面处不会减为 0。
我想做 2D 模拟,这是侧面 type empty 这种情况下是对的,但它必须是网格的最外层边界(前后板)。
我想把它当做一个对称面 type symmetry empty 强制降维,symmetry 允许 3D 效应但镜像对称。

4. 总结与建议

不要把位于流场中间(会被流体包围或冲刷)的面设置为 empty

  • 如果那个面是多余的(比如 cfMesh 生成的伪面),你应该删掉它(变成内部面 internalFace),方法是用 stitchMeshcreateBaffles -merge
  • 如果那个面是真实的挡板,你应该设为 wall
  • 如果那个面是2D 模拟的前后盖板,它是对的,但它不应该被称为“内部”边界,它应该是整个计算域的边界。

自检方法:
如果在 ParaView 里看,流线在这个面附近突然断了,或者速度场看起来很怪(没有边界层),说明 empty 用错了。