Python迭代法计算集热器出口温度和换热量

 一、效果图 

二、 计算的题目,源自于第五版传热学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)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值