5.1 一维导热算例

  • 稳态导热

算例:一根长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>

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

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

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

本文分享自微信公众号 - 传输过程数值模拟学习笔记(SongSimStudio),作者:宋风耳

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ammo.js-bullet物理引擎碰撞检测

    之前用ammojs写了一点点动画:微信小程序体验3D物理引擎-ammo.js,把碰撞检测的代码写一下,Mark下,记个笔记:

    周星星9527
  • 微信小程序体验3D物理引擎-ammo.js

    点击体验3D物理引擎bullet的javascript版本。源码参考了:https://github.com/THISISAGOODNAME/learn-amm...

    周星星9527
  • 9.2 时域分析与频域分析

    时域和频域分析师自动控制原理里非常重要的内容,也是《热工过程自动控制》里的基础内容。首先分析一个常见的RC网络电路:

    周星星9527
  • 引入基于LCloud的页面访问统计到Hexo博客中

    由于本主题(Volantis)使用的 Valine 暂时仍然无法正常开启 Counter 页面计数,所以,在单一页面上展示出该页面的访问量就成了一个问题。不蒜子...

    ZONGLYN
  • 使用openSSL构造一个支持https的nodejs服务器

    首先通过下面的链接下载openSSL https://slproweb.com/products/Win32OpenSSL.html

    Jerry Wang
  • js处理json和字符串示例

    比较两个字符串不同的元素并打印出来,其中两个字符串是包含关系,即一个字符串一定是另一个字符串的子串,如{1,2,4}是{1,2,3,4,5}的子串

    阳光岛主
  • \x 开头编码的数据解码成中文

    在python里,直接decode('utf-8')即可 >>> "\xE5\x85\x84\xE5\xBC\x9F\xE9\x9A\xBE\xE5\xBD\x...

    用户1177380
  • 云原生视角下的开放网络

    随着容器等轻量级高效率虚拟化技术的兴起与微服务理念的普及,云计算正向着“云原生”(Cloud Native)的方向发展。为了适应这个趋势,网络也需要进行相应的改...

    SDNLAB
  • AJAX——百闻不如一见

    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    泰斗贤若如
  • BaseMongo基类设计

    蛋未明

扫码关注云+社区

领取腾讯云代金券