24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1144  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

花开时节0931

铁虫 (初入文坛)

[求助] 求助格子boltzmann方法模拟平板间气体流动 已有1人参与

空气以声速从平板间进入,平板厚度10微米,想采用格子boltzmann模拟气体流动,没学过C语言,边学边改。问题还是很大,毕业论文着急,求指导。不胜感激。
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
const int Q=9; //D2Q9模型
const int NX=120;//X方向
const int NY=40;//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,Kn;
void init();
double feq(int k,double rho,double u[2]);
double rhosum[NX][NY] = {0};
double Psum[NX][NY] = {0};

void evolution();
void output(int m) ;
void Error();
int main()
{
    using namespace std;
    init();
    for(n=0; ;n++)
    {
        evolution();
        if (n%1000==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>=100)
             {
                if(n%1000==0) output(n);
                if(error<1.0e-12) break;
             }
        }
    }
    return 0;
}
void init()
{
  dx=1.0;
  dy=1.0;
  P0=0.5;
  Lx=dx*double(NY);
  Ly=dy*double(NX);
  dt=dx;
  c=dx/dt;//1.0
  rho0=1.03;
  Kn=0.5;
  tau_f=8;
//tau_f=P0*Lx*Kn*sqrt(6/3.14)+0.5;
  //Re=8;
// niu=0.1*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[j][0]=0;
        u[j][1]=0;
        rho[j]=rho0;
        u[0][j][0]=0.57;
        for (k=0;k<Q;k++)
        {
            f[j][k]=feq(k,rho[j],u[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<NX;i++)//演化
for(j=1;j<NY;j++)
for(k=0;k<Q;k++)
{
      ip=i-e[k][0];
      jp=j-e[k][1];
      F[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[j][0]=u[j][0];
       u0[j][1]=u[j][1];
       rho[j]=0;
       u[j][0]=0;
       u[j][1]=0;
       for(k=0;k<Q;k++)
       {
           f[j][k]=F[j][k];
           rho[j]+=f[j][k];
           u[j][0]+=e[k][0]*f[j][k];
           u[j][1]+=e[k][1]*f[j][k];
                   rhosum[j] += f[j][k];                  
       }
           Psum[j] = rhosum[j] * c * c / 3;
       u[j][0]/=rho[j];
       u[j][1]/=rho[j];
   }
           
//边界处理
//左右边界  
  

for(i=0;i<=NX;i++)//上下边界
  for(k=0;k<Q;k++)
  {
       rho[0]=rho[1];
       f[0][k]=feq(k,rho[0],u[0])+f[1][k]
       -feq(k,rho[1],u[1]);
       rho[NY]=rho[NY-1];
       u[NY][0]=0;
       u[NY][1]=0;
           u[0][0]=0;
       u[0][1]=0;

       f[NY][k]=feq(k,rho[NY],u[NY])+f[NY-1]
       [k]-feq(k,rho[NY-1],u[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\",\"rhosum\",\"Psum\"\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[j][0]<<","<<u[j][1]<<","<<rhosum[j]<<","<<Psum[j]<<"\n"
        <<endl;
      }
}
void Error()
{
     double temp1,temp2;
     temp1=0;
     temp2=0;
     for(i=1;i<NX;i++)
        for(j=1;j<NY;j++)
        {
             temp1+=(
             (u[j][0]-u0[j][0])*(u[j][0]-u0[j][0])
             +(u[j][1]-u0[j][1])*(u[j][1]-u0[j][1]));
              temp2+=
             (u[j][0]*u[j][0]+u[j][1]*u[j][1]);
                        
        }
    temp1=sqrt(temp1);
    temp2=sqrt(temp2);
    error=temp1/(temp2);
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

花开时节0931

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by 老大读书 at 2015-11-24 23:28:52
有什么问题

想请问下有没有压力驱动的程序参考,现在只会速度驱动
5楼2015-12-29 10:43:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

老大读书

铜虫 (正式写手)

2楼2015-11-24 23:28:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤694

至尊木虫 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
你是根据何雅玲书里的程序改的?没细看,首先她程序里是不可压模型,速度要保证小于0.3马赫,而你的问题是可压流,目前最常用的可压模型是多速模型吧

发自小木虫Android客户端
人就得逼自己一把
3楼2015-11-24 23:39:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

孤独的漫步

木虫 (小有名气)

为啥里面程序的‘ ’都没了。。。
你必须非常努力,才能看起来毫不费力
4楼2015-11-29 19:43:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 289 分105500药学专硕求调剂(找B区学校) +5 白云123456789 2026-04-13 5/250 2026-04-19 18:12 by Equinoxhua
[考研] 291求调剂 +11 关忆北. 2026-04-14 11/550 2026-04-19 17:16 by 中豫男
[考研] 求调剂 +10 小聂爱学习 2026-04-16 12/600 2026-04-19 16:51 by 中豫男
[考研] 085404 22408 309分求调剂 +10 lzmk 2026-04-14 11/550 2026-04-19 16:42 by 中豫男
[考研] 求调剂 +6 苦命人。。。 2026-04-18 7/350 2026-04-19 16:27 by 中豫男
[考研] 327求调剂 +27 Xxjc1107. 2026-04-13 30/1500 2026-04-19 08:22 by cuisz
[考研] 294求调剂 +15 淡然654321 2026-04-15 15/750 2026-04-19 08:20 by cuisz
[考研] 320求调剂 +5 深郊akm 2026-04-17 5/250 2026-04-18 19:52 by 王珺璞
[考研] 收到复试调剂但是去不了 +8 小蜗牛* 2026-04-16 8/400 2026-04-18 11:15 by zixin2025
[考研] 急需调剂 +9 绝不放弃22 2026-04-15 10/500 2026-04-18 08:09 by chixmc
[考博] 申博/考博 +3 啃面包的小书虫 2026-04-17 4/200 2026-04-17 23:54 by 阳阳阳^_^
[考研] 一志愿中科大材料与化工,353分还有调剂学校吗 +10 否极泰来2026 2026-04-15 12/600 2026-04-17 17:54 by mapenggao
[考研] 295分求调剂 +5 ?要上岸? 2026-04-17 5/250 2026-04-17 16:51 by fenglj492
[考研] 322求调剂 +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
[考研] 一志愿沪9,生物学326求调剂 +9 刘墨墨 2026-04-15 9/450 2026-04-16 17:14 by 崔崔崔cccc
[考研] 26药学专硕105500求调剂 +6 喽哈加油 2026-04-13 7/350 2026-04-16 14:31 by zhouxiaoyu
[考研] 一志愿A区211,22408 321求调剂 +6 随心所欲☆ 2026-04-15 7/350 2026-04-15 21:45 by lbsjt
[考研] 297工科调剂? +14 河南农业大学-能 2026-04-13 15/750 2026-04-15 13:25 by 黑科技矿业
[考研] 245求调剂 +6 冰糖橘?汽水 2026-04-13 10/500 2026-04-14 10:49 by jyl0317
[考研] 一志愿中南大学 0855 机械 286 求调剂 +11 不会吃肉 2026-04-12 11/550 2026-04-13 21:59 by bljnqdcc
信息提示
请填处理意见