拉格朗日粒子追踪死循环
-
各位老师好,我最近正在做雾化方法的仿真,自己修改了求解器,用的是欧拉-拉格朗日方法,当网格和粒子比在20以上时,运算没有任何问题,加密网格后,网格和粒子比最小为5,此时总是出现粒子追踪陷入死循环,不管是否开启coupled选项。现在使用的是OpenFoam5.x的拉格朗日粒子库,不知道最新的库是否有改进,请关注这方面的大佬给些意见
-
我遇到过一次这样的情况,因为 euler time step 太大,然后导致在一个 Euler time step 中 lagrangian 的计算过多。
尝试控制一下你的courant number
不知道有没有帮助 -
找到原因了,是粒子入注的时候打到并行分块的交界面上了,很容易进入Cloud:move的死循环,正在思考怎么修改
-
@yfclark 据我了解 应该不是分块的问题,openfoam好像不会这样处理分块的问题,不过如果是壁面的话可能会出现这样的情况
-
@yfclark 是不是你的网格太密了?欧拉-拉格朗日法的基本假设就是粒子的质量远小于网格中欧拉相的质量。网格太密,物理意义上就不成立了。
可以通过intermediate/clouds/Templates/KinematicCloud
中的theta()函数查看液相和气相的体积比,只在屏幕上输出最大值就好。如果值大于1,那就可能有问题了。处在交界面上会自动判断归属于哪个网格或是直接删除,除非几乎所有parcel都很小并且处在交界面上,才会出问题,基本不可能——就算是这种情况,提示的也是除0的错误。所以,大概率是网格过密。是不是用了渐变网格?喷嘴附近的网格是不是比粒子初始直径还小?建议从这个角度入手解决。
另一个思路是,调整parcelsPerSecond -
@白礼耕 感谢回复,网格和粒子直径比确实小,最小比例为5,我会排查的,另外我最近也在尝试渐变网格,您使用过这样的网格算拉格朗日粒子追踪吗,我之前只在欧拉方法中用过,没有问题,不知道用在粒子追踪上算法能否处理,有什么需要注意的请指教
-
@yfclark 当然可以啦,什么网格都能算的。你是卡在了Added 1 new parcels这么?
-
@白礼耕 我记得theta() 是欧拉相或者拉格朗日相的分数?如果这个大于1应该就是越界了,理论上说DPM应该不至于超1,但是MPPIC容易超1是真的。还是我记错了这个是两者的比例?
@yfclark 在 拉格朗日粒子追踪死循环 中说:
@白礼耕 感谢回复,网格和粒子直径比确实小,最小比例为5,
然后网格粒子大小比是5应该问题不大的啊
-
最近发现一个问题可能导致粒子追踪死循环,之前我的patchInteractionModel被设置为None,粒子在边界上追踪陷入死循环,现在设置为localInteraction后不再出现该问题
-
@yfclark 请问老师前面如何统计的,认为是分块的原因?现在又是如何思考的,加上locelInteraction就可以了? 因为我最近在算喷雾的时候也遇到了这个问题 排查之后也是在move函数出了问题,前面的算例加上locelInteraction就可以了,但是后来又有一个算例使用了各种patchInteractionModel都会卡在added xx new parcels这步。
-
@jqbu 会不会你add的parcel太小了,好像我之前遇到过add太小是出问题的
-
@星星星星晴 前辈您好,感谢回复!请问您觉得多小的parcel算小呢?我在字典文件里设置了minParcelMass为1e-20,然后我设置的初始粒子的平均粒径在100um以上,破碎之后大部分也都是十几或几十um的水平
-
@星星星星晴 前辈,我看了帖子之前的讨论,但是没太看懂大家解决粒子追踪这种死循环问题的原理是什么,之前算freeSpray的时候出现这种问题可以用添加patchInteractionModel的方法解决,但是后面算impinging spray的时候就解决不了了,网格尺度是一样的,粒子的设置也是一样的。我现在还没太清楚是程序哪个部分出现了问题?
-
@jqbu minParcelMass 在你这个1e-20的话 大概算出来是3.91486764×10−7 不知道你有没有什么地方设置过vsmall 还有rootvsmall,作为filter,可能有问题吧 不好说。
另外如果parcel太小,有可能也被trap到某个涡里。看看调整一下你的Euler time step 还有maxco试试
impinging的流场比较复杂 jet?你先调整试试看one-way 限制尺寸大一点。