二维导热物体温度场的数值模拟Word格式.docx
《二维导热物体温度场的数值模拟Word格式.docx》由会员分享,可在线阅读,更多相关《二维导热物体温度场的数值模拟Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
依照实验时得点划分网格:
建立节点物理量的代数方程
对于内部节点,由∆x=∆y,有
由于本实验为恒壁温,不涉及对流,故内角点,边界点代数方程与该式相同。
设立迭代初场,求解代数方程组。
图中,除边界上各节点温度为已知且不变外,其余各节点均需建立类似3中的离散方程,构成一个封闭的代数方程组。
以
为场的初始温度,代入方程组迭代,直至相邻两次内外传热值之差小于0.01,认为已达到迭代收敛。
四、编程及结果
1)源程序
#include<
stdio。
h〉
#include<
math.h〉
intmain()
{
intk=0,n=0;
doublet[16][12]={0},s[16][12]={0};
doubleepsilon=0.001;
doublelambda=0。
53,error=0;
doubledaore_in=0,daore_out=0,daore=0;
FILE*fp;
fp=fopen("
data3”,”w”);
for(inti=0;
i〈=15;
i++)
for(intj=0;
j<
=11;
j++)
{
if((i==0)||(j==0))s[i][j]=30;
if(i==5)
if(j>
=5&
&j<
=11)s[i][j]=0;
if(j==5)
if(i〉=5&&
i〈=15)s[i][j]=0;
}
i<
=15;
for(intj=0;
=11;
t[i][j]=s[i][j];
n=1;
while(n〉0)
{
n=0;
for(intj=1;
=4;
t[15][j]=0.25*(2*t[14][j]+t[15][j—1]+t[15][j+1]);
for(inti=1;
t[i][11]=0。
25*(2*t[i][10]+t[i—1][11]+t[i+1][11]);
for(inti=1;
=14;
for(intj=1;
j〈=4;
t[i][j]=0。
25*(t[i+1][j]+t[i—1][j]+t[i][j+1]+t[i][j-1]);
for(intj=5;
=10;
t[i][j]=0。
25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(inti=0;
j〈=11;
if(fabs(t[i][j]-s[i][j])〉epsilon)
n++;
i〈=15;
s[i][j]=t[i][j];
k++;
//printf("
%d\n”,k);
}
for(intj=0;
j〈=5;
{for(inti=0;
{printf(”%4.1f”,t[i][j]);
fprintf(fp,"
%4.1f”,t[i][j]);
}
printf(”\n”);
fprintf(fp,"
\n"
);
for(intj=6;
{for(inti=0;
i〈=5;
{printf("
%4。
1f”,t[i][j]);
fprintf(fp,"
%4.1f”,t[i][j]);
}
fprintf(fp,”\n"
printf(”\n”);
}
for(inti=1;
=14;
daore_out+=(30-t[i][1]);
for(intj=1;
j〈=10;
daore_out+=(30-t[1][j]);
daore_out=4*(lambda*(daore_out+0.5*(30-t[1][11])+0。
5*(30-t[15][1])));
for(inti=5;
daore_in+=t[i][4];
for(intj=5;
j〈=10;
daore_in+=t[4][j];
daore_in=4*(lambda*(daore_in+0。
5*t[4][11]+0。
5*t[15][4]));
error=abs(daore_out—daore_in)/(0.5*(daore_in+daore_out));
daore=(daore_in+daore_out)*0。
5;
printf("
k=%d\n内墙导热=%f\n外墙导热=%f\n平均值=%f\n偏差=%f\n"
k,daore_in,daore_out,daore,error);
2)结果截图
七.总结与讨论
1。
由实验结果可知:
等温边界下,数值解法计算结果与“二维导热物体温度场的电模拟实验“结果相似,虽然存在一定的偏差,但由于点模拟实验存在误差,而且数值解法也不可能得出温度真实值,同样存在偏差,但这并不是说数值解法没有可行性,相反,由于计算结果与电模拟实验结果极为相似,恰恰说明数值解法分析问题的可行性。
用数值解法仅用计算机模拟就能解决某些复杂的工程问题,为复杂工程问题的求解提供了极大的便利。
2.在实验中,内外边界散热量存在偏差,这在很大程度上是由于用数值计算分析问题时,采用离散平均的思想,用节点中心的温度代替节点的平均温度从而产生误差。
不断提高所划分的网格数目,实验偏差会得到不断改善。
3.通过这次的上机实验,对传热的很多问题和数值算法都有一定的加深理解和掌握,收获很多,同时对于个人的动手动脑及解决问题的能力都有一定的提高。
同样,这也反过来证实了“二维导热物体温度场的电模拟实验”的正确性和可行性。
//mm.cpp:
定¡
§
义°
?
控?
制?
台¬
¡
应®
|用®
?
程¨
¬
序¨
°
的Ì
入¨
口¨
²
点Ì
。
ê
//
#include"
stdafx。
h”
stdio.h〉
#include〈math.h〉
intk=0,n=0;
doublet[16][12]={0},s[16][12]={0};
doubleepsilon=0。
01;
doublelambda=0.53,error=0;
FILE*fp;
fp=fopen(”data3”,”w”);
for(inti=0;
=15;
{
if((i==0)||(j==0))s[i][j]=30;
=5&&
j〈=11)s[i][j]=0;
if(i〉=5&
&
i<
=15)s[i][j]=0;
}
t[i][j]=s[i][j];
n=1;
while(n>
0)
{
=4;
t[15][j]=0。
25*(2*t[14][j]+t[15][j—1]+t[15][j+1]);
i〈=4;
25*(2*t[i][10]+t[i—1][11]+t[i+1][11]);
i〈=14;
for(intj=1;
j〈=4;
t[i][j]=0.25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
i〈=4;
for(intj=5;
t[i][j]=0。
25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(inti=0;
if(fabs(t[i][j]—s[i][j])〉epsilon)
s[i][j]=t[i][j];
//printf(”%d\n”,k);
j〈=5;
{for(inti=0;
{printf("
%4.1f"
t[i][j]);
fprintf(fp,”%4.1f”,t[i][j]);
\n”);
\n”);
=5;
t[i][j]);
fprintf(fp,”%4。
1f"
t[i][j]);
fprintf(fp,”\n”);
printf(”\n"
);
for(inti=1;
daore_out+=(30-t[i][1]);
for(intj=1;
daore_out+=(30-t[1][j]);
daore_out=4*(lambda*(daore_out+0。
5*(30-t[1][11])+0。
5*(30—t[15][1])));
for(inti=5;
daore_in+=t[i][4];
daore_in+=t[4][j];
daore_in=4*(lambda*(daore_in+0。
5*t[4][11]+0.5*t[15][4]));
error=abs(daore_out—daore_in)/(0.5*(daore_in+daore_out));
daore=(daore_in+daore_out)*0。
5;
printf(”k=%d\n内¨
墙?
导Ì
热¨
¨
q1=%f\n外ª
a墙?
q2=%f\n平?
均¨
´
值¦
Ì
q=%f\n偏?
差?
error=%f\n"
,k,daore_in,daore_out,daore,error);
getchar();
#include<
iostream〉
#include〈fstream>
#include〈iomanip〉
usingnamespacestd;
cout〈〈setiosflags(ios:
:
fixed);
inti,j;
doubletemp,q_in,q_out,q;
doubleeps=1;
doubleA[16][12];
//设¦
置?
迭Ì
¹
代ä
初?
场?
for(i=1;
16;
{for(j=1;
6;
A[i][j]=0;
i〈6;
{for(j=6;
j〈12;
A[i][j]=0;
for(i=0;
i〈16;
A[i][0]=30;
for(j=0;
j〈12;
A[0][j]=30;
//建¡
立¢
é
方¤
组Á
¦
并¡
求¨
®
解a
while(eps〉1。
0E-4)
for(j=1;
A[15][j]=(A[15][j+1]+A[15][j-1]+2*A[14][j])/4;
for(i=5;
15;
{
j〈5;
A[i][j]=(A[i—1][j]+A[i+1][j]+A[i][j—1]+A[i][j+1])/4;
for(i=1;
11;
A[i][j]=(A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4;
{temp=A[i][11];
A[i][11]=(A[i+1][11-1]+A[i][11]+2*A[i][10])/4;
eps=A[i][11]-temp;
//计?
算?
体¬
外ª
a表À
ª
面?
量¢
q_out=0;
for(j=1;
q_out=q_out+A[0][j]-A[1][j];
i〈16;
q_out=q_out+A[i][0]-A[i][1];
q_out=q_out+(A[0][11]—A[10][1]+A[15][0]—A[15][1])/2;
q_out=q_out*0.53;
内¨
表À
面?
q_in=0;
for(i=5;
q_in=q_in+A[i][4]—A[i][5];
for(j=5;
12;
q_in=q_in+A[4][j]-A[5][j];
q_in=q_in+(A[15][4]-A[15][5]+A[4][11]-A[5][11])/2;
q_in=q_in*0。
53;
//计?
平?
和¨
相¨
¤
对?
误¨
q=(q_in+q_out)/2;
eps=abs(q_in-q_out);
//输º
出?
结¨
¢
果?
for(j=0;
{for(i=0;
{cout〈<
setprecision
(2)<
<
A[i][j]<
〈””;
}cout<
〈endl;
for(j=6;
12;
{cout〈〈setprecision
(2)<
〈A[i][j]〈〈"
”;
〈endl;
cout〈<
”墙?
=”<
〈q_in〈〈"
\n”;
="
〈q_out<
〈"
;
cout<
q=”<
q<
"
return0;