欢迎光临散文网 会员登陆 & 注册

格子Botlzmann方法·元素与代码实现

2023-03-27 17:47 作者:LukeyZ  | 我要投稿

格子Boltzmann方法起源于气体动理学理论,其思想是从气体分子的微观机制研究其宏观特性,如考察气体分子间的相互作用,获得气体的黏性系数、热传导系数和扩散系数等宏观特性;通过考察分子的碰撞流动过程获得流体的压力、动量、能量等宏观物理量的演变规律。这一过程可由Boltzmann输运方程描述为:

%5Cfrac%7B%5Cpartial%20f%7D%7B%5Cpartial%20t%7D%2B%5Cbar%7Bu%7D%5Ccdot%5Cnabla%20f%20%3D%20%5COmega

一个完整的格子Boltzmann方法实现主要分为四个元素:格子(离散速度)模型,平衡态分布函数,演化方程和宏观量计算。

格子模型按照维度来说一般分为二维和三维模型,其中二维最常用的为D2Q9模型(注:此处的D2指的是二维平面,Q9指的是9个速度方向),即将二维平面的速度以九个方向的分速度%5Ctextbf%7Be%7D_i近似,如图1所示:

图1:D2Q9格子模型

在程序中实现为:

针对三维问题,最常用的格子模型为D3Q19模型,其示意图为:

图2:D3Q19格子模型

在程序中实现为:

定义了格子(离散速度)模型之后,如何设计正确的平衡态分布函数也是格子Boltzmann方法的一个关键元素。对于流体流动问题,平衡态分布函数是面向密度设计的,表达式为:

f%5E%7Beq%7D%3D%5Comega_i%5Crho%5Cleft%5B1%2B%5Cfrac%7B%5Ctextbf%7Bc%7D_i%5Ccdot%20%5Ctextbf%7Bu%7D%7D%7Bc_s%5E2%7D%2B%5Cfrac%7B(%5Ctextbf%7Bc%7D_i%5Ccdot%20%5Ctextbf%7Bu%7D)%5E2%7D%7B2c_s%5E4%7D-%5Cfrac%7B%5Ctextbf%7Bu%7D%5E2%7D%7B2c_s%5E2%7D%5Cright%5D

 其中 %5Comega_i 为权重系数,其取值为:

D2Q9%EF%BC%9Aw_%7Bi%7D%3D%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bll%7D%0A4%20%2F%209%20%26%20i%3D0%20%5C%5C%0A1%20%2F%209%20%26%20i%3D1%2C2%2C3%2C4%20%5C%5C%0A1%20%2F%2036%20%26%20i%3D5%2C6%2C7%2C8%0A%5Cend%7Barray%7D%5Cright.               ,

在程序中实现为:

平衡态分布函数中的%5Ctextbf%7Bc%7D_i表示离散格子速度,定义为 %5Ctextbf%7Bc%7D_i%3Dc%5Ctextbf%7Be%7D_ic_s表示格子声速(标量),在D2Q9和D3Q19格子模型中,其定义为c_s%5E2%3D%5Cfrac%7Bc%5E2%7D%7B3%7D。当我们取c%3D1时,平衡态分布函数简化为:

s_%7Bi%7D(%5Cvec%7Bu%7D)%3Dw_%7Bi%7D%5Cleft%5B3%20%5Cfrac%7B%5Cvec%7Be%7D_%7Bi%7D%20%5Ccdot%20%5Cvec%7Bu%7D%7D%7Bc%7D%2B%5Cfrac%7B9%7D%7B2%7D%20%5Cfrac%7B%5Cleft(%5Cvec%7Be%7D_%7Bi%7D%20%5Ccdot%20%5Cvec%7Bu%7D%5Cright)%5E%7B2%7D%7D%7Bc%5E%7B2%7D%7D-%5Cfrac%7B3%7D%7B2%7D%20%5Cfrac%7B%5Cvec%7Bu%7D%20%5Ccdot%20%5Cvec%7Bu%7D%7D%7Bc%5E%7B2%7D%7D%5Cright%5D%2C

在程序中实现为:

值得注意的是,D2Q9和D3Q19的平衡态分布函数实现是一样的。

当我们使用单松弛,即BGK碰撞模型来简化Boltzmann方程的碰撞项 %5COmega 时,格子Boltzmann方法的演化方程为:

%5Cbegin%7Barray%7D%7Bccc%7D%5Crho(%5Cvec%7Bx%7D%2Ct)%26%3D%26%5Csum%5Climits_%7Bi%3D0%7D%5E8f_i(%5Cvec%7Bx%7D%2Ct)%5C%5C%20%5Cend%7Barray%7D

在程序中有两种实现方式,一种是碰撞流动分开两个循环,一种是碰撞流动在一个循环。先说第一种碰撞流动分开的形式,其实现为:

第二种碰撞流动写在一个循环的实现为:

最后一个元素是宏观量密度和速度的计算,其公式为:

%5Cbegin%7Barray%7D%7Bccc%7D%5Crho(%5Cvec%7Bx%7D%2Ct)%26%3D%26%5Csum%5Climits_%7Bi%3D0%7D%5E8f_i(%5Cvec%7Bx%7D%2Ct)%5C%5C%20%5Cend%7Barray%7D,   %5Cvec%7Bu%7D(%5Cvec%7Bx%7D%2Ct)%3D%5Cfrac%7B1%7D%7B%5Crho%7D%5Csum%5Climits_%7Bi%3D0%7D%5E%7B8%7Dcf_i%5Cvec%7Be%7D_i

在程序中实现为:

至此,设计好这四个元素,再结合相应的边界条件即可模拟流体流动。下面给出了一个顶盖驱动流问题的部分模拟结果:

Re=1000的速度云图
Re=1000的流线图



格子Botlzmann方法·元素与代码实现的评论 (共 条)

分享到微博请遵守国家法律