D01:10.19392/j.cnki.l671-7341.201622037
格子Boltzmann方法在GPU平台下对多孔介质
流动的模拟
顾超
北京计算科学研究中心北京100193
:GPU有着强大的并行计算能力,现在越来越多的被人应用到科学计算领域了。格子Boltzmann是一种模拟不可压缩流动的计算方法,
由于其具有天然的并行性,因此本文利用GPU的并行计算能力,在GPU平台上,利用格子Boltzmann模拟周期性的绕方块多孔介质流动,在保证
摘要
程序结果的计算精度的情况下,极大的提高了程序计算效率&同时将计算结果同有限元的结果进行比较,也得到了较好的计算结果。
关键词:GPU;格子Boltzmann;多孔介质;并行计算
20年来,格子Boltzmann方法在计算流体流动的模拟中,起到了很大的作用6但是,与此同时,格子BoltzmamULBM)方法,在计算过程中,有着汁算fi大,计算时间长,内存消耗大的特点。但是由于LBM方
在近
法是一种显示计算格式,在计算的过程中,只耑要利用邻近网格点的信息,因此该方法有着良好的并行性,尤其是在高的并行效率s
GPU平台上,可以达到很
GPU是一个大规模并行计算架构,被广泛的用于图像和非图像计算领域,机器学习,图像,语音等领域都冇着丨、V:用。GPU的主要优势在于单位时间的浮点汁算能力远远的高于CPU的浮点计算能力m。
对于多孔介质流动的数值模拟,多数情况下,多孔介质流动,都属于缓慢流动,而在模拟缓慢流动的数值方法中,LBM方法足其中一种 相当广泛的方法。关于LBM对于多孔介质的流动,在很多领域中都有 着里要的I、V:用:复合材料、流变学、地质学、统计物理、生物科学等诸多 领域都有着广泛的应用3
1
-440M =0
000_ 0
\"
其中式子(1)中f形式所示:
1-1-21-200101
—1-1-122-2-2-2110-101-10201-110-111-20211-11-1000001-1
1
1
1
1
112211
-1-1
11-1-1
一 1
-1
001-1
\\* MERGEFORMAT (4)
t为矩阵QzlT1 x S的分量,这里面矩阵S为如卞
GPU上运行的程序,为
了减少数据从CPU内存上到GPU内存上拷贝的消耗,我们将LBM算 法中的每一步计算都放在GPU上面来实现。
本文的程序是遥于nVIDIA公司CUDA C语言实现的。一共分为三 个部分,第一部分首先介绍了 LBM方法,第二部分介绍了 LBM方法在 GPU平台上的实现。第三部分,我们利用实现的程序对多孔介质流动进
行模拟,并进行相关的计算,将计算得到的结果他文献结果进行比 较,都吻合的很好。
在本文中,我们实现了一个通用的LBM在
S = diag{^sv,sv^sq^,scrsv,sv) \\* MERGEFORMAT(5)
在这个模型中,矩空间{%(x,仏=1,2,…,9}有三个守fr:变物质 的密度r,动M的两个分量,这M动ill为j=ni。
因为LBM模型模拟的是不可压缩多孔介质流动,所以在本文中,
P ~ P〇 +
将会采用如下近似来封傳问题:
P〇 ~\\^P — ^fj
M
9
\\* MERGEFORMAT (6)
1格子Boltzmann方法
j = AU = P〇(M,v), p〇u =
其中,对于矩空间的平衡态分布函数; '的具体形式由如下式子给出:
Boltzmann模咽(MRT),对于MRT模型的方程如下所;qK:
+ + = Qy {mp-mj) + Fi
\\* MERGEFORMAT(l)
本文采用的足二维情况下的9个离散速度方向的多松弛格子
mlq = 8p,mlq = -2Sp +3p0u2
m^1 — Sp — 3p0u2 ,me4q — p^u
这屮K E (是袼子〈上面的一个格点,{cf:i=l, 2,…,9}是介观粒子的 离散速度集合,其中各个方向的粒子速度分别为:
m7 = ~pu->mlq = pv
〇〇\\* MERGEFORMAT (7)
Cj = (0,0), c2 = -c4 = c(l, 0)
c3 =-c5 =c(0,l)
\\* MERGEFORMAT(2)
c6 =-c8 = c(l,l)C7 =-c9 =c(-l,l)其中C 表斯时间步长,时间t为当前时间步;
{/:(^出=1,2,-9}是以速度^运动的单个粒子的分布函数,其中
,2,…,9丨为矩空间分布函数,对于是由如下变换得
me9q - p0uvs _
m? =-p〇v^mlq = a
(^2_v2)
在本文中》对角矩阵S中的两个参数、&分别为如下所示的式子3 V_6v +汾’V
\\* MERGEFORMAT (8)
(8_〜)
那么在本文中,该方法由如下几个步骤来实现:1) 2)
对/进行流动演化;
通过,来计算守恒变ill办和U;
到的。
%=2X
户:i
,/
3) 利用u^u+aG^/2计算uV其中a=F/r〇,这F代表外力;
\\* MERGEFORMAT (3)
4) 利用计算出来的和办计算矩S间的平衡态分布函数, 5 )利用,来计算
6)计算 u**=u*+acfe/2=u+ac^;
7 )将映射到分布函数空间得到分布函数/:;
其中竭为矩阵M的分量,矩阵M的具体形式如下所示s
38 •
科技风2016年11月下8)计算碰撞后的分布函数。
通过该方法实质上是求解如下所所的Navier-Stokes方程,该方程 的形式为如下所示:
5.u + u-Vu =-—p〇
Vz?+
+ F
\\* MERGEFORMAT(9)
V.u = 0
2模拟多孔介质流动的GPU实现在格子
Boltzmann方法中,介观粒子的移动是在如下图所序:的格子
图中的圆点代表每个粒子,从图中可以科出,粒子的分布函数,只 会迁移到周围相邻的几个点〇在实际利用格子
Boltzmann计算中,需要
计算的介观粒子往往很多,几且在模拟多孔介质的流动过程中,往忭需 要迭代很多的时间步,才能得到稳态流动的数值解。因此一个二维问题 的串行程序,忭忭耑要计算儿天甚至一个月的时间才能得到计算结果。
在GPU
上、最基本处理单兀是SP( streaming processor)
,计算过程屮,凡
体的指令和任务都是在SP上进行处理的。GPU进行并行计算,也就是 很多个SP同时做处理。
本文程序的编写,采用的是CUDA平台。在CUDA平台上,最基本 的处理单元是thread,—千CUDA的并行程序会有多个threads来执行。 一定个数的threads会组成一个block,同一个block中的threads可以同 步,也可以通过共享内存(shared memory)通信。同时,多个blocks则会再 构成grid。
具体的示意图如下所示:
图 2 CUDA 平台 Thread,Block, Grid 关系图
电子信息4
在
GPU中,一个GPU所拥有的Thread忭忭有很多个在本文所使
用的Nvidia-K40的显卡中,采用的计算架构是Tesla Kepler,该架构T 面,所能够调用的Thread多达两千万个《
因此,为了提升计算速度,本文在编写多孔介质流动模拟程序的时 候,采用的是一个Thread处理一个格子上面的计算。同时,因为计算过 程屮,:要经常用到格子的离散速度⑷=1,2,…,9},矩阵M,矩阵M的 逆矩阵,所以为了优化程序对这些M的访问速度,本文将这些M放入常 量内存。
同时,在每一步计算过程中,都会用到矩空间的平衡态函数,为了 提高函数的调用效率,本文对于矩空间的平衡态函数采用宏来进行预 定义
由于在计算过程中,会涉及到介观粒子的迁移,所以对于介观粒子 的分布函数,只能存放在GPU的全局内存4{面(global memory)。但足木 文模拟的是多孔介质的流动,该问题的计算区域示意图如下图所示:
图3多孔介质示意图,图(a)为多孔介质,图(b)为该多孔介质的最小体元如上图中,图(a)为整个多孔介质流动的结构,黑色部分为固体,空
白区域为液体。由于多孔介质流动是属于缓慢流动,所以在本文中,可 以将问题的计算区域抽象成如图(b )所示的计算区域。边界条件,对于 固体边界采用的是无滑移边界条件,对于上下左右的流体边界,采用的 是周期性边界条件。
3数值结果3.1数值解的收敛性
从文献[2]可以知道,格子Boltzmann程序的精度是二阶精度,也就 是说,多孔介质的程序计算结果足正确的话,那么该程序的收敛阶必须 是二阶收敛。
下而给出+同间体体积分数的情况下的收敛阶。在本文中s固体体 积分数由如下所示的式子表示:
固体面积\\* MERGEFORMAT(IO)
计算区域的总面积
如下表所示,给出了 a=0.9025,0.01这两种情况下的收敛阶。
表1固体体积分数『0.9025,0.01情况下的收敛阶
0.01
误差
1.656409e-001
6.797929e-0028.561572e-0032.1370
从上面表可以看出,不管a=0.9025是『0.01还是的情况下,计算 出来的收敛阶都接近2,这也就说明了本文所编写的程序收敛阶为2, 所以由此n丨以狞出此多孔介质流动的模拟程序的结果与理论相符合。
3.2渗透率的计算
同时,由于多孔介质流动多为缓慢流动,对于缓慢流动,存在达西 定律,达西定律的公式为如下所示:
U
=—Vp V MERGEFORMAT(l.l)
其中U为多孔介质流动的平均速度,K为多孔介质的渗透
本文将格子
Boltzmann方法计算出来的渗透率同文献[3]中的结果 进行比较,结果图如下所示S
* 39
电子信息科技风2016年11月下
元计算得到的结果也是一样的,与此同时,本文的程序是基于GPU平台 下的大规模几行程序,在模拟同样的问题,同样的网格尺度的情况下, 本文所用的时间是普通中行程序的几十倍,并且随着网格的增多,由于
GPU里而依然是一个thread处塵一个格子,伹是中行程序却足一个线
间却不会有太大的变化。
参考文献:
[1] Nit a C, Itu L M, Suciu C. GPU accelerated blood flow computa
程处理所有的格子,相比之下,在迭代相同的步数情况下中行程序所消 耗的时间会越来越多,但是本文的GPU平台下的并行程序所消耗的时
图4有限元方法与本文LBM方法的计算结果比较
从上图可以看出,本文所采用的数值方法的GPU程序,4文献I ”所 采用的有限元方法的计算结果吻合的相当的好u 4结论
从前面的章节可以看出,本文基于GPU平台的多孔介质数值模拟, 所得到的结果与理论吻合的很好,,与此同时,计算出来的渗透率同有限
tion using the Lattice Boltzmann Method [CJ.High Performance Extreme Computing Conference (HPEC),2013 IEEE. IEEE,2013:1-6.
[2] He X,Luo L S.Theory of the lattice Boltzmann method:From the Boltzmann equation to the lattice Boltzmann equation|J].Physical Review E, 1997,56(6):68U.
[3] Yazdchi K, Srivastava S,Luding S. Microstructural effects on the permeability of periodic fibrous porous media |J].International Journal of Multiphase Flow,2011,37(8):956_966.
作者简介:
顾超(1991 -),男,汉族,湖北仙桃,硕士,研究方向:计算流体力学。
(上接第31页)
d 麵
1 口
三、结论
利用Simulink构建了严格遵守客观物理定律的模拟仿真系统,该系 统不受实验环境限制,能够使物理实验以一个比较客观的角度展现出 来,实验结果较准确,与
参考文献:[1]
冯鉴,郭世伟.《基于Simulmk的机械系统可视化建》模仿真分析
FLASH方法模拟实验相比更科学、也更准确地
表达物理量的关系和数值变化。
图6无阻尼时动能势能机械能仿真曲线
[J1.煤矿机械,2002(6):24-6,
[2] http://www.mathworks.com/[3]
吴迪,孙洪毅,等,《基于Matlab Simulink的物理实验-简谐振动
仿真研究》.大连大学,116622.
图7有阻尼时动能势能机械能仿真曲线
40
因篇幅问题不能全部显示,请点此查看更多更全内容