simulation - 如何在 LBM 中添加或删除流体(格子 Boltzmann 方法)
问题描述
LBM
重点研究流体簇,利用宏观流体密度和速度计算平衡分布函数,然后利用演化方程实现系统迭代。但是如果我们将相同的流体添加到网格中的格子网格点LBM
或不断减少现有流体,我们应该如何重新计算宏观流体密度和速度?或者应该如何重新计算点阵网格点的分布函数?能否LBM
模拟流体不断添加或减少到系统中的场景?例如,水不断从水龙头流出。
解决方案
传统的格-玻尔兹曼方法(例如二维中的D2Q9格)只能应用于不可压缩流动。简而言之,这意味着进入域的质量不能超过退出域的质量:域内的质量在整个模拟过程中大致相同。通常可压缩的 Navier-Stokes 方程的这种简化不仅可以应用于不可压缩的流体(例如水),还可以应用于像汽车周围的流动这样的低马赫数流动(有关更多详细信息,请参见此处)。然而,传统的格子-玻尔兹曼方法不能描述多相和自由表面流动以及具有汇和源的流动(这些都会导致系统密度的变化)。
不可压缩格子-玻尔兹曼方法中的任何入口或出口条件都属于以下类别之一:
- 周期性边界(从一侧离开域的种群在另一侧再次进入域)
- 周期性流动的压降-周期性边界(例如Zhang/Kwok),但有一个额外的术语来补偿由于摩擦引起的域内的压降
- 速度和压力边界(通常是速度入口和压力出口):存在各种公式,以确保分布的矩实际上是守恒的,并且它们在数值稳定性方面具有不同的特征。它们中的大多数强制执行某种对称性和更高矩的外推。最简单的方法是Zou/He的方法,但其他方法,如Guo 的外推法,对于解析不足和湍流(高雷诺数流)明显更稳定。这篇评论更详细地讨论了不同的内容。
如果您对它的实际工作原理感兴趣,可以查看我用 C++ 编写的用于 2D 和 3D 模拟的小代码。
话虽如此,尽管在研究中存在几种格子-玻尔兹曼方法的变体,它们允许多组分或多相流(例如通过引入额外的分布)或可压缩流(具有更多离散速度的格子和可能的第二个格子),但是它们仍然是外来的,你不会在周围找到很多实现。
推荐阅读
- javascript - Discord.js 机器人禁止命令不发送消息。不和谐.js 11.6.2
- java - SpringBoot,Kafka:java.lang.NoSuchMethodError:org.apache.kafka.clients.producer.Producer.close(Ljava/time/Duration;)V
- excel - 在两张纸上匹配单独的值并打印出是或否
- python - ImportError:无法导入名称“deserialize_keras_object”
- javascript - 如何将多张图片上传到 sanity.io?
- python - 在 Eclipse IDE 中编写 python 代码时,有没有办法不连续进行新的启动配置?
- go - Golang 语法错误:赋值不匹配:4 个变量但 2 个值
- java - 如何传递给控制器方法请求体?
- node.js - Mongoose 深填充虚拟字段
- python - 使用 PDFminer (python) 在 PDF 中查找正则表达式不起作用