理化计算程序必备:CoolProp+UnitsNet

物理化学计算

   这类计算往往涉及到单位及单位换算,并且要用到物性参数。

  例如:0℃=273.15K  

             质量流量 kg/h = 体积流量 m3/h * 密度 kg/m3

             密度就是物性参数,随压力、温度变化。

常规做法

   只有 Frink 、F#、Modelica 少数语言变量是自带单位的,大部分语言变量仅包含数值,单位转换需要在变量进行公式计算之前(预处理)完成,计算后再把结果单位转换为输出单位,单位转换主要通过若干常数实现。

    这带来了两个问题:1. 大量常数降低代码可读性和维护性;2.计算精度难以保障。

UnitsNet

    UnitsNet 用具有单位的变量替代double,支持单位的自动转换,并(部分)支持不同单位的乘除计算。

    按照上述写法重写公式计算代码,可以避免直接的单位转换,使程序的调用者可以使用任意单位作为输入。

    UnitsNet 只支持部分单位的乘除计算,不支持的编译时会提示异常,EngineeringUnits放宽了该限制,计算结果均为UnknownUnit,可以将其转换为具体单位,转换错误会在运行时抛出。

物性数据库

    物性是物质的物理属性,典型的物性参数有密度、比热、粘度等,物性参数大部分是通过实验获得的,NIST美国标准院的 REFPROP 是权威的商用数据库软件。CodeProp 是开源C++免费版,有122种物质的物性数据,提供查询API。SharpFluids是CodeProp的C#封装,使用了EngineeringUnits。

    对于蒸汽,可以用IF97国际标准计算物性参数,我提交过一个C#版本的IF97计算库。

应用实例

    算例中,Mu 单位:Pa.s=kg/(m.s)      

      steamcond 单位:W/(m.K)

                   Cp 单位:J/(kg.K)

                   Pr= Mu * Cp / steamcond; 单位消减后刚好无量纲。

性能问题

    EngineeringUnits 目前看性能存在瓶颈,不适合用作热点代码(如频繁调用的后台模块)中。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月7日
下一篇 2021年9月7日

相关推荐