overpimpleDyMFoam +颗粒边界处理
-
在overpimpleDyMFoam 中加入了拉格朗日模块,但是发现动网格下移动物体边界处颗粒捕捉的不好,会有部分颗粒进入固体内部,请问大家有好的建议吗?
因为计算问题的限制(涉及到大变形),没有采用变形网格类的动网格技术,我在颗粒求解模块中也添加了固体壁面反弹的颗粒处理约束,但是效果没有完全约束住。
-
@lys 你好,并不了解overpimpleDyMFoam,但是这个部分是动网格?
请问你在什么时候parcel.evolve()的会不会是在你网格移动之前?还是在你网格移动之后?
另外你的paraview显示的是2D还是3D?中间是个球还是圆柱?
-
@星星星星晴 这部分是动网格技术中的重叠网格,颗粒的演化是在最后,应该是网格移动后,因为是先求的流体,然后再求的颗粒运动,
这是个2维问题,中间是个圆柱,不存在视觉假象 -
@lys 嗯嗯 重叠网格部分我也不是很了解
请问能否讲一下这个部分是怎么处理的?
正常情况下验证过parcel放在pimple之前或者之后应该是不太影响结果的(同事验证过, dilute),但是你这个case改变了mesh,就不好说了。或许你应该放在pimple之前,这样会导致 $n_t$ 的时候用的是$n_{t-1}$的流场, 但是这样仍然无法规避网格变动的情况。
你可以先跑一个无重叠网格的case,判断一下,是否是重叠网格的问题。parcel应该都是在网格内部的,所以如果出现在非网格处的话,能让我想到的只有你的重叠网格引起的问题了,是不是应该在重叠网格处理部分也加入关于parcel的处理。而且我在kinematicCloud.C 中看了一下,preEvolve的地方他会updateCellOccupancy(),所以parcel会在计算的时候重新计算当前cell内的parcel信息。
-
@lys 另外你用的什么版本of,引用的什么cloud
-
@星星星星晴
两个版本都用了,of2206的overpimpleFoam的基础上,我给加了LPT,但是就是我觉得不理想 -
@lys 哦哦,可能是你的其他模型不够吧,受力都有啥?particle turbulence dispersion model?1way 还是2way这些东西是有影响的,particle maxCo是多少?
-
@星星星星晴 受力主要阻力,重力,流体惯性力(压力梯度力),虚拟质量力,应该比较全了,2-way的,湍流脉动力确实没有考虑,颗粒Co=0.3,感觉跟这个关系不大,主要是边界没起到时时刻刻的不可穿透条件
-
@lys 你可以试试Co小一点,这个也有影响的,判断你的拉格朗日dt. 正常情况下是需要考虑dispersion的,不然particle的RMS是错的(个人经验)。不过of自带的dispersion model 也不咋地,不过你可以试试看。也要看你用什么turbulence。 RANS 还是LES,RANS需要,LES怎么说呢,理论上也是是需要的,但是好多人不用。OF也没有默认的LES的turbulence dispersion。俩模型都$k-\varepsilon$的。你也没说你用的啥turbulence
我做过和你类似的,不过不是圆柱,不是你的重叠网格,是tablet周围被snappyhexmesh加密过,完全没有你说的情况,particle就是碰到壁面就没了,个人认为,是因为你的重叠网格,也不知道这个重叠网格怎么做的,另外如果你particle很小,不是dense的话,有些模型不用考虑,完全是浪费时间。shear-lift?不好意思,有些词我想不起来中文教材怎么叫了。。。
-
另外请问你的source term在各个方程里面加了么?
@lys 在 overpimpleDyMFoam +颗粒边界处理 中说:
@星星星星晴
两个版本都用了,of2206的overpimpleFoam的基础上,我给加了LPT,但是就是我觉得不理想 -
@星星星星晴 你说的sourceTerm是颗粒对流体的作用力吗
-
@lys 在 overpimpleDyMFoam +颗粒边界处理 中说:
会有部分颗粒进入固体内部
具体没太细看啊,我插一句,是不是需要看一下你这个颗粒定义在哪套网格上了,如果定义在A网格上,壁面在B网格上,那是不是肯定会发生这个现象。
-
@lys 比如ueq里面的 + parcels.SU(U) 这一项,其他的有加么
// Solve the Momentum equation MRF.correctBoundaryVelocity(U); tmp<fvVectorMatrix> tUEqn ( fvm::ddt(rho, U) + fvm::div(phi, U) + MRF.DDt(rho, U) + turbulence->divDevTau(U) == rho()*g + parcels.SU(U) + fvOptions(rho, U) ); fvVectorMatrix& UEqn = tUEqn.ref(); UEqn.relax(); fvOptions.constrain(UEqn); if (pimple.momentumPredictor()) { solve(UEqn == -fvc::grad(p)); fvOptions.correct(U); K = 0.5*magSqr(U); }
-
@李东岳 正常情况下 cloud里面会有updateCellOccupancy这个方程,会自动更新当前cell中parcel的占用什么的,如果在solver中把parcels.evolve(); 放到mesh.changing之后就应该没事,但是很奇怪,他的parcel会进入空的地方。。
-
@李东岳 这是重叠网格,按道理讲是可以更新背景网格的流场信息,然后颗粒在更新后的流场信息作用下,是可以实现壁面效应捕捉的。但也有可能,颗粒只是感受到了流场,而没有实际发生壁面碰撞,所以导致颗粒穿透壁面,这是不是意味着overset 方法是不适用颗粒求解的,所以openFOAM-ESI版本下就没有现成的overset求解器+LPT
-
你的A网格如果没有壁面,但是壁面定义在网格B上,那拉格朗日栗子同时也定义在A上,那A网格那面不就没有壁面了么。流场的话,重叠网格做了插值处理。栗子,是不是也要做B网格壁面-A网格壁面的映射,然后并反弹处理?
-
@星星星星晴 这项时肯定要加的
-
@lys 嗯,就是确认一下别拉下什么东西没加就难受了。
所以说,那些particle 应该是在$n-1$步时还在网格里,然后网格发生变化,可能就不在网格里了,这部分parcel就没办法算了。
- 把parcel.evolve() 放到 bool changed = mesh.update() 前面,让parcel用上一步的旧网格试试看
- 另外如果你的Euler time step $\Delta t_E$ 足够小,就是你每次更新网格的间隔减小,会不会也一定程度上减少这样的发生呢?
- 调整动网格或者在parcel部分,判断内部是否有parcel,有parcel就挪他们到wall表面。
-
-
@lys ?怎么 有解决么?