当前位置: 首页 > news >正文

格子波尔兹曼LBM在甲烷吸附解吸研究中的应用及文献复现

格子波尔兹曼 LBM 甲烷吸附解吸 文献复现

最近在研究格子波尔兹曼方法(LBM)在甲烷吸附解吸中的应用,顺便复现了一篇文献的模型。LBM作为一种介观尺度的数值模拟方法,在处理多孔介质中的流体流动和传质问题上有着独特的优势。今天就来聊聊这个过程,顺便分享一些代码片段。

首先,LBM的核心思想是通过离散速度模型来模拟流体的宏观行为。对于甲烷吸附解吸问题,我们需要考虑流体在多孔介质中的流动以及甲烷分子在固体表面的吸附和解吸过程。文献中提到的模型是一个二维的D2Q9模型,也就是在二维空间中使用9个离散速度方向。

import numpy as np w = np.array([4/9, 1/9, 1/9, 1/9, 1/9, 1/36, 1/36, 1/36, 1/36]) e = np.array([[0, 0], [1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [-1, 1], [-1, -1], [1, -1]])

接下来是初始化分布函数。文献中使用了简单的均匀初始化方法,即所有方向的分布函数都相等。这里我们假设初始密度为1,速度为零。

def initialize_f(rho, u): f = np.zeros((nx, ny, 9)) for i in range(9): f[:, :, i] = w[i] * rho * (1 + 3 * np.dot(e[i], u) + 9/2 * np.dot(e[i], u)**2 - 3/2 * np.linalg.norm(u)**2) return f

在LBM中,碰撞和迁移是两个关键步骤。碰撞过程通过BGK模型来描述,迁移过程则是将分布函数沿着速度方向移动到相邻的格子。

def collide(f, tau): rho = np.sum(f, axis=2) u = np.zeros((nx, ny, 2)) for i in range(9): u[:, :, 0] += e[i, 0] * f[:, :, i] u[:, :, 1] += e[i, 1] * f[:, :, i] u /= rho[:, :, np.newaxis] feq = np.zeros_like(f) for i in range(9): feq[:, :, i] = w[i] * rho * (1 + 3 * np.dot(e[i], u) + 9/2 * np.dot(e[i], u)**2 - 3/2 * np.linalg.norm(u)**2) f += (feq - f) / tau return f def stream(f): for i in range(9): f[:, :, i] = np.roll(f[:, :, i], e[i], axis=(0, 1)) return f

对于甲烷吸附解吸过程,文献中引入了一个额外的吸附项,用来描述甲烷分子在固体表面的吸附和解吸行为。这个吸附项可以通过一个简单的动力学模型来描述,具体形式如下:

def adsorption(f, k_ads, k_des): rho = np.sum(f, axis=2) q = k_ads * rho - k_des * (1 - rho) return q

最后,我们将这些步骤整合到一个主循环中,进行时间步进模拟。

def simulate(nx, ny, nsteps, tau, k_ads, k_des): f = initialize_f(1, np.zeros((nx, ny, 2))) for step in range(nsteps): f = collide(f, tau) f = stream(f) q = adsorption(f, k_ads, k_des) f[:, :, 0] += q # 假设吸附只影响静止方向 return f

通过这个简单的模型,我们可以模拟甲烷在多孔介质中的吸附解吸过程。当然,实际应用中还需要考虑更多的细节,比如边界条件、多组分流体等。不过,这个模型已经能够很好地展示LBM在处理这类问题上的潜力。

复现文献的过程让我对LBM有了更深的理解,也让我意识到在实际应用中还有很多可以改进的地方。希望这篇博文能对正在研究LBM的朋友有所帮助,也欢迎大家在评论区讨论交流。

http://www.cnnetsun.cn/news/42370.html

相关文章:

  • 终极指南:TUnit服务虚拟化测试实践
  • 速读顶会论文:GoodSpeed - 让分布式LLM推理既快又公平的自适应推测解码框架
  • 基于MATLAB的零件表面缺陷检测系统设计与实现
  • c++类和对象(上)
  • Windows11中使用VS2022编译运行libevent网络库
  • wgpu实例化渲染技术深度解析:从性能瓶颈到GPU并行计算优化
  • 构建下一代实时语音处理框架:dora-rs架构深度解析
  • cmark终极指南:高性能Markdown解析器的完整使用教程
  • 基于Java的安全检查巡视智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产指标智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产水利工程智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 极客时间-DeepSeek应用开发实战
  • Vue.Draggable高效拖拽排序实战指南:5分钟掌握核心用法
  • c语言学习打卡
  • LangChain 文档转换器与字符分割器组件的使用
  • 科研绘图不用愁!虎贲等考 AI 用算法代替画笔,手残党也能轻松搞定学术视觉表达
  • 告别论文恐惧!虎贲等考 AI 化身灵感合伙人,带你解锁课程论文的知识创造之旅
  • ComfyUI-SeedVR2视频超分项目FP8量化技术深度解析
  • 全网最全的软件测试面试八股文(含真题答案+文档)
  • OpenResume专业简历制作工具完整使用指南
  • springboot肿瘤患者康复回访系统_109a2sb0-
  • 【KL 散度】深入理解 Kullback-Leibler Divergence:AI 如何衡量“像不像”的问题
  • 5分钟掌握LIBERO:开启终身机器人学习的革命性平台
  • 文件上传革命:jQuery File Upload如何让开发效率飙升500%
  • SolidWorks三维模型与工程图差距分析介绍
  • COMSOL模拟锌离子电池锌负极电场模型教程:从零开始构建并详细解析源文件,适合初学者的电场建模教学
  • 终极指南:如何用PIKE-RAG打造领域专属的智能问答系统
  • 5分钟从文档小白到OCR专家:Zerox如何让文字识别变得像拍照一样简单
  • RocketMQ如何防止消息丢失?
  • CSS尺寸、盒子模型、定位、浮动与布局(Flex/Grid)