本次求解不一定对,请先看最后说明
本次问题条件如下:
计算模拟如下一维常物性无内热源非稳态导热的温度场,以及内外壁面的热流密度,并进行温度场和热流的特点分析,相关参数如下。
室内温度恒定为20℃,无限大平壁的比热为1.0kJ/kg℃,室外气温周期性变化,周期为1天(即24小时)。
由问题所给条件可知,边界条件为对流边界条件,则该一维常物性无内热源非稳态导热问题的有限单元节点方程如下(注这里不是有限差分法,是有限单元法,离散格式为隐式):
clear;
clc;
clf;
format long;
global dx dt lambda rou ep;
h1 = 10; %室内侧对流换热系数 W/(m^2*K)
t1 = 20; %室内侧空气温度 K
h2 = 20; %室外侧对流换热系数 W/(m^2*K)
t2_0 = 30; %室外侧空气温度定值部分 K
Aw = 15; %室外侧空气温度变化系数
%室外侧空气温度 t2 = t2_0 + Aw*cos(2*pi*dt*(K-1)/T_all);
D = 0.3; %无限大平壁厚度 m
c = 1000; %比热容 J/kg*K
lambda = 2; %导热系数 W/(m*K)
rou = 2000; %密度 kg/m^3
dx = 0.001; %空间步长 m
N = D/dx; %厚度划分数目
dt = 60; %时间步长 s
T_all = 24*3600; %周期长度 s
day = 14; %所计算的天数
TN = 60*24*day; %所计算时间节点的数目
ep = 0.000001;%求解精度
本模块相关参数定义如下:
命名 |
意义 |
值 |
单位 |
dx |
空间步长 |
0.001 |
m |
I |
空间下标 |
||
N |
厚度划分数目 |
300 |
|
dt |
时间步长 |
60 |
s |
K |
时间下标 |
||
TN |
时间划分数目 |
60*24*day |
|
T_all |
周期长度(一天) |
24*3600 |
s |
day |
计算天数 |
7 |
天 |
lambda |
平壁导热系数 |
2 |
W/(m*℃) |
rou |
平壁密度 |
2000 |
kg/m^3 |
c |
平壁比热容 |
1000 |
J/kg*K |
h1 |
室内侧对流换热系数 |
10 |
W/(m^2*℃) |
t1 |
室内侧空气温度 |
20 |
℃ |
h2 |
室外侧对流换热系数 |
20 |
W/(m^2*℃) |
t2_0 |
室外侧空气温度定值部分 |
30 |
℃ |
Aw |
室外侧空气温度变化系数 |
15 |
℃ |
t2 |
室外侧空气温度 |
t2_0 + Aw*cos(2*pi*dt*(K-1)/T_all) |
|
ep |
求解精度 |
0.000001 |
|
用高斯赛德尔迭代法求解需要将节点方程式组化为下列矩阵形式
根据节点方程式组对系数项和常量项矩阵进行定义,分别定义为a和b数组。
%预设数组大小
T = zeros(N+1,TN+1); %平壁温度场,行向量为节点,列向量为时间
T0 = zeros(N+1,TN+1);
t2 = zeros(1,TN+1); %室外侧空气温度 K
a = zeros(N+1,N+1);
for I = 1:N+1
%自定义数组wall为墙体初始温度
T(I,1) = 20 + I*10/N; %初始温度为25℃
end
%定义线性方程组系数矩阵
a(1,1) = lambda/dx + h1 + rou*c*dx/3/dt;
a(1,2) = rou*c*dx/6/dt - lambda/dx;
a(N+1,N) = rou*c*dx/6/dt - lambda/dx;
a(N+1,N+1) = lambda/dx + h2 + rou*c*dx/3/dt;
for I = 2:N
a(I,I-1) = rou*c*dx/6/dt - lambda/dx;
end
for I = 2:N
a(I,I) = 2*lambda/dx + 2*rou*c*dx/3/dt;
a(I,I+1) = rou*c*dx/6/dt - lambda/dx;
end
矩阵等号右侧列向量[B]只与K时刻的节点温度有关,从K=1时刻,即初始条件计算开始,采用高斯赛德尔迭代法求解上述矩阵形式的线性代数方程组,就可以得到K=2时刻的各节点温度,再以此时刻的温度作为新的系数,就可以逐时求解出各时刻节点温度场。因此该部分主要有两层嵌套,最底层是每一时刻下的各节点温度值,用高斯赛德尔迭代法求解,第二层是时间循环,因为该问题是非稳态传热,需要计算多个时刻的温度场。最终得到T(I,K)温度场的解。
这里需要注意的地方是,高斯赛德尔迭代法能相对更快速收敛的地方就在于它每次计算都使用了最新解,因此计算时需要按顺序进行;同时,在高斯赛德尔迭代求解中,一开始也需要提供一个任意初试解,以便方程组进行迭代求解,这个地方要注意同初始时刻温度场区分,因为高斯赛德尔的初始解在每个时刻下的循环中都会用到,而初始温度场只有在最开始时刻的迭代中会用到。
%高斯塞尔的迭代法求解
for K = 2:TN+1
iter = 0; %记录高斯赛德尔迭代循环次数
for I = 1:N+1
T0(I,K) = 10;%设置开始迭代前的初始解
end
b(1) = h1*t1 + (rou*c*dx/dt/6) * (2*T(1,K-1)+T(2,K-1));
t2(K) = t2_0 + Aw*cos(2*pi*dt*(K-1)/T_all);
b(N+1) = h2*t2(K) + (rou*c*dx/dt/6) * (2*T(N+1,K-1)+T(N,K-1));
for I = 2:N
b(I) = (rou*c*dx/dt/6) * (T(I-1,K-1)+4*T(I,K-1)+T(I+1,K-1));
end
while iter < 1000
error = 0;
num = 0;
for I = 1:N+1
if I == 1
T(1,K) = (b(1) - (a(1,2:N+1)*(T0(2:N+1,K))))/a(1,1);
elseif I == N+1
T(N+1,K) = (b(N+1) - a(N+1,1:N)*(T(1:N,K)))/a(N+1,N+1);
else
T(I,K) = (b(I) - a(I,1:I-1)*(T(1:I-1,K)) - a(I,I+1:N+1)*(T0(I+1:N+1,K-1)))/a(I,I);
end
error = error + abs(T(I,K) - T0(I,K));
num = num + 1;
end
if error < ep
break;
end
T0 = T;
iter = iter + 1;
end
end
%作图
X = zeros(1,N+1);
Y = zeros(1,24*day);
TT = zeros(24*day,N+1);
for K = 1:24*day
Y(K) = 60*(K-1)+1; %60分钟一个数
for I = 1:N+1
X(I) = I;
TT(K,I) = T(X(I),Y(K));
end
end
figure(1)
hold on;
[XX,YY] = meshgrid(X,Y);
surfc(YY,XX,TT)
xlabel('Time - AXIS')
ylabel('Thickness - AXIS')
zlabel('T (^{\circ}C)')
title(colorbar,'^{\circ}C')
温度场可视化:
7天时间内的无限大平壁温度场如图所示,为了便于可视化,每隔30分钟取一次解显示,一共得到336个时间节点的温度场解。
表面热流密度分析:
根据牛顿冷却公式
由于已经求解出温度场,可根据上式计算本问题中的无限大平壁各个时刻下的内外表面热流密度,在Excel中对内外壁面的热流密度进行分析,下图为内外壁面热流密度、室内外空气温度、平壁内外表面壁温随时间的变化曲线。
由上述求解结果可以推断得到
但是这个求解结果有一个问题,就是内表面壁温未观察到明显周期性变化。我检查过代码好几次,但是仍然没有发现问题,虽然外侧和规律符合得很好,但是内侧理应也能观察到周期性变化的,这一点可以参考章熙民的第六版《传热学》的第三章第五节,如果有看出问题的欢迎指出。