CoolProp是一个开源的C++库,其代码网址https://github.com/CoolProp/CoolProp,熟悉C++语言的道友可以打开源文件挨个批阅并修改。当然不懂C++也没多大关系,CoolProp适配了很多常用的编程语言,我们可以利用任何一种自己熟悉的适配语言调用CoolProp。官方明确提出的适配语言包括:
-
全功能封装:Python (2.x, 3.x) ,C++, Modelica, Octave, C#, VB.net, MathCAD, Java, Android, MATLAB
-
高层接口:Labview, EES, Microsoft Excel, LibreOffice, Javascript, PHP, FORTRAN, Maple, Mathematica, Scilab, Delphi & Lazarus, Julia
昨天说准备将这个集成到小程序CFD工具箱中,然而忙碌了半天发现事情暂时不可为,原因还是处在小程序对文件大小的限制上。CoolProp是作了javascript适配的,然而需要附加一个个头比较大的wasm文件,该文件4.2MB,完全没办法放到小程序中。
当然也不是没有解决办法,最直接的解决办法是买一个云服务器,将应用程序部署到服务器上,然后小程序通过访问服务器获取结果数据并显示出来。原理很简单,过程却很繁琐,只能等以后再说了。
不过做一个本地的计算器还是很简单的,利用前面介绍的PySimpleGUI只需要极少量的代码即可实现。我懒得再去打磨了,干脆把代码放在这里,有兴趣的道友自己去改造吧。
import CoolProp.CoolProp as CP
import PySimpleGUI as sg
sg.theme('Dark2')
res = []
materials = CP.FluidsList()
layout = [[sg.Text('选择材料:', size=(8, 1)), sg.Combo(materials, default_value="Air",size=(43,1))],
[sg.Text('压力:', size=(8, 1)), sg.InputText(default_text='101325'), sg.Text('Pa')],
[sg.Text('温度:', size=(8, 1)), sg.InputText(default_text='300'), sg.Text('K')],
[sg.Button('计算',size=(8,1))],
[sg.Text('计算结果为:')],
[sg.Listbox(res,size=(54,12),key='_RESULT_')]
]
window = sg.Window('物性计算器').Layout(layout)
paras = [{'para':'D','txt':'密度','unit':'kg/m3'},
{'para':'V','txt':'粘度','unit':'pa.s'},
{'para':'L','txt':'热导率','unit':'W/m/K'},
{'para':'A','txt':'声速','unit':'m/s'},
{'para':'ISOBARIC_EXPANSION_COEFFICIENT','txt':'热膨胀系数','unit':'1/K'},
{'para':'C','txt':'比热Cp','unit':'J/kg/K'},
{'para':'M','txt':'摩尔质量','unit':'kg/mol'},
{'para':'PRANDTL','txt':'Prandtl数','unit':''},
{'para':'PCRIT','txt':'临界压力','unit':'Pa'},
{'para':'TCRIT','txt':'临界温度','unit':'K'},
{'para':'Z','txt':'压缩系数','unit':''},
]
count = len(paras)
while True:
button, values = window.Read()
if button is None or button == '退出':
break
else:
matName = values[0]
pressure = eval(values[1])
temperature = eval(values[2])
res.clear()
for str in paras:
try:
result = CP.PropsSI(str['para'],'T',temperature,'P',pressure,matName)
res.append('%s:%5.5f %s' % (str['txt'],result,str['unit']))
except:
res.append('%s:- %s' % (str['txt'], str['unit']))
window.find_element('_RESULT_').Update(res)
window.Close()
源代码及打包后的可执行文件可在这里下载:
https://pan.baidu.com/s/14oAAE5VtDuSaU4AM4JVD6Q
提取码:0nrx
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册