吾生有涯 学海无涯
析模有界 知识无界

物性计算工具

内容纲要
昨天简单介绍了物性计算代码库CoolProp,后台留言较多,这里一并解释一番。

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之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《物性计算工具》
文章链接:https://www.topcfd.cn/13103/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册