直接计算气泡流问题,欢迎讨论
-
现拟采用的计算方法:
1.基于interFOAM求解器;
2.基于压力的可压缩算法;
3.VOF处理两相。在上述求解器基础上作改动,使气泡的计算实现以下效果:
1.在恒定速度入口的流场中,能使气泡的位置固定下来而不随流体流走,类似于做一个“气泡绕流”;
2.不能影响气泡在同等工况参数下的正常变形。想在上述计算方法的基础上作改动,实现使气泡流的计算达到上述两个效果,大家可以提出什么好的办法呢?
附: 如今可以参考的,有类似做法的两篇文章:
1.Feng J , Bolotnov I A . Evaluation of bubble-induced turbulence using direct numerical simulation[J]. International Journal of Multiphase Flow, 2017, 93:92-107.
2.Thomas A M , Fang J , Feng J , et al. Estimation of Shear-Induced Lift Force in Laminar and Turbulent Flows[J]. Nuclear Technology, 2015, 190(3):274-291. -
李老师,可能我没有说清楚。这个case,气泡在假设无重力情况下(或重力作用时间极短)的横向流动中。正常情况下气泡会随流体横向输运流走。现在是想将气泡位置能固定下来,此时给定流场入口速度即为气泡滑移速度。
问题是,**怎么能将气泡位置固定下来?**已经见到的思路,包括:1.从动量方程着手,在方程右端单独对气泡施加一个PID控制的体积力,与气泡受到的阻力升力相平衡,保持气泡位置稳定
2.从动量方程着手,在方程左端单独对气泡施加一个可解耦的极大的速度项,效果是使求得的气泡内速度削减到极小
3.从alpha方程的对流项着手,采取某种办法将使气泡输运的流场速度过滤掉以上,
第一种方法被证明可行,且不会对气泡形状产生影响,但PID controller的几个参数需要大量尝试来确定,对于泡群情况下,计算量会极大;
第二种办法计算量会比较小,但貌似会对气泡形状产生影响,体现在影响alpha方程的速度上;
第三种方法目前没想到可实施的具体方案。又或者我将这个问题考虑地过于复杂了。但目前也想不到别的办法了。
-
我那种方法应该是最简单的,比如下面这种模拟就是给定反向的速度,气泡的运动。
第一种方法我没考虑过。我见过你说的第二种方法:考虑非静止参考系,将参考系固定在气泡中心,这样就可以完美固定,对于气泡群不适合因为你将有多个非静止参考系。比如这个求解器中植入的算法:
https://github.com/Unofficial-Extend-Project-Mirror/foam-extend-foam-extend-4.0/blob/master/applications/solvers/surfaceTracking/bubbleInterTrackFoam/bubbleInterTrackFoam.C 中的+ rho*aF
项,同时你alpha方程也需要类似的进行改动,要不然就会貌似会对气泡形状产生影响,体现在影响alpha方程的速度上;
-
我也是在研究这个的,我的想法是首先研究湍流,对单相流计算或者PIV测量得到一个速度场,拟合出脉动速度的方程f(x,y,z,t),随后在设置的方腔流域采用LES计算,使用上面的方程来设置边界条件,但是现在算出来的流场我用湍动能谱来对比原来的流场的,不知道有没有别的流场检验方法。
这样的话可以仅仅研究湍流作用下的气泡。下面是我测试的一个湍流边界进口。![5e0120de-e12c-47b9-b79f-e79e95220c42-image.png](/assets/uploads/files/1565439493774-5e0120de-e12c-47b9-b79f-e79e95220c42-image.png) IN { type codedFixedValue; value $internalField; redirectType velocityProfile; code #{ fixedValueFvPatchVectorFieldmyPatc(*this); forAll(this->patch().Cf(),i) { double x= this->patch().Cf()[i].x(); double y= this->patch().Cf()[i].y(); double z= this->patch().Cf()[i].z(); double t= this->db().time().value; //Info<<“current time step ==” << t << endl; double r= sqrt(y*y+z*z); double SIN = y/r; double CON = x/r; double ux = -50*r*SIN; double uy = 50*r*CON; double uz = (1-cos(r/0.0265*3.14/2))*10; myPatch[i]=vector(ux,uy,uz); } operator==(myPatch); #};
-
不过我碰到一个问题,这样的计算的时候单核计算可以进行,但是并行会碰到“mpirun noticed that process rank 0 with pid on node exited on signal 8”这个问题。谷歌也没找到