|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
看过duns说明文档的人都知道,在duns的说明文档中提到一个sweep block(也叫solution block)。如果不弄明白solution block,要想看明白duns的源代码是够呛的。虽然正确理解这个solution block对于想读懂duns源代码的人来说很重要,但是duns的说明文档中却没有给于足够的说明,在Douglas A. Schwer的博士论文中也找不到答案。我曾经被这个solution block整得半死。后来我到傲雪论坛和流体中文网论坛发贴求助,在supersonic兄等人的指点下,我就边看边猜,把自己当成一个286处理器,根据一个算例,把assemble.f文件中的语句执行了一遍。哈哈,总算找到了答案。现在拿出来和大家共享。
Duns对离散方程的求解采用了对角化交替方向隐式(diagonalized alternative direction implicit)求解。这样在每个坐标方向上就只需要解一个标量三对角方程组,相对于解块三对角来说应该要快一点。我想就是因为duns采用了交替方向求解,所以才会使用sweep block。采用交替方向求解,对于每一个cell来说,只要在一次完整的求解中从不同坐标方向上sweep一次就够了,不管它按照怎样的顺序去sweep。
在duns的源代码中,读入网格数据(gridread.f)后,会调用一个assemble子行例程。该子行例程的功能就是组装solution block。下面举例说明一下solution block 的组装。
如图(duns的算例中的airfoil网格)
这是一个翼型网格,共有12个网格块组成。其对应的solution block有8块。每一条带箭头线条穿过的网格块组成一个solution block。从图中可见,每一个physical block(相对于solution block就这样称呼原来得网格)得有二根线条穿过,并且也只能有两根线条穿过(对于三维网格有三根线条穿过)。一根线条只能穿过一个physical block一次(没有证明,凭感觉)。可见一个physical block是属于两个不同的solution block的。Solution block组装的原则是从一个边界引出一根线条,然后往和边界垂直的网格线方向延伸,一直延伸到边界(这个边界可以是和原来相同的边界),这样算组装了一个solution block。[ |
|