




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附录E 二维不可压缩黏性流体流动问题的有限体积算法与计算程序二维流动是一个不可压缩黏性流动的典型流动,并有解析解,可以用来检验数值算法计算精度和可靠性。对它采用有限体积算法一阶迎风型离散格式进行数值求解。同时,为了初学者入门和练习方便,这里给出了用语言和语言编写的计算二维不可压缩黏性流体流动问题计算程序,供大家学习参考。E-1利用有限体积算法一阶迎风型离散格式求解二维不可压缩黏性流体流动问题1.二维不可压缩黏性流体流动问题的提法二维不可压缩黏性流体流动:有两个无限长平板,间距为,两板之间充满密度为1、静止的不可压缩黏性流体。无限长平板组成的通道两端压力相等,下板固定不动,上板以量纲为一的速度1自左向右平移运动(图E.1)。图E.1二维不可压缩黏性流体流动问题示意图2. 基本方程组、初始条件和边界条件设流体是黏性流体。二维流动问题在数学上可以由二维不可压缩黏性流动方程组来表示,把它写成通用变量的微分方程组形式,有: (E.1)其中为变量在水平方向的流速,为在垂直方向的流速,为黏度,为源项。源项中不仅包含压力梯度项,也包含时间导数项。初始条件:上板以量纲为一的速度1沿着上壁面方向自左向右运动。边界条件:流动速度在上下壁面可采用无滑移边界条件,在左右两端采用自由输出边界条件;压强采用自由输出边界条件。3. 计算网格划分和控制体单元与节点定义采用交错网格。图E.2和图E.3是计算网格、控制体单元和节点示意图。图E.3计算采用的交错网格示意图图E.2方腔流动计算网格、控制体单元和节点示意图节点所在主控制体单元如图E.2中有阴影部分所示。在方向与节点相邻的节点为和,在方向与节点相邻的节点为和,主控制单元界面分别为。压力和速度分别在三套不同网格中,如图E.3中有阴影部分所示。4. 有限体积算法离散格式对方程(E.1)在图E.2所示节点主控制单元内积分,有:(E.2)由于不可压缩黏性流体流动是二维问题,因此,控制体单元体积仅是面积,而它的边界是长度。设 ,利用定理,可将方程(E.2)改写成如下有限体积离散格式: (E.3)对上式中采用一阶向前差分近似,则有: (E.4)同时记: (E.5) (E.6)则式(E.2)写成: (E.7)式中都是主控制单元内节点上的已知量,如果利用差分计算得到主控制单元边界上的流通量,就可以求出节点上的未知量。、为了便于讨论,现对一维对流扩散方程的一阶迎风型离散格式进行分析。首先讨论无源项一维对流扩散方程的一阶迎风型离散格式。当流动为正向时,即,主控制单元界面取值: (E.8)则方程(E.7)离散为: (E.9)当流动为负向时,即,控制体单元界面取值为: (E.10)则方程(E.7)离散为: (E.11)将两种流动方向离散格式(E.9)和(E.11)合并后,得到统一的一维对流扩散方程一阶迎风型离散格式表达式: (E.12)式中 (E.12a)同理,可以得到带有源项的二维对流扩散方程的一阶迎风型离散格式: (E.13)式中 (E.13a)源项为: (E.14)若把表示为时刻的动量,表示时刻的动量,则可以得到源项离散格式为: (E.15)最后,得到带有源项的二维对流扩散方程有限体积算法一阶迎风型显式离散格式:(E.16)式中系数为一阶迎风格式中各对应系数。5. 计算结果分析利用上述有限体积算法一阶迎风型离散格式和相应的初始条件和边界条件,采用MAC算法中压力耦合方程,求解二维不可压缩黏性流体流动问题。图E.4 给出了二维不可压缩黏性流体流动沿y方向的速度分布,并和精确解进行了比较,十分吻合。图E.5是二维不可压缩黏性流体流动水平x方向的速度云图。图E.6是二维不可压缩黏性流体流动速度矢量分布图。图E.4 二维不可压缩黏性流体流动沿y方向的速度分布 图E.5 二维不可压缩黏性流体流动水平x方向速度云图图E.6 二维不可压缩黏性流体流动速度矢量分布图E-2 二维不可压缩黏性流体流动问题的数值计算源程序1. 语言源程序/ fvm_upwind_MAC_couette.cpp/*-以一阶迎风型格式和压力迭代求解二维流动问题(C语言版本)-*/#include #include #include #define MX 100 /最大网格数#define MY 20 /最大网格数#define Lambda 0.002 /Chorin压力迭代常数,直接影响收敛性#define Re 100.00 /雷诺数#define dt 0.0005 /时间步长double uMX+1MY+2,vMX+2MY+1,pMX+2MY+2,unMX+1MY+2,vnMX+2MY+1;/全局变量double max(double a,double b) /定义max函数double c;if(ab)c=b;elsec=a;return c;/*- 初始化 输入: 无; 输出:u、v、p、dx、dy ,初始速度、压强和空间步长。-*/void init(double uMX+1MY+2,double vMX+2MY+1,double pMX+2MY+2,double& dx,double& dy) int i,j;dx=1.0/MX;dy=0.2/MY; for(i=0;i=MX;i+)for(j=0;j=MY+1;j+)uij=0.0;if(j=MY+1) uij=2.0;for(i=0;i=MX+1;i+)for(j=0;j=MY;j+) vij=0.0;for(i=0;i=MX+1;i+)for(j=0;j=MY+1;j+) pij=1.0;/*-迭代更新压强输入:u、v、p、dx、dy ,n时刻速度、压强、空间步长;输出:p ,n+1时刻压强。-*/void getp(double uMX+1MY+2,double vMX+2MY+1,double pMX+2MY+2,double dx,double dy)double dMX+2MY+2;int i,j;for(i=1;i=MX;i+)for(j=1;j=MY;j+) dij=(uij-ui-1j)/dx + (vij-vij-1)/dy;for(i=1;i=MX;i+)for(j=1;j=MY;j+)pij=pij-Lambda*dij;for(i=1;i=MX;i+)pi0=pi1;piMY+1=piMY;for(j=1;j=MY;j+)p0j=p1j;pMX+1j=pMXj;/*-一阶迎风格式输入:u、v、p、dx、dy ,n时刻速度、n+1时刻压强,空间步长;输出:un、vn ,n+1时刻速度。-*/void upwind(double uMX+1MY+2,double vMX+2MY+1,double pMX+2MY+2,double unMX+1MY+2,double vnMX+2MY+1,double dx,double dy) int i,j; double aw,ae,as,an,df,ap,miu; miu=1.0/Re; for(i=1;i=MX-1;i+) for(j=1;j=MY;j+) aw=miu+max(0.5*(ui-1j+uij)*dy,0.0); ae=miu+max(0.0,-0.5*(uij+ui+1j)*dy); as=miu+max(0.5*(vij-1+vi+1j-1)*dx,0.0); an=miu+max(0.0,-0.5*(vij+vi+1j)*dx); df=0.5*(ui+1j-ui-1j)*dy+0.5*(vij+vi+1j-vij-1-vi+1j-1)*dx; ap=aw+ae+as+an+df; unij=uij+dt/dx/dy*(-ap*uij+aw*ui-1j+ae*ui+1j+as*uij-1+an*uij+1)-dt*(pi+1j-pij)/dx; /边界条件 for(i=1;i=MX-1;i+) uni0=-uni1; uniMY+1=2.0-uniMY; for(j=0;j=MY+1;j+) un0j=un1j; unMXj=unMX-1j; for(i=1;i=MX;i+) for(j=1;j=MY-1;j+) aw=miu+max(0.5*(ui-1j+ui-1j+1)*dy,0.0); ae=miu+max(0.0,-0.5*(uij+uij+1)*dy); as=miu+max(0.5*(vij-1+vij)*dx,0.0); an=miu+max(0.0,-0.5*(vij+vij+1)*dx); df=0.5*(uij+uij+1-ui-1j-ui-1j+1)*dy+0.5*(vij+1-vij-1)*dx; ap=aw+ae+as+an+df; vnij=vij+dt/dx/dy*(-ap*vij+aw*vi-1j+ae*vi+1j+as*vij-1+an*vij+1)-dt*(pij+1-pij)/dy; /边界条件 for(i=1;i=MX;i+) vni0=0.0; vniMY=0.0; for(j=0;j=MY;j+) vn0j=-vn1j; vnMX+1j=-vnMXj; /*-格式输出,采用数据格式画图输入:u、v、p、dx、dy ,最后结果;输出:无。-*/void output(double uMX+1MY+2,double vMX+2MY+1,double pMX+2MY+2,double dx,double dy)double uo,vo,po;int i,j;FILE *fp;fp=fopen(Result.plt,w);fprintf(fp,variables=x,y,u,v,pnzone i=%d,j=%d,f=pointrn,MX+1,MY+1);for(j=0;j=MY;j+)for(i=0;i1e-6 & step1e6) /err,收敛限制;step,迭代次数限制err=0.0;getp(u,v,p,dx,dy); /更新压强upwind(u,v,p,un,vn,dx,dy); /更新速度for(i=0;i=MX;i+)for(j=0;jerr) err=value;uij=unij;for(i=0;i=MX+1;i+)for(j=0;jerr) err=value;vij=vnij;printf(err=%len,err);output(u,v,p,dx,dy); /输出结果-2. 语言源程序 program fvm_upwind_MAC_couette!-以一阶迎风型离散格式和压力迭代求解二维流动问题(语言版本)!- parameter(mx=101,my=21) implicit double precision(a-h,o-z) dimension u(mx,my+1),v(mx+1,my),p(mx+1,my+1),un(mx,my+1),vn(mx+1,my) double precision lambda integer step re=100. !雷诺数 dt=0.0005 !时间步长 lambda=0.002 !Chorin压力迭代常数,直接影响收敛性 dx=1.0d0/(mx-1) dy=0.2d0/(my-1) step=0 err=100. call initial(u,v,p)!初始化 do while(err1e-6.and.steperr) err=temp u(i,j)=un(i,j) enddo enddo do i=1,mx+1 do j=1,my temp=abs(v(i,j)-vn(i,j)/dt if(temperr) err=temp v(i,j)=vn(i,j) enddo enddo write(*,*) err=,err enddo call output(u,v,p,mx,my,dx,dy) !输出 End!-!初始化!输入:无;!输出:u、v、p,初始速度、压强。!- subroutine initial(u,v,p) parameter(mx=101,my=21) double precision u(mx,my+1),v(mx+1,my),p(mx+1,my+1) do i=1,mx+1 do j=1,my+1 p(i,j)=1.0 enddo enddo do i=1,mx do j=1,my+1 u(i,j)=0.0 if(j=my+1) u(i,j)=2.0 enddo enddo do i=1,mx+1 do j=1,my v(i,j)=0.0 enddo enddo endsubroutine!-! Chorin压力迭代!输入:u、v、p、mx、my、dx、dy、lambda ,n时刻速、压强、其他各量;!输出:p ,n+1时刻压强。!- subroutine calp(u,v,p,mx,my,dx,dy,lambda) implicit double precision(a-h,o-z)dimension u(mx,my+1),v(mx+1,my),p(mx+1,my+1),d(mx+1,my+1) double precision lambda do i=2,mx do j=2,my d(i,j)=(u(i,j)-u(i-1,j)/dx+(v(i,j)-v(i,j-1)/dy enddo enddo do i=2,mx do j=2,myp(i,j)=p(i,j)-lambda*d(i,j) enddo enddo do i=2,mx p(i,1)=p(i,2) p(i,my+1)=p(i,my) enddo do j=1,my+1 p(1,j)=p(2,j) p(mx+1,j)=p(mx,j) enddo endsubroutine!-!一阶迎风型离散格式!输入:u、v、pn、mx、my、dx、dy、dt、re ,n时刻速度、n+1时刻压强、其他各量;!输出:un,vn,n+1时刻速度。!- subroutine upwind(u,v,pn,un,vn,mx,my,dx,dy,dt,re) implicit double precision(a-h,o-z) dimension u(mx,my+1),v(mx+1,my),pn(mx+1,my+1),un(mx,my+1),vn(mx+1,my) double precision miu miu=1.0/re do i=2,mx-1 do j=2,my aw=miu+max(0.5*(u(i-1,j)+u(i,j)*dy,0.0) ae=miu+max(0.0,-0.5*(u(i,j)+u(i+1,j)*dy) as=miu+max(0.5*(v(i,j-1)+v(i+1,j-1)*dx,0.0) an=miu+max(0.0,-0.5*(v(i,j)+v(i+1,j)*dx) df=0.5*(u(i+1,j)-u(i-1,j)*dy+0.5*(v(i,j)+v(i+1,j)-v(i,j-1)-v(i+1,j-1)*dx ap=aw+ae+as+an+df un(i,j)=u(i,j)+dt/dx/dy*(-ap*u(i,j)+aw*u(i-1,j)+ae*u(i+1,j)+as*u(i,j-1)+an*u(i,j+1) & -dt*(pn(i+1,j)-pn(i,j)/dx enddo enddo!- do i=2,mx-1 un(i,1)=-un(i,2) un(i,my+1)=2.0-un(i,my) enddo do j=1,my+1 un(1,j)=un(2,j) un(mx,j)=un(mx-1,j) enddo!u边界条件!-!- do i=2,mx do j=2,my-1 aw=miu+max(0.5*(u(i-1,j)+u(i-1,j+1)*dy,0.0) ae=miu+max(0.0,-0.5*(u(i,j)+u(i,j+1)*dy) as=miu+max(0.5*(v(i,j-1)+v(i,j)*dx,0.0) an=miu+max(0.0,-0.5*(v(i,j)+v(i,j+1)*dx) df=0.5*(u(i,j)+u(i,j+1)-u(i-1,j)-u(i-1,j+1)*dy+0.5*(v(i,j+1)-v(i,j-1)*dx ap=aw+ae+as+an+df vn(i,j)=v(i,j)+dt/dx/dy*(-ap*v(i,j)+aw*v(i-1,j)+ae*v(i+1,j)+as*v(i,j-1)+an*v(i,j+1) & -dt*(pn(i,j+1)-pn(i,j)/dy enddo enddo!- do i=2,mx vn(i,1)=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年眼泪诊断技术试题答案及解析
- 玉石检验员应急处置考核试卷及答案
- 自动驾驶车辆仿真测试与验证创新创业项目商业计划书
- 渔业捕捞大数据分析与预测创新创业项目商业计划书
- 电商支付风险监控与防范创新创业项目商业计划书
- 动物毛发清洁工具创新创业项目商业计划书
- 虚拟现实头戴显示设备创新创业项目商业计划书
- 职业培训知识讲解内容课件
- 煮茧操作工岗位操作规程考核试卷及答案
- 滑雪指导员数字化技能考核试卷及答案
- 解读学习《住房租赁条例》培训课件(2025年9月15日起施行)
- 公路铣刨机转向桥关键结构疲劳寿命的深度剖析与精准预测
- 民事起诉状要素式(民间借贷纠纷)
- 肺孢子菌肺炎护理查房
- 法官培训人民调解员讲稿
- 茶叶施肥技术课件
- 老人进食护理课件
- 开学第一课:反诈教育主题班会
- 2025年湖南省长沙市中考物理试卷(含答案)
- 污水处理厂二期成套设备供货及安装调试项目施工组织设计
- HY/T 0462-2024海岸带生态系统减灾功能评估技术导则珊瑚礁
评论
0/150
提交评论