论文部分内容阅读
格子Boltzmann方法是一种介观方法,可以对大部分领域的偏微分方程进行求解,它弥补了传统宏观方法无法展示流体内部微观细节,且需要构造大规模线性方程组才能求解以及微观方法模拟的尺度很小,在如今的计算技术下难以实现的不足。另外,格子Boltzmann方法还具有算法简单、计算网格容易生成、边界计算简单、天然并行性等特点。格子Boltzmann方法常用的模型有单松弛(SRT或LBGK)模型和多松弛(MRT)模型,与单松弛模型简单地模拟单一松弛时间的计算过程不同,多松弛模型具有多个松弛时间,可以模拟不同扩散方向速度不同以及各向异性等情况。在多松弛模型的计算中由于涉及一定的矩阵操作,与单松弛模型相比,在计算量上有一定程度的增加,但由于多松弛模型的高收敛性弥补了计算量增大这一缺点。基于格子Boltzmann方法的原理及其常用的模型,我们可以求解许多偏微分方程。本文应用格子Boltzmann方法的两种模型,对三维地下水流动过程进行模拟,结果显示了格子Boltzmann方法无论用哪种模型都可以很好地模拟出三维地下水流动过程,且误差与理论值相差很小。本文还对这两种模型的实验结果进行了对比,多松弛模型在收敛性以及计算时间上都比单松弛模型具有较大的优势,且多松弛模型由于多个松弛时间具有更广的应用范围。为进一步加快计算速度,本文使用CUDA架构实现了多松弛格子Boltzmann方法在GPU上的并行。我们通过设置GPU中每个线程处理一个网格,这样所有的线程同时执行每个格点的计算就实现了格子Boltzmann方法模拟三维地下水流动问题在GPU上的并行。实验显示,GPU上的模拟运算速度与CPU相比有明显的提高,且随着网格规模的增大,GPU的加速比呈现一个增大的趋势。为了满足网格不断细化所增加的格点数量,本文使用OpenMP这种共享内存式并行架构实现CPU中多个核心的并行,再通过每个CPU核心调用一块GPU卡,实现了多个GPU的并行,从而扩展了同时进行网格计算的线程数量,提高了计算速度。实验结果表明,处理同一网格规模时,GPU的数量越多,GPU表现出越大的加速比,而随着网格规模的增大,GPU的加速比也在随之增大。