# 5.2.4 二维无内热源稳态导热程序

```Array.create = function(dimension, initialValue){
var arr = [];
for(var i=0;i<dimension;i++){
arr[i]=initialValue;
}
return arr;
};

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

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

function SetUpGeometryAndMesh(dx,dy){
for(var i=0;i<5+1;i++){
tmpr[i]=Array.create(3+1,0);
}
}

function SetUpBoundaryCondition(dx,dy){
for(var j=0;j<3+1;j++){
tmpr[0][j]=4*j*(3.0-j);//左侧
tmpr[5][j]=0;//右侧
}

for(var i=0;i<5+1;i++){//
tmpr[i][0]=10*Math.sin(Math.PI*i/5.0)
tmpr[i][3]=0;//
}
}

function Solve(){
var err,iter=0,maxIter,tmp,N=5*3/*节点总数*/;
do{
err=0/*误差*/,maxIter=100/*最大迭代次数*/;
for(var i=1;i<5;i++){
for(var j=1;j<3;j++){
tmp=0.25*(tmpr[i+1][j]+tmpr[i-1][j]+tmpr[i][j+1]+tmpr[i][j-1]);
err+=(tmp-tmpr[i][j])*(tmp-tmpr[i][j]);
tmpr[i][j]=tmp;
}
}
iter++;//迭代次数
err=Math.sqrt(err/N);
errors.push(err);iters.push(iter)
}while(err>1E-4)

console.info('最终误差：',err);
}

var tmpr=[],iters=[],errors=[];

function getHeat2DProfile(){
var solution=new Solution(tmpr);
var dx=0.1; var dy=0.1;//本特例网格dx与dy必须一致
solution.SetUpGeometryAndMesh(dx,dy);//网格
solution.SetUpBoundaryCondition(dx,dy);//设置边界条件
solution.Solve();//求解

var results=[];
for(var j=0;j<3+1;j++){
for(var i=0;i<5+1;i++){
var arr=[j,i,tmpr[i][j].toFixed(1)];
results.push(arr);
}
}
return results;
}

module.exports = {
getHeat2DProfile: getHeat2DProfile
}
```

```Array.create = function(dimension, initialValue){
var arr = [];
for(var i=0;i<dimension;i++){
arr[i]=initialValue;
}
return arr;
};

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

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

function SetUpGeometryAndMesh(dx,dy){
for(var i=0;i<50+1;i++){
tmpr[i]=Array.create(30+1,0);
Qx[i]=Array.create(30+1,0);
Qy[i]=Array.create(30+1,0);
}
}

function SetUpBoundaryCondition(dx,dy){
for(var j=0;j<30+1;j++){
tmpr[0][j]=0.05*j*(30.0-j);//左侧
tmpr[50][j]=0;//右侧
}

for(var i=0;i<50+1;i++){//
tmpr[i][0]=10*Math.sin(Math.PI*i/50.0)
tmpr[i][30]=0;//
}

tabulateResults(tmpr);
}

function Solve(){
var err,iter=0,tmp,N=51*31/*节点总数*/;
do{
err=0/*误差*/,maxIter=1000/*最大迭代次数*/;
for(var i=1;i<50;i++){
for(var j=1;j<30;j++){
tmp=0.25*(tmpr[i+1][j]+tmpr[i-1][j]+tmpr[i][j+1]+tmpr[i][j-1]);
err+=(tmp-tmpr[i][j])*(tmp-tmpr[i][j]);
tmpr[i][j]=tmp;
}
}
iter++;//迭代次数
err=Math.sqrt(err/N);
errors.push(err);iters.push(iter)
}while(err>1E-4)
tabulateResults(tmpr);
console.info('最终误差：',err);
}

function ShowResults(){}

var tmpr=[],Qx=[],Qy=[],iters=[],errors=[];

function onSolve(){
var solution=new Solution(tmpr);
var dx=0.1;  var dy=0.1;//本特例网格dx与dy必须一致
solution.SetUpGeometryAndMesh(dx,dy);//网格
solution.SetUpBoundaryCondition(dx,dy);//设置边界条件
solution.Solve();//求解
solution.HeatfluxEval(dx,dy);//由流函数计算流体速度
solution.ShowResults();//绘制流函数及速度云图
}```

0 条评论

• ### 9.2 时域分析与频域分析

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

• ### 8.2 时域分析与频域分析

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

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

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

• ### 小程序日历控件js日历数据组装

在h5开发中，很多地方都要用到日历控件，比如生日、出发到达日期等等，今天就来讲讲日历控件数据初始化。 用到了moment插件，moment api地址请点击。

• ### PHP的变量范围

什么是变量的作用域？变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分。 PHP中变量的作用域可以分为：超全局(全局变量的特殊类型...

• ### js设计模式补白之 this/call和apply

这里call(this)显然是把当前的作用域（window）绑定给了getName方法。

• ### （收藏）控制面板都卸载不掉的Microsoft Office，该怎么办？

Microsoft Office 的安装可能会出现很多问题，其中有很大一部分就是因为之前的Office没有卸载干净，同时，卸载Office的时候可能会出现很多问...

• ### 9.2 时域分析与频域分析

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

• ### 8.2 时域分析与频域分析

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

• ### 显示DataGrid序号的一个适用的方法

如果数据量小的话没有问题，一旦数据量大，显示特别慢，还有个缺点就是拖动行高时行号不随行高的变化而变动，出现是几个序号在一个单元格中显示。我自己对他们的算法进行总...