界面追踪:Level Set 与 VOF对比,还有CLSVOF(complied level set and VOF)对比

界面追踪:Level Set 与 VOF

积鼎多相流在线

积鼎多相流在线

已关注

三里一峰 等 59 人赞同了该文章

对于两相流模拟,模型主要分为两大类:高相分数模型和界面捕捉类模型。当我们关注水中的含气量(气泡界面及气泡形状可忽略),则采用高相分数模型,此模型适用于气泡特别多的流动问题。对于有明确边界的流体-流体问题,基本上就是看如何捕捉边界面。常用的界面捕捉模型包括LS(Level Set)方法和VOF(Volume of Fluid)方法。

多相流功能的CFD软件,首先就是针对这种有边界面的问题。目前主流商业CFD软件大多采用VOF方法,实云流体仿真软件采用Level Set 方法进行界面流仿真。

1 Level Set 方法

Level Set方法是基于空间曲面的隐函数表达。

关于Level Set 方法,可参考以下文章:

基于Level Set方法的液体燃料雾化DNS模拟​mp.weixin.qq.com/s?__biz=MzU2NTEzODY4Mg==&mid=2247487509&idx=1&sn=1ed41c49547216855b139f0706af32e7&chksm=fc411580cb369c96790b5b2f8e5abccc69ccfa66b4932d4fc69a0578f75bbcb09b2fef116136&scene=21#wechat_redirect​编辑

在LS方法中,每一个时间步都要重新初始化LS方程,在时刻 tn 求得的LS函数与控制方程一起求解得到下一时刻的LS函数,这些初始化的过程中总伴随着界面位置的移动,会造成质量损失,导致质量不守恒。而改善初始化步骤来矫正质量守恒又会增加计算时间,提升计算成本。同时,因为LS方法采用的是光滑的距离函数来捕捉相界面,各个物理量可以在界面上光滑连续地过渡,且相界面的捕捉效果好。

2 VOF方法

在VOF(Volume of Fluid)方法中,用来划分两相界面的函数是体积分数α,表示的是单个网格内的液体体积与这个网格总体积的比值。

若求出整个网格相分数,如图1(a)来构造界面,会发现体积分数α在空间上是一个阶梯函数,在空间上是不连续的,从而重构出来的相界面,如图1(b)是间断的,两个相邻网格的界面是不连续的,且物理量在通过界面时也是不连续的,这个现象称为寄生流动(parasitic current),目前VOF方法的主要工作就是缓解数值方法造成的寄生流动现象。

图1 相分数空间分布(a)及其界面重构(b)

与LS方法类似,根据相分数可以得到界面上的单位法向量和曲率以及计算域中的密度和粘度。

为了解决物理量在界面两端不连续的问题,引入连续表面力模型(Continuum Surface Force),通过以下公式将界面内的压力表示为压力的连续函数。

式中c是界面处的位置函数(图2),其表示为:

图2 CSF模型下c位置函数(左)及连续压力函数(右)

由以上公式可以推出曲面微元上的表面张力。

此外,在OpenFOAM中,为了求解动量守恒方程中的压力项和体积力项,定义prgh,如下:

其中

为网格位置矢量,对该公式求其梯度得到:

该公式可以直接带入动量守恒方程中进行计算。

在OpenFOAM中,使用VOF方法后在控制方程中添加了一个求解α的相方程:

为了界面的尖锐,OpenFOAM采用Waller提出的方法,在相方程中添加人工对流项,从而保证界面的清晰。

其中:

c为压缩因子,值为0时表示不存在人工压缩,给c赋值后有利于提高界面清晰度,但同时也会提高计算成本和产生收敛问题。

界面捕捉方法

3 界面捕捉效果:LS vs VOF

本文主要讨论实云流体仿真软件中用到的LS方法和开源软件OpenFOAM中用到的VOF方法。为了验证LS方法和VOF方法对界面捕捉的效果,下面展示Albadawi文献中采用这两种方法计算模拟的气泡变化过程,并与实验进行了对比分析。在计算域底部中心一个小孔以恒定体积流率喷射气泡,由于压力、浮力和表面张力的共同作用,气泡会经历产生,变形和分离的过程。计算域及其物性参数如下:

图3 计算域及其边界条件

表2 两相流物性参数

tDet为气泡分离时间,t/tDet =0 为初始时间,此时气泡已经是轴对称的球形,实验中各个时刻气泡形状如图4所示。

图4 不同时刻气泡形状

图5 LS方法(实云软件)模拟结果与实验数据对比

图6 VOF方法(OpenFOAM)模拟结果与实验数据对比

由图5与图6可以看出:与实验结果对比,LS方法对界面捕捉的效果更好,VOF方法只能模拟出气泡变形的大致趋势,各个时刻气泡的高度都要比实验值的低。

此外,还可以根据气泡的重心位置和纵横比来比较LS方法和VOF方法的模拟效果。

图6 气泡重心位置随时间的变化

图7 气泡纵横比随时间的变化

由图6可以看出,在气泡产生到发生一段变形时,LS方法和VOF方法都可以很好地预测气泡的重心位置,但随着气泡的继续演化,VOF模拟得到的气泡重心会不断的偏离实验值,而LS方法模拟得到的重心轨迹与实验吻合较好。

气泡的纵横比是指气泡的最大高度与最大宽度的比值,由图7可以看出,在VOF方法中模拟得到的纵横比会沿着实验值震荡,表现为模拟得到的气泡会在轴向上产生周期性的膨胀和收缩,而这一现象是实验观察中不存在的,而LS方法可以很有效地捕捉气泡演化时的形状以及气泡分离的时间。

更多模拟案例

以下为实云流体仿真软件Level Set 界面跟追方法模拟案例:

动图封面

图8 液体碰撞壁面反弹过程(LS方法)

动图封面

图9 膜态沸腾(3D)

发布于 2020-05-17 18:23

数值模拟

fluent

计算流体力学(CFD)

​已赞同 60​​10 条评论

​分享

​喜欢​收藏​申请转载

欢迎参与讨论

10 条评论

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
penFOAM基础--编译applications和libraries openFOAM是一个库,用户在编程时需要调用此库,当然用的语言是面向对象的c++语言。在使用openFOAM时我们应该将关注点放在顶层使用类以及数值算法上,这就需要对openFOAM Library的调用机制有一个详细的了解。并且由于我们在使用c++语言编程,因此需要对c++的编译过程有所了解。 关于编译器,我们可以直接使用LINUX自带的make程序,但openFOAM又提供了一个编译程序wmake,它建立在make的基础上,但比make更强大和简单。并且wmake不仅可以用于openFOAM library,而且可以用于任何c++代码。 openFOAM中的类,本质上是c++的class,都定义在.c文件中,这些文件在用编译器进行编译之后会生成.so文件(可执行的二进制文件),形成库(library)。openFOAM在提供时都已经生成了.so文件,因此当我们编译一个调用了某class(该class所在文件为nc.c)的程序app.c时,nc.c不会被重新编译,而是调用直接调用nc.so文件。这种机制称为“动态链接”。而如果对某.c文件进行了修改,则重新编译之后才会生效。 c++中,我们在使用一个变量或者对象时,必须确保该变量或对象已经存在,这就需要进行声明。在使用类时同样需要事先声明,这些对类的声明都包装在.h文件中,我们称之为头文件(header file)。头文件中声明的类一定要能在库中找到,这就要求声明的类与.c文件中定义的类相一致。头文件都必须以#include "xx.h"的形式被“包含”在使用了该头文件的c文件中(.c或.h文件)。一个c文件要想使用某个类,则必须在文件的开始将声明了该类的.h文件包含进来。这样一来,我们在编译一个程序的时候,可以通过“递归搜索”找到一系列的.h文件名,我们把这些.h文件称为dependences,而这一系列文件名也就是一个dependence list。编译器会判断这个list中的各个.h文件在最后一次进行编译之后是否被修改过,如果修改了,则从新编译,如果没有被修改,那么不再编译。然后,编译器会根据.h文件中的声明和程序中的调用情况在库中找到想要的代码,进而链接出可执行文件来。一方面,只有有了.h文件,我们在写程序代码时才能保证用到的类都是声明过的;另一方面,只有有了.h文件中的声明,我们才能在库中找到自己需要的东西,从这个角度来讲,h文件可以看作是库的接口。 (.h文件的用途不仅仅是用来做class declaration。当某程序代码需要调用本身的时候,通常为了增加程序的可读性,也会选择.h文件来组织文件结构。)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值