<-- Home |--javascript

002 Coolprop小试牛刀:流体属性查询示例

Coolprop工具箱

这是一个物质属性的热力学工具箱。 本身提供了很多种高级语言的绑定,当然,JavaScript也是提供的。

这里实现了一个简单的单纯流体的一般参数查询。还没有准备更加复杂的东西。总的来说,这只是一个用官方的JavaScript绑定代码改造的Smoke Test。

HTML源程序

这个就非常简单,几个选择框,两个输入框,一个计算按钮。

 1<link rel="stylesheet" href="https://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css"/>
 2<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
 3<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
 4<script src="https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
 5<script src="/javascript/coolprop.js"></script>
 6<script src="/javascript/coolprop-first.js"></script>
 7
 8<div class="ui-widget">
 9    <label for="FluidName">FluidName:</label>
10    <select id="FluidName"></select>
11    <button id="cp" type="button">CoolProp.org</button>
12    <button id="search" type="button">Search Bing</button>
13</div>
14<div class="ui-widget">
15    <label>Input #1:
16        <select id="Name1">
17            <option value="">Select one...</option>
18            <option value="Pressure">Pressure [Pa]</option>
19            <option value="Temperature">Temperature [K]</option>
20            <option value="Density">Density [kg/m&#179;]</option>
21        </select>
22        <input id='Value1'/></label>
23</div>
24<div class="ui-widget">
25    <label>Input #2:
26        <select id="Name2">
27            <option value="">Select one...</option>
28            <option value="Pressure">Pressure [Pa]</option>
29            <option value="Temperature">Temperature [K]</option>
30            <option value="Density">Density [kg/m&#179;]</option>
31        </select>
32        <input id='Value2'/></label>
33</div>
34
35<button id="calc" type="button">Calculate</button>
36
37<div class="ui-widget">
38    <label>Output:</label>
39</div>
40<div class="ui-widget">
41    <p id="output">
42</div>

JavaScript文件

计算的部分也很简单,唯一个就是CoolProp的JavaScript绑定通过WASM实现,载入需要时间。 所以,这里在document.ready事件里面还设置了一个setTimeout,1s之后在设置默认值,载入流体列表。 手快的小朋友也必须等等。

 1
 2function text2key(text) {
 3    if (text == 'Pressure [Pa]')
 4        return 'P';
 5    else if (text == 'Temperature [K]')
 6        return 'T';
 7    else if (text == 'Density [kg/m&#179;]')
 8        return 'D';
 9}
10
11function flush_fluid_list() {
12
13    if (Module.get_global_param_string) {
14
15        let fl = Module.get_global_param_string("FluidsList").split(",");
16
17        for (let i = 0; i < fl.length; i++) {
18            let name = fl[i];
19            $('#FluidName').append(`<option value="${name}">${name}</option>`);
20        }
21
22        return true;
23    }
24    console.log("Setup to try again 1000 ms later.")
25    setTimeout(flush_fluid_list, 1000);
26    return false;
27}
28
29
30$(function () {
31    $('#search').click(function () {
32        var name = $('#FluidName :selected').text();
33        let url = `https://cn.bing.com/search?q=${name}%2Bfluid%20properties`;
34        // open a new window
35        open(url);
36    })
37
38    $('#cp').click(function () {
39        var name = $('#FluidName :selected').text();
40        let url = `http://www.coolprop.org/fluid_properties/fluids/${name}.html`;
41        // open a new window
42        open(url);
43    })
44    // click calculation
45    //using jQuery
46    $('#calc').click(function () {
47        console.log("clicked calc");
48        var name = $('#FluidName :selected').text()
49        var key1 = text2key($('#Name1 :selected').text())
50        var key2 = text2key($('#Name2 :selected').text())
51        var val1 = parseFloat($('#Value1').val())
52        var val2 = parseFloat($('#Value2').val())
53
54        var T = Module.PropsSI('T', key1, val1, key2, val2, name)
55        var rho = Module.PropsSI('D', key1, val1, key2, val2, name)
56        var p = Module.PropsSI('P', key1, val1, key2, val2, name)
57        var s = Module.PropsSI('S', key1, val1, key2, val2, name)
58        var h = Module.PropsSI('H', key1, val1, key2, val2, name)
59        var cp = Module.PropsSI('C', key1, val1, key2, val2, name)
60
61        text = ''
62        text += 'T = ' + T + ' K\n' + '<br>'
63        text += 'rho = ' + rho + ' kg/m&#179; <br>'
64        text += 'p = ' + p + ' Pa<br>'
65        text += 's = ' + s + ' J/kg/K<br>'
66        text += 'h = ' + h + ' J/kg<br>'
67        text += 'cp = ' + cp + ' J/kg/K<br>'
68
69        $("#output").html(text);
70
71    });
72
73
74    setTimeout(function () {
75        let ret = flush_fluid_list();
76        if (!ret) {
77            console.log("Fail to load fluid list.");
78        }
79        // default values
80        $('#FluidName').get(0).selectedIndex = 0;
81        $('#Name1').get(0).selectedIndex = 1;
82        $('#Name2').get(0).selectedIndex = 2;
83        $('#Value1').val(1e6);
84        $('#Value2').val(300);
85    }, 1000);
86});

文章标签

|-->javascript |-->CoolProp |-->example


GitHub