|
|
发表于 2005-11-18 01:48:12
|
显示全部楼层
非结构网格编程的兄弟帮个忙
我上一贴说的不是很准确. 不过要细说要打太多字.
简单说一下, 其实我们用的方法没太大区别. 在初始化的时候每个颗粒先找到初始网格, 后面时间步只要搜索临近网格就行了. 我前面说的是找初始网格方法.
因为对任意多边型网格, 判断一个点是不是在网格内部不是很简单的, 至少你要扫描网格所有的面才能确定. 如果不是3角形面, 可能还要把面分成几个3角形来做. 如果要算法稳定, 还需要考虑各种特别情况, 比如点在面上, 点在线上.. 这些计算量加起来再乘上总网格数再乘总颗粒数就不是个小量了. 所以一般前面都会用一些简单算法快速筛选. BOUNDING BOX可以用来做这种筛选. 我猜你用网格点到颗粒的距离来筛选,找到最小距离的点, 再用更精确的算法检测和"最小距离点"共点的所有CELL. 如果用穷尽法, 你这种做法效率应该不错. BOUNDING BOX好处是可以做成树, 树结构可以把搜索范围缩小, 会进一步加速. 我不知道"最小距离点"有没有可能再加速了.
颗粒碰撞对SPRAY液滴其实更难, 而且SPRAY里每个计算"液滴"代表几百几千个实际液滴, 碰撞不可能算准, 所以一般都用最简单方法做, 比如同在一个CELL的液滴就假设他们碰撞. 反正碰撞对大家关心的东西影响不大.
对固体颗粒碰撞检测, 我看到有人单独做一套方形网格专门用来检测, 好象在颗粒大小差不多的情况下, 这种方法效率挺高的, 不知道你是不是也在用?
非结构网格并不复杂. 网格TOPOLOGY涉及NODE/FACE, NODE/CELL, FACE/CELL. 其中只2套关系是基本的, 剩下可以推出来. |
|