Fluent VOF 耦合Level-Set方法时的Density correction 抑制虚拟流动



  • 大家好!
    最近利用VOF方法在做气液两相流模拟的时候遇到了虚拟流动(spurious/parasitic currents)的问题。该问题一般会在毛细力主导时才会出现,起因是界面张力与压力源项的不相容性以及界面曲率计算的不准确。因此尝试利用耦合Level-Set的方法。这里面fluent给出了两个抑制虚拟流动的选项:density-correction 和heaviside-correction。定义如下:density and heaviside correction.PNG
    但是在分别利用这两个修正方式模拟时发现:利用density-correction方式消除虚拟流动的效果很好,能够比heaviside-correction方式小两个数量级。但是后续的验证却发现,施加density-correction之后,自由液面运动的特征时间(毛细时间)被放大了近两个数量级,这显然与事实不符。其实从这两个修正系数的定义上也可以看出二者的区别不是很大。但是在抑制虚拟流动时却产生了很大的差别。后续也试着利用openfoam中的来模拟,发现虚拟流动比fluent中vof的结果更严重。其原因可能是fluent中采用了PLIC的界面重构方式。
    我用来验证虚拟流动的模型是:2D方形计算域,里面填充了一圆形气相区域来验证虚拟流速大小,里面填充一个小方形气相区来验证特征时间。整场无重力(相当于计算域内只有表面张力源项)。介质为水和空气。
    一般文献中有一个虚拟速度大小的估计值:$u_s ~ 0.01 \sigma/\mu$ 。以水为例,虚拟速度可以达到0.7m/s的量级,对模拟结果会有很大的影响。
    因此,严重怀疑fluent中coupled level set 方法中的density-correction有误。不知道是否有同行遇到过这个问题,有没有什么解决办法?或者抑制虚拟流动的办法(完全自编程序的除外)?另:请问怎么在udf中读取level set函数的值?fluent帮助文件里面似乎没有给出。像VOF值的话,有C_VOF(c,t)。
    谢谢各位的耐心阅读,请不吝赐教。

    我的邮箱是 lijichengbitao@163.com , 微信号 838601714。若方便的话,也可相互交流。



  • @Albert-LeeFluent VOF 耦合Level-Set方法时的Density correction 抑制虚拟流动 中说:

    我用来验证虚拟流动的模型是:2D方形计算域,里面填充了一圆形气相区域来验证虚拟流速大小,里面填充一个小方形气相区来验证特征时间。整场无重力(相当于计算域内只有表面张力源项)。介质为水和空气。

    没太看懂,你可以把你openfoam的算例清理干净后上传一下



  • @东岳 谢谢东岳老师的回复!
    0.1sV.png

    如上图所示,我在这样的举行计算域里面(蓝色为液相,红色为气相,水),初始化的时候气相即为圆,没有重力及其他体积力,0速度场,0相对压力场。界面用CFS模型平衡。这样的话,理论上,计算一段时间之后,流场的速度应该为0(在数值收敛精度以下)。但是一开始算,界面上就会出现这种虚拟速度,速度适量如图所示。该结果实在确保网格无关、时间步长无关的情况下。(有关虚拟流动的研究已经有很多论文,检索 spurious/parasitic currents 即可)。而且,这种速度会导致界面变形,例如在本例中,无法维持为圆形。上图是FLuent 中VOF方法的0.1s计算结果。

    以下是相同条件下中 interFoam的模拟结果结果前两幅图是0.1s的相分布和速度云图,后两幅是5s的相分布和速度云图。
    0.1vof.png o.1V.png 5vof.png 5v.png

    可以看到,在0.1s时,由于虚拟流动的存在,圆形的气相区域已经变得有些“方”。在5s时气相直接跑到了一角。
    这样比较下来,Fluent中利用PLIC方法捕捉的界面更准确一点。但影响还是很大。

    因此,我试图利用FLuent中的coupled level set 方法,其帮助文件里面有降到到我在前一问中提到的 density correction 和heaviside correction 。结果发现利用heaviside correction 方法抑制虚拟流动的效果和VOF方法相比差别不大。但是利用density correction效果就很好。
    为了确保其准确性,我在上述的计算域中初始化气相区域时将圆形改为正方形,让它来通过计算恢复为圆形。在这一过程中,发现利用density correction计算时,气相区从方形到圆形恢复得特别慢。
    我们知道,该过程为毛细力主导,特征时间是 $t=\sqrt{\rho_l R^3 / \sigma}$,在0.01s量级,二利用 density correction计算的结果在1s量级,显然不对。而用其他方法包括 heaviside correction 算的结果在时间量级上正确。
    因此,我才在最初的问题中说“严重怀疑fluent中coupled level set 方法中的density-correction有误”。

    (模拟算例是改的Dam的那个例子,只改了计算域和相分布、物性)折腾了半天还没弄好打包的,Linux盲,请见谅。:baobao:

    在这里是想请教一下您/各位有没有这方面的经验、方法?面临毕业,自己编程序有点来不及。谢谢各位了。


  • OpenFOAM讲师

    特征时间尺度,一般用在时间尺度分析上,实际的时间尺度和特征时间尺度之间还差一个系数,这么分析能行吗?



  • @yfclark 这只是时间尺度的估计,能得到一个基本的数量级,具体问题的话还要看条件。在这种毛细力主导的流动中,该特征时间与毛细波的振荡频率相对应,至少保持在同一数量级。


  • OpenFOAM讲师

    fluent的东西不太懂,level-set和vof耦合有专门的算法,要保证level set估算的网格体积分数和vof基本一致,不知道fluent是如何实现的,另外你给出的图的虚假流动太大了,把计算域扩大,边界条件用一对平行的wall,一对平行的slipwall试一下



  • 我在出差,回去用openfoam测试下给你反馈



  • @yfclark 谢谢!我也试过了将计算域从原来的1cm x 1cm 扩大到1m x 1m,虚拟流动比原来的略有减小,但是没有量级上的变化。fluent中耦合level-set的方法只是用来计算相界面法向量和曲率,体积分数仍然由vof方法确定。



  • @东岳 真的十分感谢!算例上传上来了,见附件。spuriousCurrentArc4-1.zip



  • @Albert-Lee 请问您知道fluent中Vof耦合level set如何进行初始化吗?简单液滴撞平壁算例,初始化时要对液滴区域给定level set function函数值吗? 我用的是heaviside方法。

    麻烦看一下这个提问,http://www.cfd-china.com/topic/3500/fluent-vof-和level-set-耦合



  • @刘晓刚 直接全场给0或者1皆可,一个迭代之后自然会算出相应的levelset值。



  • @Albert-Lee 那您看我这个level set function算的是不是不对啊?
    http://www.cfd-china.com/topic/3500/fluent-vof-和level-set-耦合



  • 正常level set function=0 时不应该为两相界面吗?



  • @刘晓刚 这个耦合了vof,即使你初始化levelset为0,后面计算会结合vof自动赋值的



  • 再麻烦问一下,您知道我这个计算大概哪出问题了吗?vof 单算和vof+level set的结果不一样啊,明显vof的交界面更加光滑。现在通过level set function=0 也判断不了相界面啊?



  • @刘晓刚 我回复至你那个问题里面了。单个因素试着来,逐一排查,应该会找到原因的


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2