particleTemplates.C 文件中 “trackToFace”函数记录颗粒在网格外的情况,是什么原因导致的?
-
OpenFOAM-3.0.x/src/lagrangian/basic/particle文件夹下particleTemplates.C中line 202——line 530描述了trackToFace函数,即对颗粒在欧拉网格下的追踪过程。对lambdaMin小于0或者大于1的情况出现的原因不是很清楚,这种情况下记录的颗粒所在的网格id号和颗粒真实的位置不一致,对应于源程序中501——506行
The particle can be 'outside' the tet. This will yield a lambda larger than 1, or smaller than 0. For values < 0 ...............
,程序下面给出了解决方案
但是究竟是什么原因导致的The particle can be 'outside' the tet
?希望大神能够给些建议。目前个人对程序理解到的程度是:
1)在一个拉格朗日时间步长内,需要对颗粒运动路径通过的每一个欧拉网格的id号以及颗粒在那个网格中的停留时间进行识别和计算;
2)颗粒下一时步所在的网格id号是通过时间逐步推进来获取相邻网格id号的办法实现,这里最重要的是判断颗粒穿透了网格的哪一个面以及那个面对应的相邻网格;
3)通过颗粒当前所在网格(实际应用的时候是将颗粒所在网格划分为符合一定质量要求的四面体网格,细化颗粒追踪过程)面信息,颗粒当前位置,四面体网格中心点位置,颗粒一个时步内终点位置来计算lambdaMin的值(并记录了此值对应的网格面编号),个人理解程序通过lambdaMin的值是否在0与1之间来判断出颗粒是否“真正”穿过了那个网格面,对于此范围之外的lambdaMin的值,对应于颗粒实际位置在它所记录的网格之外,可以认为是颗粒跟踪失败,程序给出了“补救措施”
简而言之,lambdaMin小于0或者大于1的情况从程序的角度是如何产生的?如何通过输出有关的变量来进行验证(同时也为了解决这样一个疑惑:颗粒仿真时有时会有颗粒穿透边界而落到计算域的外部,个人感觉和这个过程很相关)