传热学上机C程序源答案之二维非稳态导热的数值计算

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

二维稳态导热的数值计算

2.1物理问题

一矩形区域,其边长L=W=1,假设区域内无内热源,导热系数为常数,三个边温度为T1=0,一个边温度为T2=1,求该矩形区域内的温度分布。

2.2 数学描述 对上述问题的微分方程及其边界条件为:2222T T 0x y

∂∂+=∂∂ x=0,T=T 1=0

x=1,T=T 1=0

y=0,T=T 1=0

y=1,T=T 2=1 该问题的解析解:112121(1)sin n n n sh y T T n L x n T T n L sh W L ππππ∞=⎛⎫⋅ ⎪---⎛⎫⎝⎭=⋅ ⎪-⎛⎫⎝⎭⋅ ⎪⎝⎭

∑ 2.3数值离散

2.3.1区域离散

区域离散x 方向总节点数为N ,y 方向总节点数为M ,区域内任一节点用I,j 表示。

2.3.2方程的离散 对于图中所有的内部节点方程可写为:2222,,0i j i j

t t x y ⎛⎫⎛⎫∂∂+= ⎪ ⎪∂∂⎝⎭⎝⎭ 用I,j 节点的二阶中心差分代替上式中的二阶导数,得:

+1,,-1,,+1,,-1222+2+0i j i j i j

i j i j i j T T T T T T x y --+=

上式整理成迭代形式:()()22

,1,-1,,1,-12222+2()

2()i j i j i j i j i j y x T T T T T x y x y ++=++++ (i=2,3……,N -1),(j=2,3……,M -1)

补充四个边界上的第一类边界条件得:1,1j T T = (j=1,2,3……,M)

,1N j T T = (j=1,2,3……,M)

,1i j T T = (i=1,2,3……,N)

,2i M T T (i=1,2,3……,N)

#include

#include

#define N 10

#define M 10

main()

{

char s;

int i,j,l;

float cha,x,y;

float t[N][M],a[N][M];

/*打印出题目*/

printf("\t\t\t 二维稳态导热问题\t\t");

printf("\n\t\t\t\t\t\t----何鹏举\n");

printf("\n 题目:补充材料练习题二\n");

printf("\n 矩形区域,边长L=W=1,假设区域内无内热源,导热系数为常熟,三个边温度为T1=0,一个边温度为T2=1,求该矩形区域内的温度分布。\n");

printf("\n 是否要手动对温度场赋予初值?(Y/N):");

scanf("%c",&s);

if(s=='y'||s=='Y')

/*手动赋予温度初场*/

{

printf("\n 请首先假定一个温度场的初始分布,即给出各节点的温度初值(一行一行进行):\n");

for(i=0;i

for(j=0;j

scanf("%f",&t[i][j]);

}

else

/*自动赋予温度初场*/

{

for(i=0;i

for(j=0;j

t[i][j]=0.5;

}

/*四个边界上的第一类边界条件*/

for(j=0;j

{

t[0][j]=0;

t[M-1][j]=0;

}

for(i=0;i

{

t[i][0]=0;

t[i][N-1]=1;

}

/*步长计算*/

x=1.0/(N-1);

y=1.0/(M-1);

/*迭代循环*/

cha=1;

while(cha>0.0001)

{

for(i=0;i

for(j=0;j

a[i][j]=t[i][j];

for(i=1;i

for(j=1;j

t[i][j]=0.5*y*y*(t[i+1][j]+t[i-1][j])/(x*x+y*y)+0.5*x*x*(t[i][j+1]+t[i][j-1])/(x*x+y*y );

cha=0;

for(i=0;i

for(j=0;j

cha=cha+abs(a[i][j]-t[i][j]);

cha=cha/(N*M);

}

/*输出温度分布,其中l控制输出值的排列;这个结果是按照笛卡尔坐标系下平面从左上角开始依次的*/

printf("\n经数值离散计算的该矩形区域内温度分布为:\n");

l=0;

for(j=M-1;j>=0;j--)

for(i=0;i

{

printf("%4.3f ",t[i][j]);

l=l+1;

if(l==N)

{

printf("\n");

l=0;

}

}

/*为了是生成的exe文件结果算的后不会立即退出,方便观看*/

getchar();getchar();

相关文档
最新文档