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 用错了。