哈工大传热学虚拟仿真实验报告.docx
《哈工大传热学虚拟仿真实验报告.docx》由会员分享,可在线阅读,更多相关《哈工大传热学虚拟仿真实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
哈工大传热学虚拟仿真实验报告
HarbinInstituteofTechnology
传热学虚拟仿真实验报告
院系:
能源科学与工程学院
班级:
设计者:
学号:
*******
设计时间:
2016.11.7
传热学虚拟仿真实验报告
1应用背景
数值热分析在核工业、铁道、石油化工、航空航天、机械制造、能源、汽车交通、国防军工、电子、土木工程、造船、生物医学、轻工、地矿、水利、以及日用家电等各个领域都有广泛的应用。
2二维导热温度场的数值模拟
2.1二维稳态导热实例
假设一用砖砌成的长方形截面的冷空气通道,其截面如图2.1所示,假设在垂直于纸面方向上冷空气及砖墙的温度变化很小,可以近似地予以忽略。
图2.1一用砖砌成的长方形截面的冷空气通道截面
2.2二维数值模拟
基于模型的对称性,简化为如图所示的四分之一模型。
图2.2二维数值模拟
2.3建立离散方程
此时对于内部节点,如图2.3:
对于平直边界上的节点,如图2.4:
对于外部和内部角点,如图2.5:
图2.3内部节点图2.4平直边界上的节点图2.5内部角点和外部角点
对于对称边界(绝热边界),如图2.6:
图2.6对称边界(绝热边界)图2.7建立离散方程
此时显示格式、隐式格式依次为,如图2.7:
2.4C++程序
2.4.1程序流程图如下图2.8所示
图2.8程序流程图
2.4.2程序各变量含义如下图2.9所示
n_L1,n_L2,n_L3,n_L4,n_thick1,n_thick2分别为对应边的网格数。
2.4.3程序
#include
#include
intmain()
{
floatL1,L2,L3,L4,thick1,thick2;/*L1外矩形宽,L2外矩形长,L3内矩形宽,L4内矩形长,thick1宽度方向厚度,thick1长度方向厚度*/
intn_L1,n_L2,n_L3,n_L4,n_thick1,n_thick2;/*各边网格数*/
inti,j,n,number;/*n迭代次数*/
doubleeps=5.0e-6;
floatdelt_y1,delt_y2,delt_x1,delt_x2;
floatcond,conv_out,conv_in,tout,tin;/*cond导热系数conv_out外部对流换热系数conv_in内部对流换热系数tout外部环境温度tin内部环境温度*/
/*输入几何信息*/
printf("请输入L1:
");
scanf("%f",&L1);
printf("请输入L2:
");
scanf("%f",&L2);
printf("请输入L3:
");
scanf("%f",&L3);
printf("请输入L4:
");
scanf("%f",&L4);
/*输入网格信息*/
printf("请输入边L1网格数(<100):
");
scanf("%d",&n_L1);
printf("请输入边L2网格数(<100):
");
scanf("%d",&n_L2);
printf("请输入边L3网格数(<100):
");
scanf("%d",&n_L3);
printf("请输入边L4网格数(<100):
");
scanf("%d",&n_L4);
/*输入边界条件*/
printf("请输入材料导热系数(W/(m·K):
");
scanf("%f",&cond);
printf("请输入外部环境温度(K):
");
scanf("%f",&tout);
printf("请输入内部环境温度(K):
");
scanf("%f",&tin);
printf("请输入外部对流换热系数(W/(m2·K):
");
scanf("%f",&conv_out);
printf("请输入内部对流换热系数(W/(m2·K):
");
scanf("%f",&conv_in);
thick1=(L2-L4);
thick2=(L1-L3);
n_thick1=(n_L2-n_L4);
n_thick2=(n_L1-n_L3);
/**************网格大小*********************/
delt_x1=thick1/n_thick1;
delt_x2=L4/n_L4;
delt_y1=thick2/n_thick2;
delt_y2=L3/n_L3;
/*******************************************/
/*节点赋初值*/
doubletem0[100][100];/*节点温度tem0()上次迭代结果,tem()本次迭代结果*/
doubletem[100][100];
doublex[100][100];
doubley[100][100];
n=0;
do{
/*区域1内部节点温度*/
/*************************************************/
for(i=1;i{
for(j=n_L3+1;j{
tem0[i][j]=((tem[i+1][j]+tem[i-1][j])*delt_y1*delt_y1+(tem[i][j+1]+tem[i][j-1])*delt_x1*delt_x1)/2.0/(delt_y1*delt_y1+delt_x1*delt_x1);
}
}
/*************************************************/
/*区域2内部节点温度*/
/*************************************************/
for(i=1;i{
for(j=1;j{
tem0[i][j]=((tem[i+1][j]+tem[i-1][j])*delt_y2*delt_y2+(tem[i][j+1]+tem[i][j-1])*delt_x1*delt_x1)/2.0/(delt_x1*delt_x1+delt_y2*delt_y2);
}
}
/*************************************************/
/*区域3内部节点温度*/
/*************************************************/
for(i=n_thick1+1;i{
for(j=n_L3+1;j{
tem0[i][j]=((tem[i+1][j]+tem[i-1][j])*delt_y1*delt_y1+(tem[i][j+1]+tem[i][j-1])*delt_x2*delt_x2)/2.0/(delt_x2*delt_x2+delt_y1*delt_y1);
}
}
/*************************************************/
/*区域1与区域2边界线*/
/*************************************************/
for(i=1;i{
j=n_L3;
tem0[i][j]=((tem[i+1][j]+tem[i-1][j])/2.0*(delt_y1+delt_y2)*delt_y1*delt_y2+tem[i][j+1]*delt_y2*delt_x1*delt_x1+tem[i][j-1]*delt_y1*delt_x1*delt_x1)/((delt_y1+delt_y2)*delt_y1*delt_y2+delt_y2*delt_x1*delt_x1+delt_x1*delt_x1*delt_y1);
}
/*************************************************/
/*区域1与区域3边界线*/
/*************************************************/
for(j=n_L3+1;j{
i=n_thick1;
tem0[i][j]=((tem[i][j+1]+tem[i][j-1])/2.0*(delt_x1+delt_x2)*delt_x1*delt_x2+tem[i-1][j]*delt_x2*delt_y1*delt_y1+tem[i+1][j]*delt_x1*delt_y1*delt_y1)/((delt_x1+delt_x2)*delt_x1*delt_x2+delt_x2*delt_y1*delt_y1+delt_y1*delt_y1*delt_x1);
}
/*************************************************/
/*******************边界条件**********************/
/*******************绝热边界条件(对称面)**********************/
/***右边界***/
for(j=n_L3+1;j{
i=n_L2;
tem0[i][j]=(2.0*tem[i-1][j]*delt_y1*delt_y1+(tem[i][j+1]+tem[i][j-1])*delt_x2*delt_x2)/2.0/(delt_x2*delt_x2+delt_y1*delt_y1);
}
/***下边界***/
for(i=1;i{
j=0;
tem0[i][j]=((delt_y2*tem[i-1][j]/2/delt_x1)+(delt_x1*tem[i][j+1]/delt_y2)+(delt_y2*tem[i+1][j]/2/delt_x1))/((delt_y2/2/delt_x1)+(delt_x1/delt_y2)+(delt_y2/2/delt_x1));
}
for(i=n_thick1+1;i{
j=n_L3;
tem0[i][j]=((delt_y1*tem[i-1][j]/2/delt_x2)+(delt_x2*tem[i][j+1]/delt_y2)+(delt_y2*tem[i+1][j]/2/delt_x2)+(delt_x2*conv_in*tin))/((delt_y2/2/delt_x2)+(delt_x2/delt_y2)+(delt_y2/2/delt_x2)+(delt_x2*conv_in));
}
/*******************外部对流边界条件**********************/
/***上边界***/
for(i=1;i{
j=n_L1;
tem0[i][j]=(cond*delt_y1*delt_y1*(tem[i-1][j]+tem[i+1][j])+2.0*cond*delt_x1*delt_x1*tem[i][j-1]+2.0*delt_y1*delt_x1*delt_x1*conv_out*tout)/(2.0*cond*delt_y1*delt_y1+2.0*cond*delt_x1*delt_x1+2.0*delt_y1*conv_out*delt_x1*delt_x1);
}
for(i=n_thick1+1;i{
j=n_L1;
tem0[i][j]=(cond*delt_y1*delt_y1*(tem[i-1][j]+tem[i+1][j])+2.0*cond*delt_x2*delt_x2*tem[i][j-1]+2.0*delt_y1*delt_x2*delt_x2*conv_out*tout)/(2.0*cond*delt_y1*delt_y1+2.0*cond*delt_x2*delt_x2+2.0*delt_y1*conv_out*delt_x2*delt_x2);
}
i=n_thick1;
j=n_L1;
tem0[i][j]=(cond*delt_y1*delt_y1*delt_x2*tem[i-1][j]+cond*delt_y1*delt_y1*delt_x1*tem[i+1][j]+cond*delt_x1*delt_x2*(delt_x1+delt_x2)*tem[i][j-1]+delt_y1*delt_x1*delt_x2*(delt_x1+delt_x2)*conv_out*tout)/(cond*delt_y1*delt_y1*delt_x2+cond*delt_y1*delt_y1*delt_x1+cond*delt_x1*delt_x2*(delt_x1+delt_x2)+delt_y1*conv_out*delt_x1*delt_x2*(delt_x1+delt_x2));
/***左边界***/
for(j=n_L3+1;j{
i=0;
tem0[i][j]=((cond*delt_x1*tem[i][j+1]/2/delt_y1)+(cond*delt_y1*tem[i+1][j]/delt_x1)+(cond*delt_x1*tem[i][j-1]/2/delt_y1)+(delt_y1*conv_out*tout))/((cond*delt_x1/2/delt_y1)+(cond*delt_y1/delt_x1)+(cond*delt_x1/2/delt_y1)+(delt_y1*conv_out));
}
for(j=1;j{
i=0;
tem0[i][j]=((cond*delt_x1*tem[i][j+1]/2/delt_y2)+(cond*delt_y2*tem[i+1][j]/delt_x1)+(cond*delt_x1*tem[i][j-1]/2/delt_y2)+(delt_y2*conv_out*tout))/((cond*delt_x1/2/delt_y2)+(cond*delt_y2/delt_x1)+(cond*delt_x1/2/delt_y2)+(delt_y2*conv_out));
}
i=0;
j=n_L3;
tem0[i][j]=((cond*delt_x1*tem[i][j+1]/2/delt_y1)+(cond*((delt_y1+delt_y2)/2)*tem[i+1][j]/delt_x1)+(cond*delt_x1*tem[i][j-1]/2/delt_y2)+(((delt_y1+delt_y2)/2)*conv_out*tout))/((cond*delt_x1/2/delt_y1)+(cond*((delt_y1+delt_y2)/2)/delt_x1)+(cond*delt_x1/2/delt_y2)+(((delt_y1+delt_y2)/2)*conv_out));
/*******************内部对流边界条件**********************/
/***上边界***/
for(i=n_thick1+1;i{
j=n_L3;
tem0[i][j]=(cond*delt_y1*delt_y1*(tem[i-1][j]+tem[i+1][j])+2.0*cond*delt_x2*delt_x2*tem[i][j+1]+2.0*delt_y1*delt_x2*delt_x2*conv_in*tin)/(2.0*cond*delt_y1*delt_y1+2.0*cond*delt_x2*delt_x2+2.0*delt_y1*conv_in*delt_x2*delt_x2);
}
/***左边界***/
for(j=1;j{
i=n_thick1;
tem0[i][j]=((cond*delt_x1*tem[i][j+1]/2/delt_y2)+(cond*delt_y2*tem[i-1][j]/delt_x1)+(cond*delt_x1*tem[i][j-1]/2/delt_y2)+(delt_y2*conv_in*tin))/((cond*delt_x1/2/delt_y2)+(cond*delt_y2/delt_x1)+(cond*delt_x1/2/delt_y2)+(delt_y2*conv_in));
}
/*******************特殊点**********************/
/*******左下角********/
tem0[0][0]=(cond*delt_x1*delt_x1*tem[0][1]+cond*delt_y2*delt_y2*tem[1][0]+delt_y2*delt_y2*delt_x1*conv_out*tout)/(cond*delt_x1*delt_x1+cond*delt_y2*delt_y2+delt_y2*delt_y2*delt_x1*conv_out);
/*******右下角********/
tem0[n_thick1][0]=(cond*delt_x1*delt_x1*tem[n_thick1][1]+cond*delt_y2*delt_y2*tem[n_thick1-1][0]+delt_y2*delt_y2*delt_x1*conv_in*tin)/(cond*delt_x1*delt_x1+cond*delt_y2*delt_y2+delt_y2*delt_y2*delt_x1*conv_in);
/*******左上角********/
tem0[0][n_L1]=(cond*delt_y1*delt_y1*tem[1][n_L1]+cond*delt_x1*delt_x1*tem[0][n_L1-1]+delt_x1*delt_y1*(delt_y1+delt_x1)*conv_out*tout)/(cond*delt_y1*delt_y1+cond*delt_x1*delt_x1+delt_x1*delt_y1*(delt_y1+delt_x1)*conv_out);
/*******右上角1********/
tem0[n_L2][n_L1]=(cond*delt_y1*delt_y1*tem[n_L2-1][n_L1]+cond*delt_x2*delt_x2*tem[n_L2][n_L1-1]+delt_x2*delt_y1*delt_x2*conv_out*tout)/(cond*delt_y1*delt_y1+cond*delt_x2*delt_x2+delt_y1*delt_x2*delt_x2*conv_out);
/*******右上角2********/
tem0[n_L2][n_L3]=(cond*delt_y1*delt_y1*tem[n_L2-1][n_L3]+cond*delt_x2*delt_x2*tem[n_L2][n_L3+1]+delt_x2*delt_y1*delt_x2*conv_in*tin)/(cond*delt_y1*delt_y1+cond*delt_x2*delt_x2+delt_y1*delt_x2*delt_x2*conv_in);
/*******内角点********/
tem0[n_thick1][n_L3]=(cond*(delt_y1+delt_y2)/delt_x1*tem[n_thick1-1][n_L3]+cond*(delt_x1+delt_x2)/delt_y1*tem[n_thick1][n_L3+1]+cond*delt_y1/delt_x2*tem[n_thick1+1][n_L3]+cond*delt_x1/delt_y2*tem[n_thick1][n_L3-1]+(delt_x2+delt_y2)*conv_in*tin)/(cond*(delt_y1+delt_y2)/delt_x1+cond*(delt_x1+delt_x2)/delt_y1+cond*delt_y1/delt_x2+cond*delt_x1/delt_y2+(delt_x2+delt_y2)*conv_in);
/*******************判断是否收敛*********************/
number=0;
for(i=0;i<=n_L2;i++)
{
for(j=0;j<=n_L1;j++)
{
if(fabs(tem0[i][j]-tem[i][j])>eps)
{
number++;
}
}
}
for(i=0;i<=n_L2;i++)
{
for(j=0;j<=n_L1;j++)
{
tem[i][j]=tem0[i][j];
}
}
n++;
if(n%10000==0)printf("%d\n",n);
}while(number>0&&n<1000000);
/*计算各节点坐标*/
for(i=0;i<=n_L2;i++)
{
for(j=0;j<=n_L1;j++)
{
if(i<=n_thick1&&j<=n_L3)
{
x[i][j]=delt_x1*i;
y[i][j]=delt_y2*j;
}
if(i<=n_thick1&&j>n_L3)
{
x[i][j]=delt_x1*i;
y[i][j]=delt_y2*n_L3+delt_y1*(j-n_L3);
}
if(i>n_thick1&&j<=n_L3)
{
x[i][j]=n_thick1*delt_x1+delt_x2*(i-n_thick1);
y[i][j]=j*delt_y2;
}
if(i>n_thick1&&j>n_L3)
{
x[i][j]=n_thick1*delt_x1+delt_x2*(i-n_thick1);
y[i][j]=delt_y2*n_L3+delt_y1*(j-n_L3);
}
}
}
/*计算各节点坐标结束*/
ofstreamSaveFile("temperature.dat");/*输出计算结果*/
SaveFile<<"title=Tempera