最近在 Fluent 中处理两个大小不匹配的面时,遇到了一个比较容易误判的问题:明明两个 interface 面面积明显不同,但是创建 mesh interface 后,non-overlapping 区域却什么都没有,面积也是 0。
模型中有两个流体区域需要通过 mesh interface 连接。两个连接面大小并不一致,属于典型的“小面接大面”情况。
创建 interface 后,Fluent 自动生成了类似下面这些面:
代码块
PlainText
自动换行
复制代码
1234
interface_zone1
interface_zone1-non-overlapping
interface_zone2
interface_zone2-non-overlapping
复制成功
按照直觉,如果一个小面和一个大面建立 interface,那么大面中没有被小面覆盖的部分,应该出现在:
代码块
PlainText
自动换行
复制代码
1
interface_zone2-non-overlapping
复制成功
但是实际情况是,两个 non-overlapping 都显示为空,面积也是 0。
对几个 interface 面计算面积后,结果大致如下:
代码块
PlainText
自动换行
复制代码
1234
interface_zone1 5.0000005e-05 m^2
interface_zone1-non-overlapping 0
interface_zone2 2.6400003e-04 m^2
interface_zone2-non-overlapping 0
复制成功
也就是说:
代码块
PlainText
自动换行
复制代码
12
interface_zone1 ≈ 50 mm^2
interface_zone2 ≈ 264 mm^2
复制成功
两者面积相差约 5.28 倍。
这说明 interface_zone1 和 interface_zone2 明显不是完全相同大小的两个面。 如果它们是大小不匹配的面,那么理论上应该存在 non-overlapping 区域。
所以这里的关键疑问是:
为什么两个面大小明显不同,但是 non-overlapping 还是空的?
在显示或创建相关 surface 时,Fluent 可能会输出类似提示:
代码块
PlainText
自动换行
复制代码
12
Note: zone-surface: cannot create surface from sliding interface zone.
Creating empty surface.
复制成功
意思是:
代码块
PlainText
自动换行
复制代码
1
不能从 sliding interface zone 创建普通 surface,因此创建了一个空 surface。
复制成功
这里的 sliding interface zone 并不一定表示模型真的在运动。 在 Fluent 内部,非共形 mesh interface 有时会以类似 sliding interface 的特殊方式处理。
因此,这个提示说明:
当前选择的 interface zone 是一种特殊的界面区域,Fluent 不能直接把它转换成普通 surface 来显示或计算,所以生成了空 surface。
这也解释了为什么有时 non-overlapping 明明在物理直觉上应该存在,但在显示时却为空。
后来发现,问题与下面这个 TUI 命令有关:
代码块
scheme
自动换行
复制代码
1
/define/mesh-interfaces/one-to-one-pairing?
复制成功
当这个选项输入:
代码块
PlainText
自动换行
复制代码
1
no
复制成功
后,再创建 interface,两个面大小不匹配,non-overlapping 也不显示。
但是当这个选项输入:
代码块
PlainText
自动换行
复制代码
1
yes
复制成功
后,再创建 interface,两个不匹配面中多出来的部分就可以正确显示为 non-overlapping。
这说明问题并不是几何本身错误,而是 Fluent 创建 mesh interface 时采用的配对方式不同。
当:
代码块
PlainText
自动换行
复制代码
1
one-to-one-pairing = no
复制成功
时,Fluent 把所选的两个 interface zone 作为整体进行界面配对。
也就是说,它只是建立两个 zone 之间的整体插值关系,而没有显式地把大面切分成:
代码块
PlainText
自动换行
复制代码
123
重叠区域 overlapping
+
非重叠区域 non-overlapping
复制成功
因此,即使两个面面积不同,Fluent 也不会生成可显示的 non-overlapping surface。
这时看到:
代码块
PlainText
自动换行
复制代码
12
interface_zone1-non-overlapping = 0
interface_zone2-non-overlapping = 0
复制成功
并不一定说明两个面真的完全重叠。
更准确地说,它说明:
在当前配对方式下,Fluent 没有把非重叠区域作为一个单独可显示的 surface 显式拆分出来。
需要特别注意的是,one-to-one-pairing = no 并不等于计算错误。 在这种方式下,Fluent 仍然会按照 mesh interface 的插值关系进行变量和通量传递。只要 interface 定义合理、边界条件正确、残差和通量监控正常,计算结果仍然可以保持整体守恒。
因此,no 不是“错误选项”,而是一种不同的 interface 配对和处理方式。
当:
代码块
PlainText
自动换行
复制代码
1
one-to-one-pairing = yes
复制成功
时,Fluent 会采用更严格的一对一配对方式,对两个 interface zone 的局部重叠关系进行判断。
对于“小面接大面”的情况,它更容易识别出:
代码块
PlainText
自动换行
复制代码
12
小面对应的大面局部区域 = overlapping
大面多出来的区域 = non-overlapping
复制成功
因此,重新创建 interface 后,大面多出来的部分就能正确出现在:
代码块
PlainText
自动换行
复制代码
1
interface_zone2-non-overlapping
复制成功
这才符合对大小不匹配 interface 的物理直觉。
但是需要强调:
yes 更方便显示和检查 non-overlapping 区域,并不意味着 no 的计算一定不正确。
两者的区别更多体现在界面配对方式、非重叠区域的显式识别,以及后续边界区域的可视化检查上。
开启:
代码块
PlainText
自动换行
复制代码
1
one-to-one-pairing = yes
复制成功
后,Fluent 在创建 interface 时还可能输出类似下面的匹配关系信息:
代码块
PlainText
自动换行
复制代码
1234
List of Mesh Interface Area Percentage
Name ID Area Area Percentage
intf:01:interface_zone2::interface_zone1 22 5.00000000e-05 18.94% / 100.00%
复制成功
这个输出直接反映了两个 interface 面之间的有效匹配关系。
其中:
代码块
PlainText
自动换行
复制代码
1
Area = 5.00000000e-05 m²
复制成功
表示两个面之间真正参与 interface 配对的重叠面积。
而:
代码块
PlainText
自动换行
复制代码
1
18.94% / 100.00%
复制成功
可以理解为:
代码块
PlainText
自动换行
复制代码
12
interface_zone2 中有 18.94% 的面积参与了匹配;
interface_zone1 中有 100.00% 的面积参与了匹配。
复制成功
结合前面的面积计算:
代码块
PlainText
自动换行
复制代码
12
interface_zone1 = 5.0000005e-05 m²
interface_zone2 = 2.6400003e-04 m²
复制成功
可以看出,小面 interface_zone1 基本全部参与了匹配,而大面 interface_zone2 只有约 18.94% 的区域与小面发生了匹配。
也就是说,这个结果正好对应“小面接大面”的几何关系:
代码块
PlainText
自动换行
复制代码
123
小面全部匹配;
大面只有局部区域匹配;
大面剩余部分为 non-overlapping 区域。
复制成功
这也进一步说明,one-to-one-pairing = yes 时,Fluent 会更清楚地给出两个 interface zone 的局部匹配关系。 因此,在处理大小不匹配的 interface 时,这个面积百分比可以作为判断 interface 是否按预期建立的重要依据。
需要注意的是,这个输出主要用于帮助检查和理解 interface 的几何匹配关系。 它并不意味着 one-to-one-pairing = no 就一定是错误的,也不意味着 no 情况下计算一定不守恒。 区别在于,yes 会把匹配关系和非重叠区域显示得更加明确,便于用户检查。
这次问题的核心结论是:
对于大小不匹配的 Fluent mesh interface,如果 non-overlapping 显示为空,不一定代表两个面完全重叠。
尤其是当两个 interface 面面积明显不一致时,可以重点检查:
代码块
PlainText
自动换行
复制代码
1
/define/mesh-interfaces/one-to-one-pairing?
复制成功
如果该选项为:
代码块
PlainText
自动换行
复制代码
1
no
复制成功
Fluent 可能不会显式生成可显示的 non-overlapping 区域,但这并不意味着计算一定不守恒。
如果设置为:
代码块
PlainText
自动换行
复制代码
1
yes
复制成功
再重新创建 interface,Fluent 会更严格地识别重叠区和非重叠区,因此 non-overlapping 区域更容易被正确显示出来。
总结:
代码块
PlainText
自动换行
复制代码
12
大小不匹配 interface 中,one-to-one-pairing = no 并不一定是错的,计算仍然可以保持守恒;
one-to-one-pairing = yes 更适合显式识别和检查 non-overlapping 区域。
复制成功
因此,判断 interface 是否合理,不能只看 non-overlapping 是否为空,而应该结合面的位置、面积、边界条件、通量守恒和计算收敛性一起判断。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删