二维导热物体温度场的数值模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

传热大作业
二维导热物体温度场的数值模拟(等温边界条件)
姓名:
班级:
学号:
墙角稳态导热数值模拟(等温条件)
一、物理问题
有一个用砖砌成的长方形截面的冷空气空道,其截面尺寸如下图所示,假设在垂直于纸面方向上冷空气及砖墙的温度变化很小,可以近似地予以忽略。

在下列两种情况下试计算:
(1)砖墙横截面上的温度分布;
(2)垂直于纸面方向的每米长度上通过砖墙的导热量。

外矩形长为3.0m ,宽为2.2m ;内矩形长为2.0m ,宽为1.2m 。

第一种情况:内外壁分别均匀地维持在0℃及30℃;
第二种情况:内外表面均为第三类边界条件,且已知:
外壁:30℃ ,h1=10W/m2·℃,
内壁:10℃ ,h2= 4 W/m2·℃
砖墙的导热系数λ=0.53 W/m ·℃
由于对称性,仅研究1/4部分即可。

二、数学描写
对于二维稳态导热问题,描写物体温度分布的微分方程为拉普拉斯方程 02222=∂∂+∂∂y t x t
这是描写实验情景的控制方程。

三、方程离散
用一系列与坐标轴平行的网格线把求解区域划分成许多子区域,以网格线的交点作为确定温度值的空间位置,即节点。

每一个节点都可以看成是以它为中心的一个小区域的代表。

由于对称性,仅研究1/4部分即可。

依照实验时得点划分网格:
建立节点物理量的代数方程
对于内部节点,由∆x=∆y ,有 )(411,1,,1,1,-+-++++=n m n m n m n m n m t t t t t
由于本实验为恒壁温,不涉及对流,故内角点,边界点代数方程与该式相同。

设立迭代初场,求解代数方程组。

图中,除边界上各节点温度为已知且不变外,其余各节点均需建立类似3中的离散方程,构成一个封闭的代数方程组。

以C t 000=为场的初始温度,代入方程组迭代,直至相邻两次内外传热值之差小于0.01,认为已达到迭代收敛。

四、编程及结果
1) 源程序
#include <stdio.h>
#include <math.h>
int main()
{
int k=0,n=0;
double t[16][12]={0},s[16][12]={0}; double epsilon=0.001;
double lambda=0.53,error=0; double daore_in=0,daore_out=0,daore=0; FILE *fp;
fp=fopen("data3","w");
for(int i=0;i<=15;i++)
for(int j=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;
}
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
t[i][j]=s[i][j];
n=1;
while(n>0)
{
n=0;
for(int j=1;j<=4;j++)
t[15][j]=0.25*(2*t[14][j]+t[15][j-1]+t[15][j+1]);
for(int i=1;i<=4;i++)
t[i][11]=0.25*(2*t[i][10]+t[i-1][11]+t[i+1][11]);
for(int i=1;i<=14;i++)
for(int j=1;j<=4;j++)
t[i][j]=0.25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(int i=1;i<=4;i++)
for(int j=5;j<=10;j++)
t[i][j]=0.25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
if(fabs(t[i][j]-s[i][j])>epsilon)
n++;
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
s[i][j]=t[i][j];
k++;
//printf("%d\n",k);
}
for(int j=0;j<=5;j++)
{ for(int i=0;i<=15;i++)
{ printf("%4.1f ",t[i][j]);
fprintf(fp,"%4.1f ",t[i][j]);}
printf("\n");
fprintf(fp,"\n");
}
for(int j=6;j<=11;j++)
{ for(int i=0;i<=5;i++)
{ printf("%4.1f ",t[i][j]);
fprintf(fp,"%4.1f ",t[i][j]);}
fprintf(fp,"\n");
printf("\n");
}
for(int i=1;i<=14;i++)
daore_out+=(30-t[i][1]);
for(int j=1;j<=10;j++)
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(int i=5;i<=14;i++)
daore_in+=t[i][4];
for(int j=5;j<=10;j++)
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"
#include<stdio.h>
#include<math.h>
int main()
{
int k=0,n=0;
double t[16][12]={0},s[16][12]={0};
double epsilon=0.01;
double lambda=0.53,error=0;
double daore_in=0,daore_out=0,daore=0;
FILE *fp;
fp=fopen("data3","w");
for(int i=0;i<=15;i++)
for(int j=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;
}
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
t[i][j]=s[i][j];
n=1;
while(n>0)
{
n=0;
for(int j=1;j<=4;j++)
t[15][j]=0.25*(2*t[14][j]+t[15][j-1]+t[15][j+1]);
for(int i=1;i<=4;i++)
t[i][11]=0.25*(2*t[i][10]+t[i-1][11]+t[i+1][11]);
for(int i=1;i<=14;i++)
for(int j=1;j<=4;j++)
t[i][j]=0.25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(int i=1;i<=4;i++)
for(int j=5;j<=10;j++)
t[i][j]=0.25*(t[i+1][j]+t[i-1][j]+t[i][j+1]+t[i][j-1]);
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
if(fabs(t[i][j]-s[i][j])>epsilon)
n++;
for(int i=0;i<=15;i++)
for(int j=0;j<=11;j++)
s[i][j]=t[i][j];
k++;
//printf("%d\n",k);
}
for(int j=0;j<=5;j++)
{ for(int i=0;i<=15;i++)
{ printf("%4.1f ",t[i][j]);
fprintf(fp,"%4.1f ",t[i][j]);}
printf("\n");
fprintf(fp,"\n");
}
for(int j=6;j<=11;j++)
{ for(int i=0;i<=5;i++)
{ printf("%4.1f ",t[i][j]);
fprintf(fp,"%4.1f ",t[i][j]);}
fprintf(fp,"\n");
printf("\n");
}
for(int i=1;i<=14;i++)
daore_out+=(30-t[i][1]);
for(int j=1;j<=10;j++)
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(int i=5;i<=14;i++)
daore_in+=t[i][4];
for(int j=5;j<=10;j++)
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>
using namespace std;
int main()
{
cout <<setiosflags(ios::fixed);
int i,j;
double temp,q_in,q_out,q;
double eps=1;
double A[16][12];
//设¦¨¨置?迭̨¹代䨲初?场?
for(i=1;i<16;i++)
{for(j=1;j<6;j++)
A[i][j]=0;}
for(i=1;i<6;i++)
{for(j=6;j<12;j++)
A[i][j]=0;}
for(i=0;i<16;i++)
A[i][0]=30;
for(j=0;j<12;j++)
A[0][j]=30;
//建¡§立¢¡é迭̨¹代䨲方¤?程¨¬组Á¨¦并¡é求¨®解a
while(eps>1.0E-4)
{
for(j=1;j<5;j++)
A[15][j]=(A[15][j+1]+A[15][j-1]+2*A[14][j])/4;
for(i=5;i<15;i++)
{
for(j=1;j<5;j++)
{
A[i][j]=(A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4;
}
}
for(i=1;i<5;i++)
{
for(j=1;j<11;j++)
A[i][j]=(A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4;
}
for(i=1;i<5;i++)
{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;j<12;i++)
q_out=q_out+A[0][j]-A[1][j];
for(i=1;i<16;j++)
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;i<16;i++)
q_in=q_in+A[i][4]-A[i][5];
for(j=5;j<12;j++)
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;j<6;j++)
{for(i=0;i<16;i++)
{cout<<setprecision(2)<<A[i][j]<<" ";
}cout<<endl;
}
for(j=6;j<12;j++)
{
for(i=0;i<6;i++)
{cout<<setprecision(2)<<A[i][j]<<" ";
}cout<<endl;
}
cout<<"墙?体¬?内¨²表À¨ª面?导Ì?热¨¨¨量¢?="<<q_in<<"\n"; cout<<"墙?体¬?外ªa表À¨ª面?导Ì?热¨¨¨量¢?="<<q_out<<"\n"; cout<<"墙?体¬?平?均¨´导Ì?热¨¨¨量¢?q="<<q<<"\n";
return 0;
}。

相关文档
最新文档