首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.1 一维导热算例

5.1 一维导热算例

作者头像
周星星9527
发布2018-08-08 15:59:19
1.5K0
发布2018-08-08 15:59:19
举报
  • 稳态导热

算例:一根长11m的铁棒,左侧温度100℃,右侧0℃,试计算其稳态温度场。我们将铁棒均匀分割成11段,每段1m长,假设截面积为1㎡。首先写出一维稳态常物性无内热源的导热方程,并离散之,如下图:

公式可见,每个节点温度是相邻节点温度的平均值。我们编写如下程序:

1. var numNode=12;//节点数共12个
2. var xPos=new Array(numNode);//节点坐标
3. var T=new Array(numNode);//节点温度
4. for(var i=0;i<numNode;i++){
5.    T[i]=0;//初始化为0
6.    xPos[i]=i;//位置
7. }
8. T[0]=100;//左侧节点温度100
9.  
10. for(var iter=0;iter<100;iter++){//先迭代100次吧
11.  for (var i=1;i<numNode-1;i++) {
12.       T[i]=(T[i-1]+T[i+1])/2.0;//中间节点温度是相邻节点温度的平均值!
13.    }
14. }

全部代码:

1. <!DOCTYPEhtml>
2. <htmlstyle="height: 100%">
3.    <head>
4.        <metacharset="utf-8">
5.    </head>
6.    <bodystyle="height: 100%; margin: 0">
7.        <divid="container" style="height: 100%"></div>
8.        <scripttype="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
9.        <scripttype="text/javascript">
10.  
11. var numNode=12;//节点数共12个
12. var xPos=new Array(numNode);//节点坐标
13. var T=new Array(numNode);//节点温度
14. for(var i=0;i<numNode;i++){
15.    T[i]=0;//初始化为0
16.    xPos[i]=i;//位置
17. }
18. T[0]=100;//左侧节点温度100
19.  
20. for(var iter=0;iter<100;iter++){//先迭代100次吧
21.  for (var i=1;i<numNode-1;i++) {
22.       T[i]=(T[i-1]+T[i+1])/2.0;//中间节点温度是相邻节点温度的平均值!
23.    }
24. }
25.  
26.  
27. var dom = document.getElementById("container");
28. var myChart =echarts.init(dom);
29.  
30. option= {
31.     xAxis:{
32.         type:'category',
33.         data:xPos,
34.     },
35.     yAxis:{
36.         type:'value'
37.     },
38.     series:[{
39.         data:T,
40.         type:'line'
41.     }]
42. };
43.  
44. if (option&& typeof option === "object") {
45.     myChart.setOption(option,true);
46. }
47.        </script>
48.    </body>
49. </html>

运行这个网页,得到计算结果:

与理论值完全一致,然而不完美的是我们迭代次数过多了。怎么知道迭代收敛了,而不是直接迭代100次呢?留给读者思考。

  • 非稳态导热:

算例:一根长11m的铁棒,左侧温度100℃,右侧0℃,初始温度0℃,试计算其温度随时间的变化。我们将铁棒均匀分割成11段,每段1m长,假设截面积为1㎡。首先写出一维非稳态常物性无内热源的导热方程,并离散之,如下图:其中T0表示上一时刻的温度值,T表示当前时刻的温度值:

通过程序实现非稳态温度场的求解:

1. varlmd=34,Cp=680,rho=7200;//分别定义材料的导热系数、比热和密度
2. var spaceStep=1;//空间步长1m
3. varmaxTimeStep=0.5*spaceStep*spaceStep/(lmd/rho/Cp);//显式最大时间步长
4. vartimeStep=0.9*maxTimeStep;//比较保险的时间步长,太大容易发散
5. console.log("时间步长:",timeStep);
6. var numNode=12;//节点数共12个
7. var xPos=new Array(numNode);//节点坐标
8. var T=new Array(numNode);//当前节点温度
9. var T0=new Array(numNode);//上一时刻节点温度
10. for(var i=0;i<numNode;i++){
11.    T[i]=T0[i]=0;//初始化为0
12.    xPos[i]=i*spaceStep;//坐标赋值
13. }
14. T[0]=T0[0]=100;//左侧节点温度100
15.  
16. for(var iter=0;iter<10;iter++){//10个时间步长迭代
17.  for (var i=1;i<numNode-1;i++) {
18.  var heatLeft=lmd*(T0[i-1]-T0[i])/spaceStep*1*1;//从左侧传导的热量,傅里叶定律
19.  var heatRight=lmd*(T0[i+1]-T0[i])/spaceStep*1*1;//从左侧传导的热量,傅里叶定律
20.  var Trise=(heatLeft+heatRight)*timeStep/rho/Cp/(1*1*1);//体积为1m
21.     T[i]=T0[i]+Trise
22.    }
23.  
24.  for (var i=1;i<numNode-1;i++){
25.     T0[i]=T[i];//更新初始值,以备下一轮迭代
26.   }
27. }

全部代码如下:

1. <!DOCTYPEhtml>
2. <htmlstyle="height: 100%">
3.    <head>
4.        <metacharset="utf-8">
5.    </head>
6.    <bodystyle="height: 100%; margin: 0">
7.        <divid="container" style="height: 100%"></div>
8.        <scripttype="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
9.        <scripttype="text/javascript">
10.  
11. var lmd=34,Cp=680,rho=7200;//分别定义材料的导热系数、比热和密度
12. var spaceStep=1;//空间步长1m
13. varmaxTimeStep=0.5*spaceStep*spaceStep/(lmd/rho/Cp);//显式最大时间步长
14. vartimeStep=0.9*maxTimeStep;//比较保险的时间步长,太大容易发散
15. console.log("时间步长:",timeStep);
16. var numNode=12;//节点数共12个
17. var xPos=new Array(numNode);//节点坐标
18. var T=new Array(numNode);//当前节点温度
19. var T0=new Array(numNode);//上一时刻节点温度
20. for(var i=0;i<numNode;i++){
21.    T[i]=T0[i]=0;//初始化为0
22.    xPos[i]=i*spaceStep;//坐标赋值
23. }
24. T[0]=T0[0]=100;//左侧节点温度100
25.  
26. for(var iter=0;iter<10;iter++){//10个时间步长迭代
27.  for (var i=1;i<numNode-1;i++) {
28.  var heatLeft=lmd*(T0[i-1]-T0[i])/spaceStep*1*1;//从左侧传导的热量,傅里叶定律
29.  var heatRight=lmd*(T0[i+1]-T0[i])/spaceStep*1*1;//从左侧传导的热量,傅里叶定律
30.  var Trise=(heatLeft+heatRight)*timeStep/rho/Cp;
31.     T[i]=T0[i]+Trise
32.    }
33.  
34.  for (var i =1;i<numNode-1;i++){
35.     T0[i]=T[i];//更新初始值,以备下一轮迭代
36.   }
37. }
38.  
39. var dom = document.getElementById("container");
40. var myChart =echarts.init(dom);
41.  
42. option= {
43.     xAxis:{
44.         type:'category',
45.         data:xPos,
46.     },
47.     yAxis:{
48.         type:'value'
49.     },
50.     series:[{
51.         data:T,
52.         type:'line'
53.     }]
54. };
55.  
56. if (option&& typeof option === "object") {
57.     myChart.setOption(option,true);
58. }
59.        </script>
60.    </body>
61. </html>

运行网页,查看计算结果:

值得注意的是,时间步长有限制,太大了会导致计算发散。这个结果到底对不对呢?请读者与理论值比较!

结语,一维的介绍完了,二维的其实就是多了两个维度,读者可以参考本文程序开发二维程序。后面章节的二维导热算例和本文思路不一样,仅供本科生选读。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 传输过程数值模拟学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档