Matlab实现格子玻尔兹曼方法(Lattice Boltzmann Method,LBM)模拟

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% cylinder.m: Flow around a cyliner, using LBM

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% This program is free software; you can redistribute it and/or

% modify it under the terms of the GNU General Public License

% as published by the Free Software Foundation; either version 2

% of the License, or (at your option) any later version.

% This program is distributed in the hope that it will be useful,

% but WITHOUT ANY WARRANTY; without even the implied warranty of

% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

% GNU General Public License for more details.

% You should have received a copy of the GNU General Public

% License along with this program; if not, write to the Free

% Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

% Boston, MA  02110-1301, USA.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear

% GENERAL FLOW CONSTANTS

lx         = 250;

ly         = 51;

obst_x = lx/5+1;   % position of the cylinder; (exact

obst_y = ly/2+1;   % y-symmetry is avoided)

obst_r = ly/10+1;  % radius of the cylinder

uMax  = 0.02;      % maximum velocity of Poiseuille inflow

Re     = 100;      % Reynolds number

nu    = uMax * 2.*obst_r / Re;   % kinematic viscosity

omega  = 1. / (3*nu+1./2.);      % relaxation parameter

maxT   = 400000;   % total number of iterations

tPlot  = 5;        % cycles

% D2Q9 LATTICE CONSTANTS

t  = [4/9, 1/9,1/9,1/9,1/9, 1/36,1/36,1/36,1/36];

cx = [  0,   1,  0, -1,  0,    1,  -1,  -1,   1];

cy = [  0,   0,  1,  0, -1,    1,   1,  -1,  -1];

opp = [ 1,   4,  5,  2,  3,    8,   9,   6,   7];

col = [2:(ly-1)];

[y,x] = meshgrid(1:ly,1:lx);

obst = (x-obst_x).^2 + (y-obst_y).^2 <= obst_r.^2;

obst(:,[1,ly]) = 1;

bbRegion = find(obst);

% INITIAL CONDITION: (rho=0, u=0) ==> fIn(i) = t(i)

fIn = reshape( t' * ones(1,lx*ly), 9, lx, ly);

% MAIN LOOP (TIME CYCLES)

for cycle = 1:maxT

% MACROSCOPIC VARIABLES

rho = sum(fIn);

ux  = reshape ( ...

(cx * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho;

uy  = reshape ( ...

(cy * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho;

% MACROSCOPIC (DIRICHLET) BOUNDARY CONDITIONS

% Inlet: Poiseuille profile

L = ly-2; y = col-1.5;

ux(:,1,col) = 4 * uMax / (L*L) * (y.*L-y.*y);

uy(:,1,col) = 0;

rho(:,1,col) = 1 ./ (1-ux(:,1,col)) .* ( ...

sum(fIn([1,3,5],1,col)) + ...

2*sum(fIn([4,7,8],1,col)) );

% Outlet: Zero gradient on rho/ux

rho(:,lx,col) = rho(:,lx-1,col);

uy(:,lx,col)  = 0;

ux(:,lx,col)  = ux(:,lx-1,col);

% COLLISION STEP

for i=1:9

cu = 3*(cx(i)*ux+cy(i)*uy);

fEq(i,:,:)  = rho .* t(i) .* ...

( 1 + cu + 1/2*(cu.*cu) ...

- 3/2*(ux.^2+uy.^2) );

fOut(i,:,:) = fIn(i,:,:) - ...

omega .* (fIn(i,:,:)-fEq(i,:,:));

end

% MICROSCOPIC BOUNDARY CONDITIONS

for i=1:9

% Left boundary

fOut(i,1,col) = fEq(i,1,col) + ...

18*t(i)*cx(i)*cy(i)* ( fIn(8,1,col) - ...

fIn(7,1,col)-fEq(8,1,col)+fEq(7,1,col) );

% Right boundary

fOut(i,lx,col) = fEq(i,lx,col) + ...

18*t(i)*cx(i)*cy(i)* ( fIn(6,lx,col) - ...

fIn(9,lx,col)-fEq(6,lx,col)+fEq(9,lx,col) );

% Bounce back region

fOut(i,bbRegion) = fIn(opp(i),bbRegion);

end

% STREAMING STEP

for i=1:9

fIn(i,:,:) = ...

circshift(fOut(i,:,:), [0,cx(i),cy(i)]);

end

% VISUALIZATION

if (mod(cycle,tPlot)==0)

u = reshape(sqrt(ux.^2+uy.^2),lx,ly);

u(bbRegion) = nan;

imagesc(u');

axis equal off; drawnow

end

end

lbm matlab,LBM的matlab代码相关推荐

  1. matlab中调用java代码_Matlab中调用第三方Java代码

    在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...

  2. 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法:检查MATLAB代码的 ...

  3. 【Matlab开发】MATLAB编译C/C++代码

    在使用MATLAB编译C/C++代码时,C/C++代码中要使用一个mexFunction函数,那么这个函数是如何定义,在编译时又是如何实现的呢?下面我将使用实例进行说明. 如一个简单的函数: doub ...

  4. python直方图均衡化代码_基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  5. matlab中codegen是什么,从 MATLAB 代码生成 C/C++ 代码。 - MATLAB codegen - MathWorks 中国...

    -c生成 C/C++ 代码,但不调用 make 命令. -config:dll使用默认配置参数生成动态 C/C++ 库. -config:exe使用默认配置参数生成静态 C/C++ 可执行文件. -c ...

  6. matlab时频分析代码

    当进行时频分析时,MATLAB提供了多种函数和工具箱,下面是一个简单的MATLAB时频分析代码示例: 假设我们有一个信号x和一个采样频率fs.以下是使用MATLAB信号处理工具箱的代码: ```mat ...

  7. 自适应滤波器设计及matlab实现,自适应滤波器设计及Matlab实现附程序代码

    自适应滤波器设计及Matlab实现附程序代码 维纳自适应滤波器设计及 Matlab 实现摘 要本文从随机噪声的特性出发,分析了传统滤波和自适应滤波基本工作原理和性能,以及滤波技术的现状和发展前景.然后 ...

  8. 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目

    基于matlab数字图像处理GUI代码 代码: function varargout = Image_processing_GUI(varargin) % IMAGE_PROCESSING_GUI M ...

  9. 智能群算法的CEC2017测试集 纯matlab版以及matlab与C++版 代码以及详细使用说明

    CEC2017 用于智能群算法性能测试评价.废话少说.我在网上搜不到纯matlab代码.滥竽充数的太多.这里我给大家分享 纯matlab版,MATLAB与c++交叉编译版的CEC2017. 我的文件: ...

  10. Romberg积分法MATLAB实现(附代码、实例、详解)

    第一部分:问题分析 (1)实验题目:龙贝格积分算法 具体实验要求:用matlab编写龙贝格积分的代码,要求代码实现用户输入了被积函数.积分区间.精度之后,龙贝格积分表(T-数表). (2)实验目的:让 ...

最新文章

  1. Python的re模块 --- 正则表达式操作
  2. 演示如何使用application.yml文件
  3. Ubuntu 18.04 固定ip 设置方法
  4. Kafka 入门和 Spring Boot 集成
  5. Python之分组级运算——【transform()方法、apply()方法】
  6. 学生渐进片add如何给_【收藏】为青少年验配渐进多焦点时,如何选择合适ADD?...
  7. 毕设日志——Faster RCNN
  8. 2.1、StopWatch 启动与停止(ok)
  9. PagerSwitch tab样式加上下拉刷新(一)
  10. 微软笔试题 《Image Encryption》
  11. 【工程光学】理想光学系统
  12. 微信小程序tabBar改变图片大小方法
  13. Windows过滤驱动 WFP代码基本流程的剖析 bypass前期准备
  14. 10个类脑计算最值得关注玩家 |量子位智库报告(附下载)
  15. 关于代码选择省份和城市?
  16. Linux usb 3. Host 详解
  17. linux增加预读缓存区大小,Linux使用blockdev命令调整文件预读大小的方法
  18. LATEX数学公式教程
  19. 伯克利计算机与经济学双专业,伯克利有经济学专业排名,最新的深入解析
  20. 九点标定,贴合,视觉引导定位通用方法

热门文章

  1. Irvue for Mac(壁纸软件)v2.7破解版
  2. 梆梆安全亮相网络安全博览会 矢志保护智能生活
  3. matlab怎么增加图例,matlab中legend函数在添加图例时的使用方法 - matlab资源网
  4. Hadoop和一般数据库的区别?
  5. 利用广义可加模型对分类数据进行曲线拟合
  6. PHP分页方法,中间加省略号
  7. 下载风云二号卫星总云量数据
  8. 如何开启谷歌浏览器的实验室功能
  9. c c++操作windows的注册表项
  10. 海思HI35xx平台CPU温度监测