一维对流扩散问题求解.docx

上传人:b****6 文档编号:7323485 上传时间:2023-01-22 格式:DOCX 页数:37 大小:583.60KB
下载 相关 举报
一维对流扩散问题求解.docx_第1页
第1页 / 共37页
一维对流扩散问题求解.docx_第2页
第2页 / 共37页
一维对流扩散问题求解.docx_第3页
第3页 / 共37页
一维对流扩散问题求解.docx_第4页
第4页 / 共37页
一维对流扩散问题求解.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

一维对流扩散问题求解.docx

《一维对流扩散问题求解.docx》由会员分享,可在线阅读,更多相关《一维对流扩散问题求解.docx(37页珍藏版)》请在冰豆网上搜索。

一维对流扩散问题求解.docx

一维对流扩散问题求解

Subjects:

Aproperty

istransportedbymeansofconvectionanddiffusionthroughtheone-dimensionaldomain.Thegoverningequationis

;boundaryconditionsare

atx=0and

atx=L.Usingfiveequallyspacedcellsandthecentraldifferencingschemeforconvectionanddiffusioncalculatethedistributionof

asafunctionofxfor

(i)Case1:

u=0.1m/s,

(ii)Case2:

Case1:

u=2.5m/s,andcomparetheresultswiththeanalyticalsolution

.

(iii)Case3:

recalculatethesolutionforu=2.5m/swith20gridnodesandcomparetheresultswiththeanalyticalsolution,thefollowingdateapply:

lengthL=1.0m,

.

Solution:

Programminglanguage:

Filename:

二维稳态导热模拟.cpp

Compilesoftware:

MicrosoftVisualC++6.0

Code:

#include

#include

#include

usingnamespacestd;

#defineGn15//网格节点数.

#defineGn220//网格节点数.

#defineP1//流体密度,单位:

kg/m/m/m.

#defineProA1//A端传递特性.

#defineProB0//B端传递特性.

//////FDD///////追赶法过程

voidTDMA1(doublea[],doubleb[],doublec[],doublef[],double*p)

{//矩阵形式

//b0c000//=f0

//a0b1c10//=f1

//...............

//00...b(N-1)c(N-2)//=f(N-1)

doubled[Gn1-1],u[Gn1],ll[Gn1-1],y[Gn1],X[Gn1];

inti;

for(i=0;i<=Gn1-2;i++)

{

d[i]=c[i];

}

u[0]=b[0];

for(i=1;i<=Gn1-1;i++)

{

ll[i-1]=a[i-1]/u[i-1];

u[i]=b[i]-ll[i-1]*c[i-1];

}

y[0]=f[0];

for(i=1;i<=Gn1-1;i++)

{

y[i]=f[i]-ll[i-1]*y[i-1];

}

X[Gn1-1]=y[Gn1-1]/u[Gn1-1];

for(i=Gn1-2;i>=0;i--)

{

X[i]=(y[i]-c[i]*X[i+1])/u[i];

}

for(i=0;i<=Gn1-1;i++)

*(p+i)=X[i];

}

voidTDMA2(doublea[],doubleb[],doublec[],doublef[],double*p)

{

doubled[Gn2-1],u[Gn2],ll[Gn2-1],y[Gn2],X[Gn2];

inti;

for(i=0;i<=Gn2-2;i++)

{

d[i]=c[i];

}

u[0]=b[0];

for(i=1;i<=Gn2-1;i++)

{

ll[i-1]=a[i-1]/u[i-1];

u[i]=b[i]-ll[i-1]*c[i-1];

}

y[0]=f[0];

for(i=1;i<=Gn2-1;i++)

{

y[i]=f[i]-ll[i-1]*y[i-1];

}

X[Gn2-1]=y[Gn2-1]/u[Gn2-1];

for(i=Gn2-2;i>=0;i--)

{

X[i]=(y[i]-c[i]*X[i+1])/u[i];

}

for(i=0;i<=Gn2-1;i++)

*(p+i)=X[i];

}

voidmain()

{

doubleu,L=1,T=0.1,min_x,F,D,aW,aE,m,n;

doublea[Gn2],b[Gn2],c[Gn2],f[Gn2],X[Gn2];

intserial_number1,serial_number2,i;

printf("Therearefourmethodstosolvethesecases:

\n");

printf("1.Thecentraldifferencingscheme.\n");

printf("2.Theupwinddifferencingscheme.\n");

printf("3.Thehybriddifferencingscheme.\n");

printf("4.Thepower-lawscheme.\n");

printf("Pleaseinputtheserialnumberofthemethodwhichyouwanttouse:

");

scanf("%d",&serial_number1);

printf("Therearethreecasesinthissubject:

\n");

printf("1.u=0.1m/swith5gridnodes.\n");

printf("2.u=2.5m/swith5gridnodes.\n");

printf("3.u=2.5m/swith20gridnodes.\n");

printf("Pleaseinputtheserialnumberofthecasewhichyouwanttosolve:

");

scanf("%d",&serial_number2);

if(serial_number1==1)//中心差分法

{

if(serial_number2==1)//第一题开始

{

u=0.1;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=D+F/2;

aE=D-F/2;

m=2*D+F;

n=2*D-F;

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

voidTDMA1(doublea[],doubleb[],doublec[],doublef[],double*p);

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==2)//第二题开始

{

u=2.5;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=D+F/2;

aE=D-F/2;

m=2*D+F;

n=2*D-F;

for(i=0;i

a[i]=-aW,

c[i]=-aE;

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==3)//第三题开始

{

u=2.5;

min_x=L/Gn2;

F=P*u;

D=T/min_x;

aW=D+F/2;

aE=D-F/2;

m=2*D+F;

n=2*D-F;

for(i=0;i

{

a[i]=0;

c[i]=0;

}

for(i=0;i

{

b[i]=0;

f[i]=0;

}

for(i=0;i

a[i]=-aW;

c[i]=-aE;

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn2-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA2(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn2);

printf("]=\n");

for(i=0;i<=Gn2-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

else

printf("NOcaseisselected,pleasecheckouttheinputserialnumber.");

}

elseif(serial_number1==2)//一阶迎风方法

{

if(serial_number2==1)//第一题开始

{

u=0.1;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=D+F;

aE=D;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=0;

c[i]=0;

}

for(i=0;i

{

b[i]=0;

f[i]=0;

}

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==2)//第二题开始

{

u=2.5;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=D+F;

aE=D;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==3)//第三题开始

{

u=2.5;

min_x=L/Gn2;

F=P*u;

D=T/min_x;

aW=D+F;

aE=D;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=0;

c[i]=0;

}

for(i=0;i

{

b[i]=0;

f[i]=0;

}

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn2-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA2(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn2);

printf("]=\n");

for(i=0;i<=Gn2-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

else

printf("Nocaseisselected,pleasecheckouttheinputserialnumber.\n");

}

elseif(serial_number1==3)//混合方法

{

if(serial_number2==1)//第一题开始

{

u=0.1;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=F;

aE=0;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==2)//第二题开始

{

u=2.5;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=F;

aE=0;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn1-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA1(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn1);

printf("]=\n");

for(i=0;i<=Gn1-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

elseif(serial_number2==3)//第三题开始

{

u=2.5;

min_x=L/Gn2;

F=P*u;

D=T/min_x;

aW=F;

aE=0;

m=2*D+F;

n=2*D;

for(i=0;i

{

a[i]=-aW;

c[i]=-aE;

}

for(i=0;i

{

if(i==0)

{

b[i]=-c[i]+m;

f[i]=m*ProA;

}

elseif(i==Gn2-1)

{

b[i]=-a[i-1]+n;

f[i]=n*ProB;

}

else

{

b[i]=-c[i]-a[i-1];

f[i]=0;

}

}

TDMA2(a,b,c,f,X);

printf("Result:

X[");

printf("%d",Gn2);

printf("]=\n");

for(i=0;i<=Gn2-1;i++)

{

printf("");

printf("%lf\n",X[i]);

}

}

else

printf("Nocaseisselected,pleasecheckouttheinputserialnumber.\n");

}

elseif(serial_number1==4)//指数方法

{

if(serial_number2==1)//第一题开始

{

u=0.1;

min_x=L/Gn1;

F=P*u;

D=T/min_x;

aW=0.03125*D+F;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1