前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.1.2 一维非稳态无内热源导热程序

5.1.2 一维非稳态无内热源导热程序

作者头像
周星星9527
发布2019-08-19 11:24:36
1.1K0
发布2019-08-19 11:24:36
举报
文章被收录于专栏:javascript趣味编程

一维非稳态无内热源导热程序理论部分前文已述,对应教学视频已述。1D显式内部节点迭代格式如下:

常物性无内热源一维非稳态温度场,其中计算域两端温度分别为1℃和0℃。计算程序如下:

代码语言:javascript
复制
Array.create = function(dimension, initialValue){
    var arr = [];
    for(var i=0;i<dimension;i++){
        arr[i]=initialValue;
    }
    return arr;
};

Array.prototype.clone = function(){
    var arr=[];
    for(var i=0,len=this.length;i<len;i++) {
        arr.push(this[i]);
    }
    return arr;
}

var Solution=function(tmpr){
  this.tmpr=tmpr;

  this.SetUpGeometryAndMesh=SetUpGeometryAndMesh;
  this.SetUpBoundaryCondition=SetUpBoundaryCondition;
  this.Solve=Solve;
};

function SetUpGeometryAndMesh(dx){
  tmpr=Array.create(50+1,0);
  for(var i=0;i<50+1;i++){
    xs.push(i*spaceStep);
  }
}

function SetUpBoundaryCondition(dx){
  tmpr[0]=1;//左侧
  tmpr[50]=0;//右侧
}

function Solve(timeStep,iterations){
  var a=1;//热扩散系数
  for(var iter=1;iter<iterations+1;iter++){
    for(var i=1;i<50;i++){
      tmpr[i]=tmpr[i]+timeStep*a*(tmpr[i+1]+tmpr[i-1]-2*tmpr[i])/spaceStep/spaceStep;
    }
    if(iter==101) T50s=tmpr.clone();
    if(iter==201) T100s=tmpr.clone();
    if(iter==301) T150s=tmpr.clone();
  }
}

var tmpr=[],T50s,T100s,T150s,xs=[],flowTime=0,timeStep=0.5,iterations=301;
var spaceStep=1;//网格dx

function getHeat1DProfile(){
  var solution=new Solution(tmpr);
  
  solution.SetUpGeometryAndMesh(spaceStep);//网格
  solution.SetUpBoundaryCondition(spaceStep);//设置边界条件
  solution.Solve(timeStep,iterations);//求解

  return [xs,T50s,T100s,T150s];
}

module.exports = {
  getHeat1DProfile: getHeat1DProfile
}

上述程序是小程序新工科课程设计HTML5小程序里自带程序,运行效果如下:

但上述代码没有后处理部分,要注意的是显式迭代格式时间步长太长会导致计算发散!。来一段BGM,如果能看懂代码,说明《传热学》导热部分入门了。

这里给出包含有后处理的所有代码:

代码语言:javascript
复制
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>有限差分法计算一维常物性无内热源非稳态温度场</title>
  </head>
  <body>
    <div style="width:500px; height:auto; float:left; display:inline">
        <canvas id="tmprChart" width="500" height="400">
          Your browser does not support HTML 5 Canvas. 
        </canvas>
    </div>
    <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
    <script type="text/javascript">
Array.create = function(dimension, initialValue){
    var arr = [];
    for(var i=0;i<dimension;i++){
        arr[i]=initialValue;
    }
    return arr;
};

Array.prototype.clone = function(){
    var arr=[];
    for(var i=0,len=this.length;i<len;i++) {
        arr.push(this[i]);
    }
    return arr;
}

var Solution=function(tmpr){
  this.tmpr=tmpr;

  this.SetUpGeometryAndMesh=SetUpGeometryAndMesh;
  this.SetUpBoundaryCondition=SetUpBoundaryCondition;
  this.Solve=Solve;
  this.ShowResults=ShowResults;
};

function SetUpGeometryAndMesh(dx){
  tmpr=Array.create(50+1,0);
  for(var i=0;i<50+1;i++){
    xs.push(i*spaceStep);
  }
}

function SetUpBoundaryCondition(dx){
  tmpr[0]=1;//左侧
  tmpr[50]=0;//右侧
}

function Solve(timeStep,iterations){
  var a=1;//热扩散系数
  for(var iter=1;iter<iterations+1;iter++){
    for(var i=1;i<50;i++){
      tmpr[i]=tmpr[i]+timeStep*a*(tmpr[i+1]+tmpr[i-1]-2*tmpr[i])/spaceStep/spaceStep;
    }
    if(iter==101) T50s=tmpr.clone();
    if(iter==201) T100s=tmpr.clone();
    if(iter==301) T150s=tmpr.clone();
  }
}

function ShowResults(){
  var dom = document.getElementById("tmprChart");
  var tmprChart = echarts.init(dom);
  var tmprOption = {
      //title: {text: '温度分布'},//图标题
      tooltip: {trigger: 'axis'},//提示信息
      xAxis: {type: 'category',data: xs,},yAxis: {type: 'value'},//x坐标和y坐标
      series: [{name:'time=50s',data: T50s,type: 'line'},
           {name:'time=100s',data: T100s,type: 'line'},
           {name:'time=150s',data: T150s,type: 'line'},],
      legend: {data:['time=50s','time=100s','time=150s',]},//图例文字
      toolbox: {feature: {saveAsImage: {}}},//设置保存图片按钮
  };

  tmprChart.setOption(tmprOption, true);
}

var tmpr=[],T50s,T100s,T150s,xs=[],flowTime=0,timeStep=0.5,iterations=301;
var solution=new Solution(tmpr);
var spaceStep=1;//网格dx
solution.SetUpGeometryAndMesh(spaceStep);//网格
solution.SetUpBoundaryCondition(spaceStep);//设置边界条件
solution.Solve(timeStep,iterations);//求解
solution.ShowResults();//绘制结果      
</script>  
  </body>
</html>

将以上代码保存到文本文件,后缀名改为html,点击运行结果如下:

程序完整源代码及演示请猛戳这里: https://songxp03.github.io/SimFun/

昨天陪我妈妈去超市,货架下面那一包包的涪(péi)陵榨菜,我忍不住伸出了双手。我妈一把把我的手给打下去,怒喝道:“你这个败家玩意,我们能吃这个吗?半个月前才给你买的茶叶蛋。你怎么这么不懂事!”周围的人听见了,都向我投来鄙视的眼神。想想含辛茹苦带着我的妈妈。我流下忏悔的泪水。“妈,我们还是继续去就五粮液吃波士顿龙虾吧。”妈妈听后满意的点点头,周围的人也重新投来赞许的眼光。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档