600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门 需要有哪些前置知识?...

lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门 需要有哪些前置知识?...

时间:2022-02-07 00:33:52

相关推荐

lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门 需要有哪些前置知识?...

前段时间做过一些LBM相关的工作,正好借此机会分享一下我当时从零开始的LBM入门之路。

在接触LBM之前,我主要用有限体积法(FVM)来做一些流体力学以及流固耦合的问题。但苦于每次画一个畸变程度小的网格都要耗费很多的精力,所以当时开始了解一些非网格类的算法(或者叫粒子类算法)。在简单查了一下目前一些广泛应用的CFD算法的谱系关系之后,我打算试一试号称编程简单、并行方便的格子Boltzmann方法(Lattice-Boltzmann method, LBM)。(ps:其实我也不太确定LBM算不算粒子类算法,但它的画风确实跟普通的FVM很不一样。)

入门之初自然要拜读一下前人的paper,特别是review。我选的是陈十一院士等人98年在Annual Review of Fluid Mechanics上的综述"Lattice Boltzmann Method for Fluid Flows"。在这里就不放链接了,因为即便是这“短短”36页的综述paper,我大概连着看了一周才算看完,读着读着往回翻几页甚至十几页都是常事。更让人沮丧的是,在看完这篇paper之后,我能清晰地记得整篇文章的框架和行文逻辑(毕竟反复看了不知道多少遍),但当我脑海中浮现出一个流体相关的动力学问题时,我还是不知道该怎么编代码。这是很要命的事情,因为不管我之后是把LBM用在一个具体问题上还是对LBM进行算法上的研究,我都得用代码去实现我的想法。于是,我打算先暂时搁置在LBM理论方面的学习,转而通过写一个自己的LBM程序来熟悉LBM的流程和内在逻辑。

之后我找到了一本看起来挺简明的小册子,是Yuanxun Bao等人写的"Lattice Boltzmann Method for Fluid Simulations"。实在要描述一下当时看到这本小册子的时候的感受,那就是在大作业ddl前的最后一晚,面对着空白的word界面心急如焚的学渣突然收到了学霸发来的他去年交上去而且得了满分的报告,introduction简短而且看起来不费力,method不包罗万象而是直说我只讲D2Q9情况并且给了清晰的算法流程,boundary conditions提供了两种边界条件供你选用,之后的几个算例更是直接飞龙骑脸地告诉你D2Q9条件下的LBM够靠谱,您放心。(抱歉有可能吹过头了,但当时真的满脑子都是“我的LBM有救了[Facepalm]”的想法)在把method、boundary conditions以及第一个算例泊肃叶流看了两三遍之后,我就着手开始自己编程重现这个算例。

最初使用的语言是matlab,因为感觉数据结构比较清晰,改起来也方便。在计算区域内均匀布上

个点,创建

这12个矩阵,每个矩阵的大小都是

,用来存储每一个点处对应的变量值。在初始化这些矩阵之后,进行streaming step,把

这九个矩阵里的变量分别按照规定的方向挪一挪(比如

里的元素统一向右移一格,之后再统一向上移一格,边界处的元素按照边界条件进行处理)。挪完之后,用新得到的这些

算得每个点处的密度

和速度

(相当于更新

这三个矩阵)。最后,进行collision step,用

更新

这9个矩阵。依此续行,直到算到想要的时间步。在debug了几次之后,我得到了跟理论解匹配的稳定流动结果。多亏了这第一个算例的成功,我才有动力继续之后的工作。

之后便是基于这个D2Q9情况下的LBM程序,结合其他论文,实现更多的功能和更好的精度。比如把matlab程序转写成C以加快速度(说起来我测试了一些简单情况下的算例,感觉在算到同样物理时间且LBM格点数与FVM网格数相近的情况下,LBM的计算速度比基于FVM的OpenFOAM要快不少,不知道是不是在复杂边界条件或者高

的算例里会有不同),把二维拓展到三维,把D2Q9拓展到D3Q15、D3Q19,把传统的弱可压模型拓展到不可压模型

的LBM拓展到基于真实物理量

的SHSLBM

稍微总结一下,我觉得LBM对前置知识的要求不是很高。会写代码(常用的语言都行),知道面对的流体问题大概是个什么情况(主要是初始条件和边界条件),就迈过LBM的使用门槛了。理论方面当然要看,@Raymond Fei 的回答里写得很全面了。不过看理论的时候别忘了随时写写代码,测测算例,甚至我觉得对于初学者而言,写LBM代码的熟练度要比对理论的掌握程度更重要。毕竟,与其让一篇paper告诉你弛豫时间

的时候计算会发散,还不如你自己在程序里把

设成0.5,然后看程序输出一堆NAN来得生动形象。

参考^Guo Z , Shi B , Wang N . Lattice BGK Model for Incompressible Navier–Stokes Equation[J]. Journal of Computational Physics, 2000, 165(1):288-306./science/article/pii/S0021999100966166

^Chen S , Martinez D , Mei R . On boundary conditions in lattice Boltzmann methods[J]. Physics of Fluids, 1996, 8(9):2527-0./doi/10.1063/1.869035

^Chen Z , Shu C , Tan D , et al. On improvements of simplified and highly stable lattice Boltzmann method: Formulations, boundary treatment, and stability analysis[J]. International Journal for Numerical Methods in Fluids, ./doi/full/10.1002/fld.4485

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。