python 调用 CoolProp 计算介质的物性

之前常用的物性计算软件是 Nist Refprop,在 Excel 中计算时调用起来非常好使。
但是计算方程组求解时 Excel 就不太好用了。。

发现了一个开源软件:CoolProp,它支持多种程序或语言的调用,接口比较好;
对 python 的支持也非常方便。

1. 安装 CoolProp

  • 直接使用 pip 安装:

    1
    pip install CoolProp
  • 或者安装开发版(稳定版偶尔有编译问题,导致安装失败):

    1
    2
    # install the latest nightly release version
    pip install -vvv --pre --trusted-host www.coolprop.dreamhosters.com --find-links http://www.coolprop.dreamhosters.com/binaries/Python/ -U --force-reinstall CoolProp

2. 基本使用

2.1 参数说明

ref: http://www.coolprop.org/coolprop/HighLevelAPI.html

D, DMASS kg/m^3 Mass density 密度
H, HMASS J/kg Enthalpy
P Pa Pressure 压力
Q mol/mol Mass vapor quality 气体占比
T K Temp 温度
A, SPEED_OF_SOUND m/s Speed of sound 声速
CONDUCTIVITY, L W/m/K Thermal conductivity 热导率
CVMASS, O J/kg/K Mass specific constant volume specific heat 定容比热容
C, CPMASS J/kg/K Mass specific constant pressure specific heat 定压比热容
I, SURFACE_TENSION N/m Surface tension 表面张力
M, MOLARMASS kg/mol Molar mass 摩尔质量
PCRIT Pa Pressure at the critical point 临界压力
TCRIT K Temperature at the critical point 临界温度
V, VISCOSITY Pa·s Viscosity 粘度
Z Compressibility factor 压缩系数
  • 示例1:

    1
    2
    3
    4
    5
    6
    7
    from CoolProp.HumidAirProp import HAPropsSI
    from CoolProp.CoolProp import PropsSI

    p = 101325
    t = PropsSI('T', 'P', p, 'Q', 0, 'Water')
    print('\n-------------CoolProp-------------')
    print('- 在 {} Pa(abs) 时,水的饱和温度: {:.2f} K \n'.format(p, t)) # 373.12 K
  • 示例2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from CoolProp.HumidAirProp import HAPropsSI
    from CoolProp.CoolProp import PropsSI
    paras = {'D': 'kg/m^3',
    'H': 'J/kg',
    'A': 'J/kg/K',
    'L': 'W/m/K',
    'O': 'J/kg/K',
    'C': 'J/kg/K',
    'M': 'kg/mol',
    'V': 'Pa.S',
    'Z': '-'}

    for (k, v) in paras.items():
    v1 = CP.PropsSI(k, 'T', 273.15+20, 'P', 101325, 'water')
    print(f' {k}: {v1:10.4f} {v}')

2.2 直接定义一个类,方便调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from CoolProp.CoolProp import PropsSI

class WaterProp(object):
# 求特定压力下的物性
def __init__(self, p=101325):
self.T = PropsSI('T', 'P', p, 'Q', 0, 'Water') # 饱和温度
self.C = PropsSI('C', 'P', p, 'Q', 0, 'Water') # 比热容
self.D_l = PropsSI('D', 'P', p, 'Q', 0, 'Water') # 液体密度
self.D_v = PropsSI('D', 'P', p, 'Q', 1, 'Water') # 蒸汽密度

self.H_l = PropsSI('H', 'P', p, 'Q', 0, 'Water')
self.H_v = PropsSI('H', 'P', p, 'Q', 1, 'Water')
self.H = self.H_v - self.H_l # 汽化潜热
self.L_l = PropsSI('L', 'P', p, 'Q', 0, 'Water') # 导热系数
self.I_l = PropsSI('I', 'P', p, 'Q', 0, 'Water') # 表面张力

self.U_l = PropsSI('V', 'P', p, 'Q', 0, 'Water') # 动力粘度
self.V_l = self.U_l / self.D_l # 运动粘度
self.Prl = PropsSI('Prandtl', 'P', p, 'Q', 0, 'Water') # 普朗特数

self.print_prop()

def print_prop(self):
print('\n-------------CoolProp-------------')
print('- {}: {:>10s} {:<10}'.format('介质名称', 'Water', '单位'))
print('- {}: {:>10.2f} {:<10}'.format('计算压力', p, 'Pa'))
print('- {}: {:>10.2f} {:<10}'.format('饱和温度', self.T, 'K'))
print('- {}: {:>10.2f} {:<10}'.format('液体密度', self.D_l, 'kg/m3'))
print('- {}: {:>10.4f} {:<10}'.format('蒸汽密度', self.D_v, 'kg/m3'))
print('- {}: {:>10.2f} {:<10}'.format('汽化潜热', self.H, 'J/kg'))
print('- {}: {:>10.4f} {:<10}'.format('导热系数', self.L_l, 'W/m.K'))
print('- {}: {:>10.4e} {:<10}'.format('运动粘度', self.V_l, 'm2/s'))
print('- {}: {:>10.4f} {:<10}'.format('普朗特数', self.Prl, '-'))


WaterProp(p=101325)
'''
- 介质名称: Water 单位
- 计算压力: 101325.00 Pa
- 饱和温度: 373.12 K
- 液体密度: 958.37 kg/m3
- 蒸汽密度: 0.5977 kg/m3
- 汽化潜热: 2256471.59 J/kg
- 导热系数: 0.6772 W/m.K
- 运动粘度: 2.9389e-07 m2/s
- 普朗特数: 1.7533
'''

3. 湿空气计算

CoolProp 可以直接计算 湿空气的物性。

  • 参数说明:
P Pa Pressure 压力
T K Dry-Bulb Temp 干球温度
Twb K Wet-Bulb Temp 湿球温度
Tdp K Dew-Point Temp 露点温度
R Relative humidity 相对湿度
W kg/kga Humidity Ratio 含湿量
H J/kga Mixture Enthalpy 比焓
  • 示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from CoolProp.HumidAirProp import HAPropsSI

    w = HAPropsSI('W', 'T', 273.15+25, 'P', 101325, 'R', 0.5)
    t_dp = HAPropsSI('Tdp', 'T', 273.15+25, 'P', 101325, 'R', 0.5)
    h = HAPropsSI('H', 'T', 273.15+25, 'P', 101325, 'R', 0.5)

    print('\n-------------CoolProp-------------')
    print('在 25℃ , 101325Pa 时,相对湿度为 50% 的湿空气, ')
    print('- 含湿量为 {:>8.2%} kg/kga'.format(w)) # 0.99%
    print('- 露点为 {:>8.2f} ℃'.format(t_dp-273.15)) # 13.87
    print('- 比焓为 {:>8.2f} kJ/kg'.format(h/1000)) # 50.42

更多用法见官网 : http://www.coolprop.org/coolprop/wrappers/Python/index.html#python