#include<iostream>
#include<cmath>
#include<cstdlib>
#include<iomanip>
#include<fstream>
#include<sstream>
#include<string>
using namespace std;
const int Q=9; //D2Q9模型
const int NX=256; //X方向
const int NY=256; //Y方向
const double U=0.1; //顶盖速度
int e[Q][2]={{0,0},{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,1},{-1,-1},{1,-1}};
double w[Q]={4.0/9,1.0/9,1.0/9,1.0/9,1.0/9,1.0/36,1.0/36,1.0/36,1.0/36};
double rho[NX+1][NY+1],u[NX+1][NY+1][2],u0[NX+1][NY+1][2],f[NX+1][NY+1][Q],F[NX+1][NY+1][Q];
int i,j,k,ip,jp,n;
double c,Re,dx,dy,Lx,Ly,dt,rho0,P0,tau_f,niu,error;
void init();
double feq(int k,double rho,double u[2]);
void evolution();
void output(int m);
void Error();
int main()
{
using namespace std;
init();
for(n=0;;n++)
{
evolution();
if(n%100==0)
{
Error();
cout<<"The"<<n<<"th computation result:"<<endl<<"The u,v of point(NX/2,NY/2) is:"<<setprecision(6)<<u[NX/2][NY/2][0]<<","<<u[NX/2][NY/2][1]<<endl;
cout<<"The max relative error of uv is:"<<setiosflags(ios::scientific)<<error<<endl;
if(n>=1000)
{
if(n%1000==0) output(n);
if(error<1.0e-6) break;
}
}
}
return 0;
}
void init()
{
dx=1.0;
dy=1.0;
Lx=dx*double(NY);
Ly=dy*double(NX);
dt=dx;
c=dx/dt; //1.0
rho0=1.0;
Re=1000;
niu=U*Lx/Re;
tau_f=3.0*niu+0.5;
std::cout<<"tau_f="<<tau_f<<endl;
for(i=0;i<=NX;i++) //初始化
for(j=0;j<=NY;j++)
{
u[i][j][0]=0;
u[i][j][1]=0;
rho[i][j]=rho0;
u[i][NY][0]=U;
for(k=0;k<Q;k++)
{
f[i][j][k]=feq(k,rho[i][j],u[i][j]);
}
}
}
double feq(int k,double rho,double u[2])
{
double eu,uv,feq;
eu=(e[k][0]*u[0]+e[k][1]*u[1]);
uv=(u[0]*u[0]+u[1]*u[1]);
feq=w[k]*rho*(1.0+3.0*eu+4.5*eu*eu-1.5*uv);
return feq;
}
void evolution()
{
for(i=1;i<NY;i++) //演化
for(j=1;j<NY;j++)
for(k=0;k<Q;k++)
{
ip=i-e[k][0];
jp=j-e[k][1];
F[i][j][k]=f[ip][jp][k]+(feq(k,rho[ip][jp],
u[ip][jp])-f[ip][jp][k])/tau_f;
}
for(i=1;i<NX;i++) //计算宏观量
for(j=1;j<NY;j++)
{
u0[i][j][0]=u[i][j][0];
u0[i][j][1]=u[i][j][1];
rho[i][j]=0;
u[i][j][0]=0;
u[i][j][1]=0;
for(k=0;k<Q;k++)
{
f[i][j][k]=F[i][j][k];
rho[i][j]+=f[i][j][k];
u[i][j][0]+=e[k][0]*f[i][j][k];
u[i][j][1]+=e[k][1]*f[i][j][k];
}
u[i][j][0]/=rho[i][j];
u[i][j][1]/=rho[i][j];
}
//边界处理
for(j=1;j<NY;j++) //左右边界
for(k=0;k<Q;k++)
{
rho[NX][j]=rho[NX-1][j];
f[NX][j][k]=feq(k,rho[NX][j],u[NX][j])+f[NX-1][j][k]-feq(k,rho[NX-1][j],u[NX-1][j]);
rho[0][j]=rho[1][j];
f[0][j][k]=feq(k,rho[0][j],u[0][j])+f[1][j][k]-feq(k,rho[1][j],u[1][j]);
}
for(i=0;i<=NX;i++)//上下边界
for(k=0;k<Q;k++)
{
rho[i][0]=rho[i][1];
f[i][0][k]=feq(k,rho[i][0],u[i][0])+f[i][1][k]-feq(k,rho[i][1],u[i][1]);
rho[i][NY]=rho[i][NY-1];
u[i][NY][0]=U;
f[i][NY][k]=feq(k,rho[i][NY],u[i][NY])+f[i][NY-1][k]-feq(k,rho[i][NY-1],u[i][NY-1]);
}
}
void output(int m) //输出
{
ostringstream name;
name<<"cavity_"<<m<<".dat";
ofstream out(name.str().c_str());
out<<"Title=\"LBM Lid Driven Flow\"\n"<<"VARIABLES = \"X\",\"Y\",\"U\",\"V\"\n"<<"ZONE T=\"BOX\",I="<<NX+1<<",J="<<NY+1<<",F=POINT"<<endl;
for(j=0;j<=NY;j++)
for(i=0;i<=NX;i++)
{
out<<double(i)/Lx<<" "
<<double(j)/Ly<<" "<<u[i][j][0]<<" "<<u[i][j][1]<<endl;
}
}
void Error()
{
double temp1,temp2;
temp1=0;
temp2=0;
for(i=1;i<NX;i++)
for(j=1;j<NY;j++)
{
temp1 +=(
(u[i][j][0]-u0[i][j][0])*(u[i][j][0]-u0[i][j][0])+(u[i][j][1]-u0[i][j][1])*(u[i][j][1]-u0[i][j][1]));
temp2 +=(u[i][j][0]*u[i][j][0]+u[i][j][1]*u[i][j][1]);
}
temp1=sqrt(temp1);
temp2=sqrt(temp2);
error=temp1/(temp2+1e-30);
}
没有合适的资源?快使用搜索试试~ 我知道了~
C++LBM顶盖驱动流.zip_D2G9_LBM_格子Boltzmann方法的D2G9程序_顶盖驱动_顶盖驱动程序
共65个文件
dat:52个
pdb:2个
cpp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 196 浏览量
2022-09-24
22:50:57
上传
评论 3
收藏 38.71MB ZIP 举报
温馨提示
fortran语言,,顶盖驱动流,格子Boltzmann方法
资源详情
资源评论
资源推荐
收起资源包目录
C++LBM顶盖驱动流.zip (65个子文件)
C++LBM顶盖驱动流
cavity_31000.dat 2.56MB
cavity_6000.dat 2.63MB
cavity_36000.dat 2.56MB
cavity_8000.dat 2.63MB
cavity_13000.dat 2.61MB
D2Q9—c++.dsp 3KB
cavity_21000.dat 2.59MB
D2Q9—c++.ncb 33KB
cavity_20000.dat 2.59MB
cavity_11000.dat 2.62MB
cavity_37000.dat 2.56MB
cavity_10000.dat 2.62MB
cavity_25000.dat 2.57MB
cavity_28000.dat 2.57MB
cavity_27000.dat 2.57MB
cavity_38000.dat 2.55MB
cavity_42000.dat 2.55MB
cavity_4000.dat 2.64MB
cavity_33000.dat 2.56MB
cavity_39000.dat 2.55MB
D2Q9—c++.dsw 543B
cavity_19000.dat 2.59MB
D2Q9—c++.opt 48KB
cavity_1000.dat 2.68MB
cavity_2000.dat 2.68MB
cavity_35000.dat 2.56MB
cavity_30000.dat 2.56MB
cavity_52000.dat 2.55MB
cavity_9000.dat 2.63MB
cavity_14000.dat 2.61MB
cavity_23000.dat 2.58MB
cavity_41000.dat 2.55MB
cavity_34000.dat 2.56MB
cavity_50000.dat 2.55MB
cavity_22000.dat 2.58MB
cavity_48000.dat 2.55MB
cavity_46000.dat 2.55MB
cavity_44000.dat 2.55MB
cavity_47000.dat 2.55MB
D2Q9—c++.cpp 4KB
cavity_17000.dat 2.6MB
D2Q9—c++.plg 767B
cavity_32000.dat 2.56MB
cavity_49000.dat 2.55MB
cavity_26000.dat 2.57MB
cavity_7000.dat 2.63MB
cavity_5000.dat 2.64MB
cavity_15000.dat 2.6MB
cavity_51000.dat 2.55MB
Debug
D2Q9—c++.pch 2.17MB
D2Q9—c++.exe 588KB
vc60.idb 73KB
D2Q9—c++.obj 285KB
vc60.pdb 108KB
D2Q9—c++.pdb 1.08MB
D2Q9—c++.ilk 821KB
cavity_29000.dat 2.57MB
cavity_12000.dat 2.61MB
cavity_16000.dat 2.6MB
cavity_40000.dat 2.55MB
cavity_43000.dat 2.55MB
cavity_3000.dat 2.66MB
cavity_45000.dat 2.55MB
cavity_18000.dat 2.59MB
cavity_24000.dat 2.58MB
共 65 条
- 1
weixin_42653672
- 粉丝: 93
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2