传热学仿真-主题048-地源热泵系统
第四十八篇:地源热泵系统
摘要
地源热泵系统利用地下土壤或地下水相对稳定的温度特性,实现高效的建筑供暖和制冷。本文系统分析了地源热泵的工作原理和性能评价方法,建立了地埋管换热器的热响应模型和长期热平衡分析,详细讨论了钻孔布置、埋管形式、土壤热物性等关键设计参数。采用Python实现了地埋管温度响应、系统能效分析和运行优化的数值模拟,分析了不同气候条件、建筑负荷特性和运行策略对系统性能的影响,为地源热泵系统设计提供理论指导。
关键词
地源热泵,地埋管换热器,土壤源,COP,热响应测试,热平衡,长期性能

1. 引言
1.1 地源热泵原理
地源热泵利用地下土壤、地下水或地表水作为热源/热汇,通过热泵循环实现建筑供暖制冷。由于地下温度全年相对稳定(通常10-20°C),地源热泵的能效比传统空气源热泵高30-50%。
1.2 系统类型
闭式系统:
- 垂直埋管:占地面积小,效率高
- 水平埋管:成本低,受气候影响大
- 螺旋埋管:介于两者之间
开式系统:
- 直接利用地下水
- 需要回灌,受地质条件限制
2. 理论分析
2.1 地埋管传热模型
线热源模型(Kelvin模型):
T(r,t)−T0=q4πksEi(r24αst)T(r,t) - T_0 = \frac{q}{4\pi k_s} E_i\left(\frac{r^2}{4\alpha_s t}\right)T(r,t)−T0=4πksqEi(4αstr2)
圆柱热源模型:
更精确地考虑钻孔直径和回填材料影响。
g-函数方法:
用于多钻孔系统的长期热响应分析。
2.2 热泵性能
制热性能系数:
COPh=QheatingWcompressorCOP_h = \frac{Q_{heating}}{W_{compressor}}COPh=WcompressorQheating
制冷能效比:
EER=QcoolingWcompressorEER = \frac{Q_{cooling}}{W_{compressor}}EER=WcompressorQcooling
地源热泵COP通常在3-5之间,远高于电加热。
2.3 长期热平衡
热不平衡率:
I=Qheating−QcoolingQheating+QcoolingI = \frac{Q_{heating} - Q_{cooling}}{Q_{heating} + Q_{cooling}}I=Qheating+QcoolingQheating−Qcooling
长期热不平衡会导致土壤温度持续升高或降低,影响系统性能。
3. Python仿真实现
import numpy as np
import matplotlib.pyplot as plt
import os
from scipy.special import expi
output_dir = r'd:\文档\500仿真领域\工程仿真\传热学仿真\主题048'
os.makedirs(output_dir, exist_ok=True)
print("="*60)
print("仿真1:地埋管温度响应")
print("="*60)
# 土壤参数
k_s = 2.0 # W/(m·K),土壤导热系数
rho_s = 2000 # kg/m³,土壤密度
c_s = 800 # J/(kg·K),土壤比热
alpha_s = k_s / (rho_s * c_s) # m²/s,土壤热扩散系数
# 运行参数
q = 50 # W/m,单位长度热流
r_b = 0.075 # m,钻孔半径
# 时间范围
t = np.logspace(0, 9, 100) # s,从1秒到30年
# 线热源解
def line_source_temp(q, k_s, r, t, alpha_s):
"""线热源温度响应"""
if t > 0:
return q / (4 * np.pi * k_s) * expi(-r**2 / (4 * alpha_s * t))
return 0
# 计算温度响应
delta_T = []
for time in t:
dT = line_source_temp(q, k_s, r_b, time, alpha_s)
delta_T.append(dT)
# 时间转换为常用单位
t_hours = t / 3600
t_days = t / (3600 * 24)
t_years = t / (3600 * 24 * 365)
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
ax1 = axes[0]
ax1.semilogx(t_hours[:50], delta_T[:50], 'b-', linewidth=2)
ax1.set_xlabel('Time (hours)', fontsize=11)
ax1.set_ylabel('Temperature Rise (°C)', fontsize=11)
ax1.set_title('Short-term Temperature Response', fontsize=12, fontweight='bold')
ax1.grid(True, alpha=0.3)
ax2 = axes[1]
ax2.plot(t_years, delta_T, 'r-', linewidth=2)
ax2.set_xlabel('Time (years)', fontsize=11)
ax2.set_ylabel('Temperature Rise (°C)', fontsize=11)
ax2.set_title('Long-term Temperature Response', fontsize=12, fontweight='bold')
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}/temperature_response.png', dpi=150, bbox_inches='tight')
plt.close()
print("图1:温度响应已保存")
print("\n" + "="*60)
print("仿真2:COP随土壤温度变化")
print("="*60)
# 土壤温度范围
T_soil = np.linspace(5, 25, 50)
# 建筑侧温度
T_building_heating = 45 # °C,供暖
T_building_cooling = 7 # °C,制冷
# 简化COP模型
COP_heating = 3.5 + 0.08 * (T_soil - 10)
EER_cooling = 4.0 + 0.1 * (20 - T_soil)
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(T_soil, COP_heating, 'r-', linewidth=2, label='Heating COP')
ax.plot(T_soil, EER_cooling, 'b-', linewidth=2, label='Cooling EER')
ax.set_xlabel('Soil Temperature (°C)', fontsize=11)
ax.set_ylabel('Performance Factor', fontsize=11)
ax.set_title('Heat Pump Performance vs Soil Temperature', fontsize=12, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}/cop_analysis.png', dpi=150, bbox_inches='tight')
plt.close()
print("图2:COP分析已保存")
print("\n" + "="*60)
print("仿真3:地埋管换热器设计")
print("="*60)
# 地埋管换热器设计计算
# 建筑负荷
Q_heating = 15000 # W
Q_cooling = 12000 # W
# 土壤参数
k_soil = 2.0 # W/(m·K)
T_ground = 15 # °C
# 地埋管参数
D_borehole = 0.15 # m
H_borehole = 100 # m
D_pipe = 0.032 # m
# 计算所需钻孔数量
# 单位长度换热量
q_heating = 50 # W/m(冬季)
q_cooling = 60 # W/m(夏季)
N_boreholes_heating = int(Q_heating / (q_heating * H_borehole)) + 1
N_boreholes_cooling = int(Q_cooling / (q_cooling * H_borehole)) + 1
N_boreholes = max(N_boreholes_heating, N_boreholes_cooling)
print(f"冬季所需钻孔数: {N_boreholes_heating}")
print(f"夏季所需钻孔数: {N_boreholes_cooling}")
print(f"设计钻孔数: {N_boreholes}")
# 钻孔间距
spacing = 4 # m
total_area = N_boreholes * spacing**2
print(f"钻孔间距: {spacing}m")
print(f"占地面积: {total_area}m²")
# 长期土壤温度变化
years_operation = np.arange(0, 21)
T_ground_change = T_ground + 2 * np.sin(2 * np.pi * years_operation / 10) # 10年周期变化
# 可视化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 钻孔布置示意图
ax1 = axes[0]
if N_boreholes <= 16:
n_rows = int(np.ceil(np.sqrt(N_boreholes)))
for i in range(N_boreholes):
row = i // n_rows
col = i % n_rows
circle = plt.Circle((col * spacing, row * spacing), D_borehole/2, color='brown', alpha=0.7)
ax1.add_patch(circle)
ax1.set_xlim(-1, n_rows * spacing + 1)
ax1.set_ylim(-1, n_rows * spacing + 1)
ax1.set_aspect('equal')
ax1.set_title('Borehole Field Layout', fontsize=12, fontweight='bold')
ax1.set_xlabel('Distance (m)', fontsize=11)
ax1.set_ylabel('Distance (m)', fontsize=11)
else:
ax1.text(0.5, 0.5, f'{N_boreholes} Boreholes\nSpacing: {spacing}m\nArea: {total_area}m²',
ha='center', va='center', fontsize=14, transform=ax1.transAxes,
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax1.axis('off')
ax1.set_title('Borehole Field Summary', fontsize=12, fontweight='bold')
# 土壤温度长期变化
ax2 = axes[1]
ax2.plot(years_operation, T_ground_change, 'b-', linewidth=2, marker='o')
ax2.axhline(y=T_ground, color='r', linestyle='--', alpha=0.5, label='Original T')
ax2.fill_between(years_operation, T_ground_change, T_ground, alpha=0.3)
ax2.set_xlabel('Years of Operation', fontsize=11)
ax2.set_ylabel('Ground Temperature (°C)', fontsize=11)
ax2.set_title('Long-term Ground Temperature Change', fontsize=12, fontweight='bold')
ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}/borehole_design.png', dpi=150, bbox_inches='tight')
plt.close()
print("图3:地埋管设计已保存")
print("\n" + "="*60)
print("仿真4:地源热泵系统经济性分析")
print("="*60)
# 与空气源热泵对比
# 系统投资
cost_gshp = 150000 # 元(地源热泵,含地埋管)
cost_ashp = 80000 # 元(空气源热泵)
# 运行费用
annual_cost_gshp = 4000 # 元/年
annual_cost_ashp = 6500 # 元/年
savings_annual = annual_cost_ashp - annual_cost_gshp
payback_gshp = (cost_gshp - cost_ashp) / savings_annual
print(f"地源热泵投资: {cost_gshp}元")
print(f"空气源热泵投资: {cost_ashp}元")
print(f"年运行节省: {savings_annual}元")
print(f"投资回收期: {payback_gshp:.1f}年")
# 15年总成本
years = 15
total_cost_gshp = cost_gshp + annual_cost_gshp * years
total_cost_ashp = cost_ashp + annual_cost_ashp * years
print(f"15年总成本 - 地源热泵: {total_cost_gshp}元")
print(f"15年总成本 - 空气源热泵: {total_cost_ashp}元")
# 可视化
fig, ax = plt.subplots(figsize=(10, 6))
years_range = np.arange(0, 21)
cumulative_gshp = cost_gshp + annual_cost_gshp * years_range
cumulative_ashp = cost_ashp + annual_cost_ashp * years_range
ax.plot(years_range, cumulative_gshp/10000, 'b-', linewidth=2, label='Ground Source Heat Pump')
ax.plot(years_range, cumulative_ashp/10000, 'r-', linewidth=2, label='Air Source Heat Pump')
ax.axvline(x=payback_gshp, color='g', linestyle='--', alpha=0.5, label=f'Payback: {payback_gshp:.1f} years')
ax.set_xlabel('Years', fontsize=11)
ax.set_ylabel('Cumulative Cost (10,000 Yuan)', fontsize=11)
ax.set_title('Life Cycle Cost Comparison', fontsize=12, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}/lifecycle_cost.png', dpi=150, bbox_inches='tight')
plt.close()
print("图4:生命周期成本已保存")
print("\n" + "="*60)
print("仿真5:地源热泵与太阳能联合系统")
print("="*60)
# 地源热泵与太阳能联合供热系统
# 系统参数
Q_heating_load = 15000 # W
# 地源热泵参数
COP_gshp = 4.0
P_gshp = Q_heating_load / COP_gshp # 电功率
# 太阳能集热器参数
A_solar = 20 # m²
efficiency_solar = 0.6
# 月平均太阳辐射
months = np.arange(12)
I_monthly = np.array([250, 300, 450, 550, 650, 700, 720, 680, 550, 400, 280, 220]) # W/m²
# 月采暖负荷
T_outdoor_monthly = np.array([-5, -2, 5, 12, 18, 24, 28, 26, 20, 12, 4, -3])
T_indoor = 20
heating_degree_days = np.maximum(0, T_indoor - T_outdoor_monthly)
Q_monthly_load = Q_heating_load * heating_degree_days / np.sum(heating_degree_days) * 720 # kWh
# 太阳能贡献
Q_solar_monthly = A_solar * efficiency_solar * I_monthly * 720 / 1000 # kWh
Q_solar_contribution = np.minimum(Q_solar_monthly, Q_monthly_load)
# 地源热泵承担
Q_gshp_monthly = Q_monthly_load - Q_solar_contribution
E_gshp_monthly = Q_gshp_monthly / COP_gshp
# 年能耗
annual_electricity = np.sum(E_gshp_monthly)
annual_solar = np.sum(Q_solar_contribution)
print(f"年太阳能供热: {annual_solar:.0f} kWh")
print(f"年地源热泵耗电: {annual_electricity:.0f} kWh")
print(f"太阳能保证率: {annual_solar/np.sum(Q_monthly_load)*100:.1f}%")
# 可视化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 月度能量平衡
ax1 = axes[0]
month_names = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
x_pos = np.arange(12)
width = 0.35
bars1 = ax1.bar(x_pos - width/2, Q_monthly_load/1000, width, label='Heat Load', color='orangered', alpha=0.8)
bars2 = ax1.bar(x_pos + width/2, Q_solar_contribution/1000, width, label='Solar Contribution', color='gold', alpha=0.8)
ax1.set_xlabel('Month', fontsize=11)
ax1.set_ylabel('Energy (MWh)', fontsize=11)
ax1.set_title('Monthly Energy Balance', fontsize=12, fontweight='bold')
ax1.set_xticks(x_pos)
ax1.set_xticklabels(month_names, rotation=45)
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3, axis='y')
# 系统效率对比
ax2 = axes[1]
systems = ['Electric\nHeater', 'Air Source\nHeat Pump', 'Ground Source\nHeat Pump', 'GSHP+Solar']
COP_values = [1.0, 2.5, 4.0, 5.5] # 等效COP
colors_sys = ['orangered', 'gold', 'steelblue', 'forestgreen']
bars = ax2.bar(systems, COP_values, color=colors_sys, alpha=0.8)
ax2.set_ylabel('Effective COP', fontsize=11)
ax2.set_title('System Efficiency Comparison', fontsize=12, fontweight='bold')
ax2.grid(True, alpha=0.3, axis='y')
for bar, val in zip(bars, COP_values):
ax2.text(bar.get_x() + bar.get_width()/2., bar.get_height() + 0.1,
f'{val:.1f}', ha='center', va='bottom', fontsize=11, fontweight='bold')
plt.tight_layout()
plt.savefig(f'{output_dir}/hybrid_system.png', dpi=150, bbox_inches='tight')
plt.close()
print("图5:联合系统已保存")
print("\n" + "="*60)
print("仿真6:地埋管热响应测试")
print("="*60)
# 热响应测试(TRT)模拟
# 测试参数
Q_injection = 6000 # W,加热功率
T_initial = 15 # °C,初始土壤温度
k_soil_trt = 2.5 # W/(m·K),土壤导热系数
alpha_soil = 0.08 # m²/day,热扩散系数
# 测试时间
t_days = np.linspace(0, 3, 100)
t_seconds = t_days * 24 * 3600
# 线热源模型
r_borehole = 0.075 # m,钻孔半径
T_borehole = T_initial + Q_injection / (4 * np.pi * k_soil_trt) * \
np.log(4 * alpha_soil * t_seconds / r_borehole**2) + 0.5772
# 考虑热容的修正
T_corrected = T_borehole * (1 - np.exp(-t_days/0.5))
print(f"初始土壤温度: {T_initial}°C")
print(f"3天后钻孔壁温度: {T_corrected[-1]:.2f}°C")
print(f"温升: {T_corrected[-1] - T_initial:.2f}°C")
# 可视化
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(t_days, T_corrected, 'b-', linewidth=2)
ax.axhline(y=T_initial, color='r', linestyle='--', alpha=0.5, label=f'Initial T = {T_initial}°C')
ax.fill_between(t_days, T_corrected, T_initial, alpha=0.3)
ax.set_xlabel('Time (days)', fontsize=11)
ax.set_ylabel('Borehole Wall Temperature (°C)', fontsize=11)
ax.set_title('Thermal Response Test Simulation', fontsize=12, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig(f'{output_dir}/trt_simulation.png', dpi=150, bbox_inches='tight')
plt.close()
print("图6:热响应测试已保存")
print("\n所有仿真完成!")
4. 工程应用
4.1 住宅建筑
- 小型垂直埋管系统
- 地板辐射供暖
- 与太阳能联合运行
4.2 商业建筑
- 大型地埋管阵列
- 热回收系统
- 冰蓄冷结合
4.3 区域能源系统
- 分布式地源热泵
- 地下蓄热系统
- 多能互补
5. 本章小结
地源热泵是一种高效、环保的建筑空调技术,其性能受土壤热物性、埋管设计和运行策略的影响。通过合理设计和长期热平衡管理,可以确保系统稳定高效运行20年以上。




AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)