多相流仿真涉及两种或多种不相溶液体的界面追踪,是CFD中技术难度较高的方向。结合项目经验,聊聊多相流仿真的模型选择、参数设置与结果分析。

1. 多相流仿真的应用
多相流仿真主要处理两种场景:一种是互不溶解的流体之间存在清晰界面的问题(如水流中的气泡、油水分离);另一种是流体中有悬浮颗粒或者液滴,但不需要追踪每个颗粒的轨迹(如泥浆流、纸浆流)。前者的核心是”界面捕捉”,后者的核心是”多流体模型”。
我接触多相流仿真是在一个船舶与海洋工程的项目里——需要模拟波浪对船体的冲击载荷。这个问题里,空气和水的界面随时间剧烈变化,用传统的单相流模型完全处理不了,必须用VOF这类界面捕捉方法。那是我第一次真正意识到:有些流体问题,单靠”把 Navier-Stokes 方程解出来”是不够的,还需要专门处理界面的数值方法。
2. VOF vs Level Set:两种思路
VOF(Volume of Fluid)方法的核心思想是:用一个体积分数函数来表示每个网格里各相的体积占比,界面通过体积分数的不连续界面来捕捉。VOF的优点是质量守恒性好(体积分数求和恒为1),缺点是在界面重构时容易出现数值耗散,界面会慢慢”变模糊”。
Level Set方法则用了一个有符号距离函数来表示界面——界面是距离函数的零等高线。这个方法界面追踪精度高,界面形状保持得好,但质量守恒性不如VOF,长时间模拟会出现”质量凭空消失或者增加”的问题。
现在的商业软件(包括Fluent)一般用的是VOF和Level Set的混合方法(如Geo-Reconstruct或者Coupled Level Set-VOF),兼顾了质量守恒和界面精度。我的建议是:如果界面形状的准确性是核心关注点(如液滴变形、气泡破裂),优先用混合方法;如果质量守恒更重要(如需要精确计算两相的流量分配),用标准VOF。
3. Fluent中的多相流配置
Fluent里设置多相流模型,路径是:Models → Multiphase → Phase。需要指定:相的数量(如气-液两相就是2)、主相(Primary Phase)和次相(Secondary Phase)、相间相互作用(如表面张力、传质)。
表面张力的设置经常被忽略,但它在小尺度多相流问题里非常重要。我做微流控芯片里的液滴生成仿真时,一开始没加表面张力,结果两个液相完全混在一起,没有形成离散的液滴。加上表面张力并设好接触角之后,液滴生成的过程才正确显示出来。这个参数的单位是N/m,水的表面张力大约是0.072 N/m(20°C),这个数值可以作为参考起点。
4. 网格与时间步长:多相流更挑剔
多相流仿真对网格和时间步长的要求比单相流高得多。原因是:界面需要在网格上被解析出来,如果网格太粗,一个网格里包含了界面两侧的不同流体,界面就被”抹平”了,数值结果自然不准。
我的经验值:界面附近的网格尺寸应该小于界面曲率的局部半径。如果没法提前知道曲率半径,可以用一个经验规则:网格尺寸不超过特征长度的1/20.时间步长的选择则取决于界面的移动速度——CFL数(Courant数)控制在0.5以内比较安全。我用Fluent做VOF计算时,一般用自适应时间步长(Adaptive Time Stepping),让软件根据当前CFL数自动调整时间步长,比手动设固定步长要省心。
5. 结果分析:如何判断界面捕捉质量
多相流仿真的结果里,最关键的是界面的形状和位置。判断界面捕捉质量,我一般用两个方法:一是看界面的”厚度”——VOF方法中,界面理论上应该是陡峭的(体积分数从0到1的过渡发生在一到两个网格内),如果界面被”抹平”到了五六个网格的宽度,说明网格不够密或者界面重构方法不够好;二是做质量守恒检查,计算域内各相的总体积是否随时间保持恒定(或者有物理意义的增减)。
一个实际案例:我做一个水箱晃动的多相流仿真,初始时刻水体积分数是合理的,但晃动了一段时间之后,发现水的总体积减少了约3%。排查后发现是边界条件设置的问题——墙壁边界上的体积分数梯度太大,导致数值泄漏。把边界层网格加密之后,质量守恒误差降到了0.5%以内。