格子玻尔兹曼法学习记录(附MATLAB画图源程序)



       感谢群里的朋友们提供帮助!还是老样子,有啥问题Feel free to tell us~毕竟群众力量大嘛~格子玻尔兹曼救星QQ群:293267908。

         流体计算领域中,LBM还是个比较新的思想,最近宝宝正在尝试性的进行研究。首先说一下教材吧。我在某宝买了中文版,杨大勇翻译的,中国工信出版。 还可以看英文原版哈,英文教材链接:https://pan.baidu.com/s/1D6JFR9zp7DGfduvb-4xSUQ,提取码:s5cr。

     开博客一方面自己做个学习记录,也算方便大家看书了。因为第一次用F所以加了很多自己的备注,大家看得难受忽略就好啊。不足之处欢迎大家一同学习。

---------------------------------------------------------------------

     第一章巴拉巴拉的其实说了以下3个事:

     1.1 Boltzmann方程是介观尺度。

     1.2 宏观表现出的温度与压力正比的关系,物理本质上是由于粒子动能与温度正比。

     1.3 所谓分布函数f(c),指的是多个粒子在某速度范围内(dc)的概率。当流体处于热平衡状态时,粒子动量的分布函数是不变的。

     第二章 Boltzmann方程又是啥呢?

     2.1 分布函数变成平衡分布函数之前,总是会变,变的原因是碰撞。分布函数的总变化率就是速率。

     2.2 既然要求解分布函数,就不得不说怎么求碰撞。用平衡分布函数-分布函数,就是变化量的净值,然后除以松弛因子。我个人理解松弛因子是用以控制到达平衡点的速度,即每计算一个时间周期,系统由不平衡状态向平衡状态前进(feq-f)/τ。

     2.3 D1Q3就是1威三个速度矢量,以此类推。

    第三章 扩散

     3.3 分布函数的总和和平衡分布函数的总和都等于因变量。即,流体熵增加,高动能的粒子动能减少而低动能的粒子动能增加,但是总值不变。所以无论是否达到最终平衡,所有动能的总和是不变的,所以可以看到分布函数的总和和平衡分布函数的总和都是因变量。但是feq和f不一定相等。一旦相等了,就是平衡状态了。

     3.5  展开的目的,是获得宏观和介观尺度的关系。

      3.5.2中所谓的不保存前值f(x,t)和为了避免覆盖新值,是因为如果每个点都同时向左向右迁移,会相互覆盖。

   第五章 举个栗子:方腔流。有错误的地方我做了标记。

       call的使用还是要注意输入顺序的。比如collesion(f,feq,rho,w,cy,cx,u,v,omega,n,m),括号里面的引用变量的顺序,子函数和主函数中必须保持顺序一致。

   ! D2Q9,书P141.   等温不可压缩,lid-driven cavity
   !英文版:     《Lattice Boltzmann Method: Fundamentals and Engineering Applications with Computer Codes》
  
   
   !设置参数
    parameter (n=100,m=100)          !设置格子数
    real f(0:8,0:n,0:m)                      !分布函数
    real feq(0:8,0:n,0:m),rho(0:n,0:m)  !局部平衡分布函数
    real w(0:8),cx(0:8) ,cy(0:8)             !0~8,共九个方向的权重因子w(0:8);沿着格子迁移方向的单位矢量c,分别具有xy方向的单位矢量的分量。
    real u(0:n,0:m),v(0:n,0:m)              !xy方向速度
    integer i                                    
    open(2,file='velocity100points.txt')                   !.xls也可以
    open(3,file='uvely.txt')
    open(4,file='vvelx.txt')
    open(8,file='timeu.txt')
    !----------
    uo=0.10                                                !初始速度       
    sumvelo=0.00                                 
    rhoo=5.00                                              !密度
    dx=1.0
    dy=dx
    dt=1.0

  • 19
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
以下是使用Matlab实现格子兹曼计算多相流体中的压强边界的示例代码: ```matlab % 设置模拟参数 nx = 100; % x方向上的格点数 ny = 100; % y方向上的格点数 nt = 1000; % 模拟的时间步数 rho1 = 1.0; % 流体1的密度 rho2 = 2.0; % 流体2的密度 viscosity1 = 0.1; % 流体1的粘度 viscosity2 = 0.2; % 流体2的粘度 tau = 0.6; % 松弛时间 omega = 1 / tau; % 松弛参数 g = [0, -9.8]; % 重力加速度 w = [4/9, 1/9, 1/9, 1/9, 1/9, 1/36, 1/36, 1/36, 1/36]; % 权重系数 % 初始化流场 f = zeros(nx, ny, 9); rho = ones(nx, ny); u = zeros(nx, ny, 2); % 边界条件 p = @(rho) rho * 0.1961 * 0.85; s = zeros(nx, ny); s(:, 1) = 1; % 左边界为固体壁面 % 迭代计算 for t = 1:nt % 计算宏观量 rho = sum(f, 3); u(:, :, 1) = (f(:, :, 2) + f(:, :, 5) + f(:, :, 6) - f(:, :, 4) - f(:, :, 7) - f(:, :, 8)) ./ rho; u(:, :, 2) = (f(:, :, 3) + f(:, :, 5) + f(:, :, 7) - f(:, :, 1) - f(:, :, 6) - f(:, :, 9)) ./ rho; u(isnan(u)) = 0; u(s == 1, :) = 0; % 固体壁面处速度为0 % 计算压强 p1 = p(rho); p2 = p(rho2 - rho); p = p1 + p2; % 计算碰撞 feq = zeros(nx, ny, 9); for i = 1:9 cu = 3 * (i - 1) * (u(:, :, 1) * w(i) + u(:, :, 2) * w(i)); u2 = u(:, :, 1).^2 + u(:, :, 2).^2; feq(:, :, i) = rho .* w(i) .* (1 + cu + 0.5 * cu.^2 - 1.5 * u2); end f = omega * feq + (1 - omega) * f; % 处理边界 f(:, 1, 2) = f(:, 1, 4); f(:, 1, 5) = f(:, 1, 7) + 0.5 * (f(:, 1, 3) - f(:, 1, 1)) + 0.5 * rho(:, 1) .* g(2); f(:, 1, 6) = f(:, 1, 8) + 0.5 * (f(:, 1, 1) - f(:, 1, 3)) - 0.5 * rho(:, 1) .* g(2); f(s == 1, :) = 0; % 固体壁面处速度为0 % 计算流场 for i = 1:9 f(:, :, i) = circshift(f(:, :, i), [0, 0, -i+1]); end for i = 1:9 f(:, :, i) = conv2(f(:, :, i), [1, 1; 1, 1], 'same') - f(:, :, i); end for i = 1:9 f(:, :, i) = circshift(f(:, :, i), [0, 0, i-1]); end end % 输出结果 imagesc(rho) colorbar ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值