一、效果图
二、 计算的题目,源自于第五版传热学P282,习题6-59
6-59 在太阳能集热器的平板后面用焊接的方法固定了一片冷却水管排,如附图所示。设冷却管与集热器平板之间的接触热阻可以忽略,集热器平板维持在75℃。管子用铜做成,内径为10mm。设进口水温为20℃,水流量为0.2kg/s,冷却管共长2.85m,试确定总的换热量。
三、代码
思路:先假设出口温度值T_ini,利用平均对流传热温差,得到流体的物性参数,然后根据题目已知条件,计算出雷诺数Re、普朗特数Pr和努塞尔数Nu,以及努塞尔数Nu换算出的换热系数h,得到换热量,然后跟进计算的换热量,利用多个公式反计算出口温度值T_nex,最后利用二分法进行迭代计算。(由于物性参数会随温度变化,这里当成40°C水流体的常物性参数来计算)
import sys
import math
import matplotlib.pyplot as plt
# 初始化变量
def Initialize():
t_ini = 75 # 初始假设的流体出口温度,单位:°C
return t_ini
# 已知物理参数、边界条件等
def Physical_Parameters():
t_w = 75 # 热流体温度,单位:°C
t_l = 20 # 进口流体温度,单位:°C
Cp = 4.174e3 # 比热容,单位:J/kg/K
thermal_conductivity = 61.8e-2 # 导热系数,单位:W/m/K
vis = 0.805e-6 # 流体动力粘度,单位:m^2/s
G = 0.2 # 流体入口质量流量,单位:kg/s
d = 0.01 # 管道直径,单位:m
l = 2.85 # 管道长度,单位:m
rho = 995.7 # 流体密度
u = 4 * G / (math.pi * rho * pow(d, 2)) # 计算流体入口速度
s = math.pi * d * l # 计算换热面积
a = thermal_conductivity / rho / Cp # 计算热扩散率
Re = u * d / vis # 计算雷诺数
Pr = vis / a # 计算普朗特数
Nu = 0.023 * pow(Re, 0.8) * pow(Pr, 0.4) # 计算努塞尔数
h = Nu * thermal_conductivity / d # 计算换热系数
Physical_Parameters = [t_w, t_l, h, s, Cp, G]
return Physical_Parameters
# 迭代计算过程函数
def Calculation(T_cur):
T_cur = T_cur
params = Physical_Parameters()
t_w = params[0]
t_l = params[1]
h = params[2]
s = params[3]
Cp = params[4]
G = params[5]
t_f = (t_w + T_cur) / 2
Heat_Flow = h * s * (t_w - t_f) # 计算热流量
# heat2 = G * Cp * (t_o - t_l)
T_nex = Heat_Flow / G / Cp + t_l # 用热流量公式计算出T_nex
return [T_nex, Heat_Flow]
def Residual(T_cur, T_nex):
res = math.fabs(T_nex - T_cur) # 求残差
return res
def iteration(eps, maxIter):
cur_eps = 10000 # 初始残差
T_cur = Initialize()
iterNum = 1
x = []
y = []
print("-----------------------------开始迭代--------------------------------")
print(
"{:^8}{:^5}{:<15}{:^5}{:<15}{:^5}{:<15}{:^5}{:<20}".format("迭代次数", "|", "T_cur", "|", "T_nex", "|", "Heat Flow",
"|", "Eps"))
while (cur_eps > eps and iterNum < maxIter):
plt.clf() # 清除上一幅图像
T_nex, Heat_Flow = Calculation(T_cur)
cur_eps = Residual(T_cur, T_nex)
x.append(iterNum)
y.append(cur_eps)
print("{:^14}|{:<19.8f}|{:<19.8f}|{:<19.8f}|{:<20.8f}".format(iterNum, T_cur, T_nex, Heat_Flow, cur_eps))
iterNum += 1
T_cur = (T_cur + T_nex) / 2 # 温度进行二分法迭代
plt.plot(x,
y,
color='b', # 线条颜色 blue
linewidth=1,
marker='o', # 折线图中添加圆点
markersize=3, # 点的大小
)
plt.yscale("log")
plt.pause(0.05) # 暂停0.01秒
plt.ioff() # 关闭画图的窗口
# plt.draw()
Drawing_error(x, y)
return 0
def Drawing_error(x_values, y_values):
# 设置绘图风格
plt.style.use('ggplot')
# 处理中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 坐标轴负号的处理
plt.rcParams['axes.unicode_minus'] = False
# 横坐标是迭代次数
# 纵坐标是误差值
plt.plot(x_values,
y_values,
color='b', # 线条颜色 blue
linewidth=1,
marker='o', # 折线图中添加圆点
markersize=3, # 点的大小
)
# 修改x轴和y轴标签
plt.xlabel('迭代次数')
plt.ylabel('误差值')
# 显示图形
plt.pause(0.1)
plt.show()
if __name__ == '__main__':
iteration(1e-8, 100)