Skip to main content

化学工程设计库 (ChEDL) 的化学性质组件

项目描述

版本状态 文档 执照 覆盖范围 支持的版本 在 https://gitter.im/CalebBell/thermo 加入聊天 禅道 <nav class="contents" id="contents" role="doc-toc">

内容

</nav>

什么是Thermo?

Thermo 是面向工程师、科学家、技术人员和任何试图更详细地了解宇宙的人的开源软件。它有助于检索化学物质的常数,计算温度和压力相关的化学性质(热力学和传输),以及使用各种模型计算化学混合物(包括相平衡)。

Thermo 可在所有支持 Python 的操作系统上运行,安装快速且免费。Thermo 设计为易于使用,同时仍提供强大的功能。如果您需要了解有关化学品或混合物的信息,请尝试 Thermo。

安装

从https://pypi.python.org/pypi/thermo/获取最新版本的 Thermo

如果您使用 pip 安装了 Python,只需使用以下命令进行简单安装:

$ pip安装热

或者,如果您使用conda作为包管理,您可以简单地从conda-forge通道在您的环境中安装 Thermo:

$ conda install -c conda-forge thermo

要获取 git 版本,请运行:

$ git clone git://github.com/CalebBell/thermo.git

文档

Thermo 的文档可在 Web 上找到:

http://thermo.readthedocs.io/

入门 - 严谨的界面

使用 Peng-Robinson 状态方程为化合物“癸烷”创建一个纯成分闪光对象。在 300 K 和 1 bar 下执行闪光计算,并从结果对象中获得各种属性:

>>> from thermo import ChemicalConstantsPackage, PRMIX, CEOSLiquid, CEOSGas, FlashPureVLS
>>> # Load the constant properties and correlation properties
>>> constants, correlations = ChemicalConstantsPackage.from_IDs(['decane'])
>>> # Configure the liquid and gas phase objects
>>> eos_kwargs = dict(Tcs=constants.Tcs, Pcs=constants.Pcs, omegas=constants.omegas)
>>> liquid = CEOSLiquid(PRMIX, HeatCapacityGases=correlations.HeatCapacityGases, eos_kwargs=eos_kwargs)
>>> gas = CEOSGas(PRMIX, HeatCapacityGases=correlations.HeatCapacityGases, eos_kwargs=eos_kwargs)
>>> # Create a flash object with possible phases of 1 gas and 1 liquid
>>> flasher = FlashPureVLS(constants, correlations, gas=gas, liquids=[liquid], solids=[])
>>> # Flash at 300 K and 1 bar
>>> res = flasher.flash(T=300, P=1e5)
>>> # molar enthalpy and entropy [J/mol and J/(mol*K) respectively] and the mass enthalpy and entropy [J/kg and J/(kg*K)]
>>> res.H(), res.S(), res.H_mass(), res.S_mass()
(-48458.137745529726, -112.67831317511894, -340578.897757812, -791.9383098029132)
>>> # molar Cp and Cv [J/(mol*K)] and the mass Cp and Cv [J/(kg*K)]
>>> res.Cp(), res.Cv(), res.Cp_mass(), res.Cv_mass()
(295.17313861592686, 269.62465319082014, 2074.568831461133, 1895.0061117553582)
>>> # Molar volume [m^3/mol], molar density [mol/m^3] and mass density [kg/m^3]
>>> res.V(), res.rho(), res.rho_mass()
(0.00020989856076374984, 4764.206082982839, 677.8592453530177)
>>> # isobatic expansion coefficient [1/K], isothermal compressibility [1/Pa], Joule Thomson coefficient [K/Pa]
>>> res.isobaric_expansion(), res.kappa(), res.Joule_Thomson()
(0.0006977350520992281, 1.1999043797490713e-09, -5.622547043844744e-07)
>>> # Speed of sound in molar [m*kg^0.5/(s*mol^0.5)] and mass [m/s] units
>>> res.speed_of_sound(), res.speed_of_sound_mass()
(437.61281158744987, 1160.1537167375043)

以下示例显示了使用几个示例 kijs 检索具有甲烷、乙烷和氮气的两相系统的化学性质:

>>> from thermo import ChemicalConstantsPackage, CEOSGas, CEOSLiquid, PRMIX, FlashVL
>>> from thermo.interaction_parameters import IPDB
>>> constants, properties = ChemicalConstantsPackage.from_IDs(['methane', 'ethane', 'nitrogen'])
>>> kijs = IPDB.get_ip_asymmetric_matrix('ChemSep PR', constants.CASs, 'kij')
>>> kijs
[[0.0, -0.0059, 0.0289], [-0.0059, 0.0, 0.0533], [0.0289, 0.0533, 0.0]]
>>> eos_kwargs = {'Pcs': constants.Pcs, 'Tcs': constants.Tcs, 'omegas': constants.omegas, 'kijs': kijs}
>>> gas = CEOSGas(PRMIX, eos_kwargs=eos_kwargs, HeatCapacityGases=properties.HeatCapacityGases)
>>> liquid = CEOSLiquid(PRMIX, eos_kwargs=eos_kwargs, HeatCapacityGases=properties.HeatCapacityGases)
>>> flasher = FlashVL(constants, properties, liquid=liquid, gas=gas)
>>> zs = [0.965, 0.018, 0.017]
>>> PT = flasher.flash(T=110.0, P=1e5, zs=zs)
>>> PT.VF, PT.gas.zs, PT.liquid0.zs
(0.10365, [0.881788, 2.6758e-05, 0.11818], [0.97462, 0.02007, 0.005298])
>>> flasher.flash(P=1e5, VF=1, zs=zs).T
133.6
>>> flasher.flash(T=133, VF=0, zs=zs).P
518367.4
>>> flasher.flash(P=PT.P, H=PT.H(), zs=zs).T
110.0
>>> flasher.flash(P=PT.P, S=PT.S(), zs=zs).T
110.0
>>> flasher.flash(T=PT.T, H=PT.H(), zs=zs).T
110.0
>>> flasher.flash(T=PT.T, S=PT.S(), zs=zs).T
110.0

还有一个可用的 N 相闪存算法,FlashVLN。目前此界面中没有实现实体模型。

入门 - 简单的界面

该库是围绕基本 SI 单位设计的,只是为了方便开发。除非另有说明,否则所有化学品在创建时默认为 298.15 K 和 101325 Pa。所有常量属性都是在创建 Chemical 实例时加载的。

>>> from thermo.chemical import Chemical
>>> tol = Chemical('toluene')
>>> tol.Tm, tol.Tb, tol.Tc
(179.2, 383.75, 591.75)
>>> tol.rho, tol.Cp, tol.k, tol.mu
(862.238, 1706.07, 0.13034, 0.0005522)

对于纯物质,相很容易识别,无需指定相即可获得特性。然而,这些性质也可用于假设的气相(当低于沸点时)和假设的液相(当高于沸点时),因为需要这些性质来评估混合物性质。通过将“l”或“g”或“s”附加到属性来指定要检索的属性的阶段。

>>> from thermo.chemical import Chemical
>>> tol = Chemical('toluene')
>>> tol.rhog, tol.Cpg, tol.kg, tol.mug
(4.0320096, 1126.553, 0.010736, 6.97332e-06)

创建化学对象涉及通过数据库按名称识别适当的化学物质,并从 Pandas DataFrames 中检索所有常数和温度和压力相关系数 - 大约 1 毫秒的过程。为了快速获取不同条件下的属性,实现了方法calculate。

>>> tol.calculate(T=310, P=101325)
>>> tol.rho, tol.Cp, tol.k, tol.mu
(851.1582219886011, 1743.280497511088, 0.12705495902514785, 0.00048161578053599225)
>>> tol.calculate(310, 2E6)
>>> tol.rho, tol.Cp, tol.k, tol.mu
(852.7643604407997, 1743.280497511088, 0.12773606382684732, 0.0004894942399156052)

每个属性都是通过一个独立的面向对象的方法实现的,基于类 TDependentProperty 和 TPDependentProperty,以允许共享的绘图、积分、微分、求解、插值、完整性检查和错误处理方法。例如,求解甲苯蒸气压为 2 bar 时的温度。对于每个属性,包括尽可能多的计算或估计方法。所有方法都可以独立可视化:

>>> Chemical('toluene').VaporPressure.solve_property(2E5)
409.5909115602903
>>> Chemical('toluene').SurfaceTension.plot_T_dependent_property()

支持混合,并实施了许多混合规则。但是,没有错误处理。支持摩尔分数 ( zs )、质量分数 ( ws ) 或体积分数(VflsVfgs)形式的输入。预定义的混合支持一些快捷方式。

>>> from thermo.chemical import Mixture
>>> vodka = Mixture(['water', 'ethanol'], Vfls=[.6, .4], T=300, P=1E5)
>>> vodka.Prl,vodka.Prg
(35.13075699606542, 0.9822705235442692)
>>> air = Mixture('air', T=400, P=1e5)
>>> air.Cp
1013.7956176577836

警告:化学和混合物的相平衡目前不像其他界面那样严格。属性模型不是特别一致,并用了多种理想和彭-罗宾逊方法。

最新源代码

最新开发版本的 Thermo 源代码可在以下网址获得

https://github.com/CalebBell/thermo

错误报告

要报告错误,请使用 Thermo 的错误跟踪器,网址为:

https://github.com/CalebBell/thermo/issues

许可证信息

有关使用此软件的条款和条件的信息,请参阅LICENSE.txt,以及所有保证的免责声明。

尽管 Thermo 许可证没有要求,但如果您方便,请在您的工作中使用 Thermo。还请考虑贡献您所做的任何更改,并造福社区。

引文

要在出版物中引用 Thermo,请使用:

Caleb Bell and Contributors (2016-2021). Thermo: Chemical properties component of Chemical Engineering Design Library (ChEDL)
https://github.com/CalebBell/thermo.

项目详情