关于 nist-refprop
这份技能指南介绍如何通过 Python 封装调用 NIST REFPROP,查询热力学和输运性质。面向需要参考级流体及混合物计算的工程师和研究人员;REFPROP 需商业授权。
主要功能
- 01热力学性质查询
- 02输运性质计算
- 03支持纯流体与混合物
- 04气液与液液平衡计算
- 05支持多种输入性质对
- 06通过 `ctREFPROP` 使用 Python 接口
适用场景
- 01查询指定流体状态的焓和密度
- 02评估制冷剂混合物的温度滑移
- 03计算混合物相平衡
- 04为工程设计或研究获取物性数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ soljourner/ claude-engineering-skills --skill nist-refprop安装后在 Claude Code 中输入/nist-refprop确认已加载。
附带文件examples.pyreference.md
详细介绍
NIST REFPROP 数据库技能
使用 NIST REFPROP(Reference Fluid Thermodynamic and Transport Properties)数据库查询高精度热力学和传输性质——它是热物性计算的黄金标准。
概述
NIST REFPROP 是由美国国家标准与技术研究院(NIST)开发的商业级热物性数据库。它提供:
- 纯流体:147 种以上纯流体,精度为当前最高水平
- 混合物:预定义和自定义混合物,并支持高级混合规则
- 制冷剂混合物:涵盖所有常见制冷剂混合物,并考虑温度滑移
- 传输性质:黏度、热导率、表面张力
- 热力学性质:焓、熵、密度、比热容
- 相平衡:针对混合物进行 VLE、LLE、VLLE 计算
- 最高精度:参考级数据,并经实验测量验证
REFPROP 是以下领域的行业和研究标准:
- 要求最高精度的关键工程设计
- 验证其他性质数据库(CoolProp 经 REFPROP 验证)
- 具有复杂相态行为的混合物计算
- 考虑温度滑移的制冷剂混合物应用
- 研究和出版级数据
许可
需要商业许可证
NIST REFPROP 不是免费或开源软件。必须向 NIST 购买许可证:
- 标准许可证:约 300 美元(一次性购买)
- 学术定价:面向教育机构提供
- 购买地址:https://www.nist.gov/srd/refprop
许可证包含:
- REFPROP 软件(Windows GUI)
- 流体数据库文件
- Excel 加载项
- FORTRAN/DLL 库
- Python 封装兼容性
重要说明:
- 许可证按用户授权,永久有效(一次性费用)
- 约 5 年内提供更新和新流体文件
- 商业应用必须获得许可证
- 不得重新分发
安装
第 1 步:购买并安装 REFPROP
- 从 NIST 购买 REFPROP 许可证:https://www.nist.gov/srd/refprop
- 下载并安装 REFPROP(通常安装到
C:\Program Files (x86)\REFPROP\) - 记下安装目录路径
第 2 步:安装 Python 封装
pip install ctREFPROP
ctREFPROP 包使用 ctypes 提供 REFPROP 的 Python 接口。
第 3 步:设置 RPPREFIX 环境变量
Python 封装需要知道 REFPROP 的安装位置:
Windows:
# PowerShell
$env:RPPREFIX = "C:\Program Files (x86)\REFPROP\"
# Or set permanently via System Properties > Environment Variables
Linux/Mac:
export RPPREFIX="/path/to/REFPROP/"
Python(替代方法):
import os
os.environ['RPPREFIX'] = r'C:\Program Files (x86)\REFPROP'
第 4 步:验证安装
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary
# Initialize REFPROP
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])
# Test query
print(RP.RPVersion())
可用流体
REFPROP 包含 147 种以上纯流体,按类别整理如下:
常见工业流体
- 水(H₂O)- IAPWS-95 公式
- 空气 - 干空气混合物
- 二氧化碳(CO₂)
- 氮气(N₂)
- 氧气(O₂)
- 氩气(Ar)
- 氦气(He)
- 氢气(H₂)
烃类(40 种以上流体)
- 烷烃:甲烷、乙烷、丙烷、丁烷、戊烷、己烷、庚烷、辛烷、壬烷、癸烷(及其异构体)
- 烯烃:乙烯、丙烯、丁烯
- 芳香烃:苯、甲苯、二甲苯
- 环烃:环己烷、环戊烷
制冷剂(60 种以上流体)
- CFC:R11、R12、R13、R113、R114、R115
- HCFC:R22、R123、R124、R141b、R142b
- HFC:R23、R32、R125、R134a、R143a、R152a、R227ea、R236fa、R245fa、R365mfc
- HFO:R1234yf、R1234ze(E)、R1233zd(E)、R1336mzz(Z)
- 天然制冷剂:R717(氨)、R744(CO₂)、R290(丙烷)、R600a(异丁烷)
- 混合物:R404A、R407C、R410A、R507A、R407F、R448A、R449A、R450A、R513A
低温流体
- 氦、氖、氩、氪、氙
- 氢、氘、仲氢
- 氮、氧、氟
- 甲烷、乙烷(LNG 组分)
特种流体
- 硅氧烷:D4、D5、D6、MD2M、MD3M、MD4M、MDM、MM(ORC 应用)
- 醇类:甲醇、乙醇、丙醇、丁醇
- 其他有机物:丙酮、苯、甲苯
- 无机物:氨、二氧化硫、硫化氢
完整流体列表请参阅 reference.md。
性质查询
核心功能
REFPROP 使用的函数调用与 CoolProp 不同:
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary
import os
# Initialize
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])
# Define fluid
MOLAR_BASE_SI = RP.GETENUMdll(0, "MOLAR BASE SI").iEnum
fluid = "WATER"
# Single component
r = RP.REFPROPdll(fluid, "TP", "D;H;S;CP;CV;W;VIS;TCX", MOLAR_BASE_SI, 0, 0, 298.15, 101.325, [1.0])
# Access results
density = r.Output[0] # kg/m³
enthalpy = r.Output[1] # J/kg
entropy = r.Output[2] # J/kg/K
cp = r.Output[3] # J/kg/K
cv = r.Output[4] # J/kg/K
sound_speed = r.Output[5] # m/s
viscosity = r.Output[6] # Pa·s
conductivity = r.Output[7] # W/m/K
输入规格
| 代码 | 属性 | 单位 |
|---|---|---|
TP | 温度、压力 | K、kPa |
TH | 温度、焓 | K、J/kg |
TS | 温度、熵 | K、J/kg/K |
TD | 温度、密度 | K、kg/m³ |
PH | 压力、焓 | kPa、J/kg |
PS | 压力、熵 | kPa、J/kg/K |
PD | 压力、密度 | kPa、kg/m³ |
TQ | 温度、干度 | K、- |
PQ | 压力、干度 | kPa、- |
输出属性
| 代码 | 属性 | 单位 |
|---|---|---|
D | 密度 | kg/m³ |
H | 焓 | J/kg |
S | 熵 | J/kg/K |
U | 内能 | J/kg |
CP | 热容(定压) | J/kg/K |
CV | 热容(定容) | J/kg/K |
W | 声速 | m/s |
VIS | 黏度 | Pa·s |
TCX | 热导率 | W/m/K |
KV | 运动黏度 | m²/s |
PRANDTL | 普朗特数 | - |
STN | 表面张力 | N/m |
P | 压力 | kPa |
T | 温度 | K |
Q | 干度(蒸气分数) | - |
一次调用可以请求多个属性,使用分号分隔:"D;H;S;CP;VIS;TCX"
混合物计算
REFPROP 的一项关键优势是具备复杂的混合物处理能力:
# Define mixture by components and mole fractions
fluid = "METHANE;ETHANE;PROPANE"
z = [0.9, 0.07, 0.03] # Mole fractions (must sum to 1.0)
# Query mixture properties
r = RP.REFPROPdll(fluid, "TP", "D;H;S", MOLAR_BASE_SI, 0, 0, 250.0, 5000.0, z)
混合物特性:
- 混合物最多可包含 20 个组分
- 高级混合规则(GERG-2008、Kunz-Wagner 等)
- 计算非共沸混合物的温度滑移
- 气液平衡(VLE)计算
- 某些体系的液液平衡(LLE)计算
相较于 CoolProp 的优势
CoolProp 非常出色且免费,而 REFPROP 还提供:
1. 更高的精度
- REFPROP 是其他库进行验证时采用的参考标准
- 状态方程更精确,尤其是在临界点附近
- 输运性质关联式更准确
- 典型精度:密度为 0.01%,而 CoolProp 为 0.1%
2. 更多流体
- 147 种以上的纯流体,而 CoolProp 中约有 120 种
- 包含所有最新制冷剂(HFO:R1234yf、R1234ze、R1233zd 等)
- 更多工业和特种化学品
- 经常更新,加入新流体
3. 更完善的混合物处理
- 更优的混合规则(GERG-2008、高级模型)
- 可处理复杂的非理想混合物
- 可计算非共沸制冷剂混合物的温度滑移
- VLE/LLE 计算
- 最多支持 20 个组分,而 CoolProp 对混合物的支持有限
4. 更广的属性范围
- 在更宽的温度和压力范围内有效
- 外推表现更佳
- 在极端条件下更可靠
5. 其他能力
- 湿度计算(湿空气学)
- 闪蒸计算(PT、PH、PS 等)
- 带雅可比矩阵的饱和性质
- 辅助方程
- 伪纯流体近似
6. 官方支持
- 由 NIST(美国国家标准与技术研究院)维护
- 提供技术支持
- 定期更新,纳入最新研究成果
- 结果符合出版要求
何时使用 REFPROP,何时使用 CoolProp
在以下情况下使用 REFPROP:
- 需要最高精度(±0.01%)
- 处理复杂混合物
- 需要最新制冷剂数据(HFO)
- 用于出版或关键设计工作
- 预算允许购买商业许可证
- 处理非共沸混合物(温度滑移)
在以下情况下使用 CoolProp:
- 预算有限(免费/开源)
- 只需基本属性(可接受 ±0.1% 精度)
- 仅使用纯流体
- 需要开源许可证
- 快速原型开发
**验证说明:**CoolProp 已通过 REFPROP 验证,确认 REFPROP 是参考标准。
常见工作流示例
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary
import os
# Setup
os.environ['RPPREFIX'] = r'C:\Program Files (x86)\REFPROP'
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])
MOLAR_BASE_SI = RP.GETENUMdll(0, "MOLAR BASE SI").iEnum
# Query water at 25°C, 1 bar
fluid = "WATER"
T = 298.15 # K
P = 100.0 # kPa
r = RP.REFPROPdll(fluid, "TP", "D;H;S;CP;VIS;TCX", MOLAR_BASE_SI, 0, 0, T, P, [1.0])
print(f"Water at {T} K, {P} kPa:")
print(f" Density: {r.Output[0]:.4f} kg/m³")
print(f" Enthalpy: {r.Output[1]:.2f} J/kg")
print(f" Entropy: {r.Output[2]:.2f} J/kg/K")
print(f" Cp: {r.Output[3]:.2f} J/kg/K")
print(f" Viscosity: {r.Output[4]*1000:.4f} mPa·s")
print(f" Conductivity: {r.Output[5]:.4f} W/m/K")
错误处理
REFPROP 会返回错误代码和消息:
r = RP.REFPROPdll(fluid, "TP", "D", MOLAR_BASE_SI, 0, 0, T, P, z)
if r.ierr > 0:
print(f"Error {r.ierr}: {r.herr}")
elif r.ierr < 0:
print(f"Warning {r.ierr}: {r.herr}")
else:
print(f"Success: {r.Output[0]}")
单位
REFPROP 使用的单位约定与 CoolProp 不同:
默认单位(使用 MOLAR BASE SI):
- 温度:K(开尔文)
- 压力:kPa(千帕)——注意:CoolProp 使用 Pa
- 密度:kg/m³
- 焓:J/kg
- 熵:J/kg/K
- 黏度:Pa·s
- 热导率:W/m/K
可用的单位制:
- SI 摩尔单位制
- SI 质量单位制(上方所示的默认单位制)
- 英制单位
- 自定义单位
最佳实践
- 导入 ctREFPROP 前务必设置 RPPREFIX
- 每次调用后检查 ierr 是否报错
- 使用准确的流体名称(区分大小写,名称来自 FLUIDS 目录)
- 预先计算混合物的组分(总和必须为 1.0)
- 缓存 RP 实例——不要反复重新初始化
- 针对各相区使用合适的输入参数对
- 最初将结果与已知值进行验证
- 阅读错误消息——REFPROP 会提供详细的诊断信息
参考资料
官方资源
-
NIST REFPROP 网站
- URL: https://www.nist.gov/srd/refprop
- 购买和下载
-
REFPROP 文档
- 随安装程序提供
- 安装目录中的
REFPROP.pdf
-
ctREFPROP 文档
重要出版物
- Lemmon, E.W., Bell, I.H., Huber, M.L., McLinden, M.O.(2018)。《NIST Standard Reference Database 23: Reference Fluid Thermodynamic and Transport Properties-REFPROP, Version 10.0》,美国国家标准与技术研究院。
支持
- NIST 支持:[email protected]
- 问题跟踪器:https://github.com/usnistgov/REFPROP-issues
- 论坛:https://groups.google.com/g/refprop
快速参考
# Initialize
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])
MOLAR_BASE_SI = RP.GETENUMdll(0, "MOLAR BASE SI").iEnum
# Pure fluid
r = RP.REFPROPdll("WATER", "TP", "D;H;S", MOLAR_BASE_SI, 0, 0, 300.0, 101.325, [1.0])
# Mixture
r = RP.REFPROPdll("METHANE;ETHANE", "TP", "D;H;S", MOLAR_BASE_SI, 0, 0, 200.0, 5000.0, [0.9, 0.1])
# Check for errors
if r.ierr != 0:
print(f"Error/Warning: {r.herr}")
NIST REFPROP 是热物性领域的黄金标准。虽然需要商业许可证,但对于要求最高精度、混合物计算或可用于发表的结果的应用而言,这笔投入是值得的。有关开源替代方案,请参阅 coolprop-db 技能。