Fluent VOF 耦合Level-Set方法时的Density correction 抑制虚拟流动
-
大家好!
最近利用VOF方法在做气液两相流模拟的时候遇到了虚拟流动(spurious/parasitic currents)的问题。该问题一般会在毛细力主导时才会出现,起因是界面张力与压力源项的不相容性以及界面曲率计算的不准确。因此尝试利用耦合Level-Set的方法。这里面fluent给出了两个抑制虚拟流动的选项:density-correction 和heaviside-correction。定义如下:
但是在分别利用这两个修正方式模拟时发现:利用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-Lee 在 Fluent VOF 耦合Level-Set方法时的Density correction 抑制虚拟流动 中说:
我用来验证虚拟流动的模型是:2D方形计算域,里面填充了一圆形气相区域来验证虚拟流速大小,里面填充一个小方形气相区来验证特征时间。整场无重力(相当于计算域内只有表面张力源项)。介质为水和空气。
没太看懂,你可以把你openfoam的算例清理干净后上传一下
-
@东岳 谢谢东岳老师的回复!
如上图所示,我在这样的举行计算域里面(蓝色为液相,红色为气相,水),初始化的时候气相即为圆,没有重力及其他体积力,0速度场,0相对压力场。界面用CFS模型平衡。这样的话,理论上,计算一段时间之后,流场的速度应该为0(在数值收敛精度以下)。但是一开始算,界面上就会出现这种虚拟速度,速度适量如图所示。该结果实在确保网格无关、时间步长无关的情况下。(有关虚拟流动的研究已经有很多论文,检索 spurious/parasitic currents 即可)。而且,这种速度会导致界面变形,例如在本例中,无法维持为圆形。上图是FLuent 中VOF方法的0.1s计算结果。
以下是相同条件下中 interFoam的模拟结果结果前两幅图是0.1s的相分布和速度云图,后两幅是5s的相分布和速度云图。
可以看到,在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盲,请见谅。
在这里是想请教一下您/各位有没有这方面的经验、方法?面临毕业,自己编程序有点来不及。谢谢各位了。
-
@东岳 真的十分感谢!算例上传上来了,见附件。spuriousCurrentArc4-1.zip
-
@Albert-Lee 请问您知道fluent中Vof耦合level set如何进行初始化吗?简单液滴撞平壁算例,初始化时要对液滴区域给定level set function函数值吗? 我用的是heaviside方法。
麻烦看一下这个提问,http://www.cfd-china.com/topic/3500/fluent-vof-和level-set-耦合
-
@Albert-Lee 那您看我这个level set function算的是不是不对啊?
http://www.cfd-china.com/topic/3500/fluent-vof-和level-set-耦合