在课堂学习中,利用Thom模型计算流体压降的系数查图会受到种种因素而导致各种令人啼笑皆非的尴尬情况,为此,我们尝试尽可能理解原作者提出的模型原理,尽可能的利用公式法,通过MATLAB R2020b,实现键入流体压力p与管道内质量干度系数χm,计算得出基于J.R.S.Thom的水强制循环沸腾压降预测模型的 r2加速压降倍乘系数,r3摩擦压降倍乘系数与r4重力压降倍乘系数,减少因人工查阅图表所带来的的误差,方便进行计算。
J.R.S.Thom在其论文10.1016/0017-9310(64)90002-X中给出了一个简化方案,用于计算沸水和蒸汽两相混合物循环过程中的压降的简化方案。只要通过热平衡计算算出管流出口处的流体“质量”,就可以从中估计出摩擦、加速和重力损失。
分析涵盖了15-3000 psia的压力范围和3%-100%的出口蒸汽干度χm。该方法遵循Martinelli和Nelson对水平管的分析,但已经扩展到包括更重要的垂直蒸发管的情况,
即该程序适用于0.103422Mpa-20.6844Mpa压力,3%-100%质量干度系数的环境下 。
即质量干度分数大于3%的情况下。由实验认识到,质量干度和空隙率之间存在经验关系方程
这是一个折中的方法,它意味着在任何
给定的操作压力下滑移速度比是恒定的。
当整根管子的压降与绝对压力相比很小时,沸腾的混合物沿水平管流动所产生的压降由两部分组成:
(a) 混合物流经管子并汽化时因动量增加而产生的压降——加速压降。
(b) 在两相流动过程中,由于摩擦力的作用而产生的压降——摩擦压降。
在垂直管的情况下,第三部分(c)变得很重要,即由于沸腾的混合物在管内上升时重力势能的增加而产生的压降。
在实验工作中,不可能直接测量总压降的各个部分。因此,我们建立了一个理论,据此可以评估总压降中仅由加速引起的那部分。然后,这一理论被扩展到给出垂直蒸发管中的重力压降。这两部分的总和被从观察到的总压降中扣除,其余部分被认为是由摩擦引起的摩擦压降。
在250 psia以上的压力范围内,推导出的两相摩擦压降和均匀流理论预测的压降之间的差异很小,但由于惯性,特别是垂直管中的浮力效应,总压降的组成部分受到蒸汽相对于水的滑移的影响。这种影响是明显的,即使在高压下,空隙率和体积流量比之间的差异也是如此。
这样,该方法导出了一种相对简单的计算沸腾两相流压降的方法,除了在非常低的蒸汽质量情况下。
三、符号
这样,该方法导出了一种相对简单的计算沸腾两相流压降的方法,除了在非常低的蒸汽质量情况下。
各个方程中使用的符号是在文本中引入时定义的。然而,为了便于参考,它们被集中在以下列表中。其中:
下标f、g和fg表示管道中流体的一种状态,或状态的变化。因此,f表示水相,g表示蒸汽相,fg表示从水到蒸汽的变化。
下标H和S指的是计算方法。H表示该量是由均质流理论推导出来的,而s表示使用了理论中的滑移。
使用的单位是英尺ft、磅lb质量和秒s。压力的单位是psia,压力差的单位是磅力/平方英尺(pounds force/ft2)。
表1 符号表
符号 | 名称 | 单位 |
A | 试验段的横截面积 | ft² |
Ag | 汽相占据的截面部分 | ft² |
D | 测试管的孔直径 | ft |
D’ | 测试管的孔直径 | in |
f | 单相流的范宁摩擦系数 | - |
G | 质量流量密度 | lb/ft²·s |
G’ | 质量流量密度 | lb/ft²·h |
g | 当地重力加速度 | ft/s² |
gc | 无量纲转换系数磅力,(lbf)到磅达(pdl)=32.2,1lbf=4.4482216152605N | - |
hf | 饱和温度下的水焓 | Btu/lb |
hi | 在进口温度下的水的焓值 | Btu/lb |
hfg | 焓值随状态变化的变化 | Btu/lb |
K | 无量纲流量参数 | - |
l | 测试管长度 | ft |
li | 试验管的预热长度 | ft |
m | 总质量流量 | lb/s |
mf | 液相质量流量 | lb/s |
mg | 汽相质量流量 | lb/s |
p | 流体压强 | psia |
Q | 沿着管子总长度向流体增加的热量 | Btu/lb |
R | 入口与出口之间的膨胀率 | - |
r1 | 均质流加速压降的倍乘系数 | ft³/lb |
r2 | 两相流加速压降的倍乘系数 | - |
r3 | 两相流摩擦压降的倍乘系数 | - |
r4 | 两相流重力压降的倍乘系数 | - |
Ti | 入口处水温 | ℉ |
V | 流体的平均流速 | ft/s |
Vf与Vg | 水相与汽相的平均流速 | ft/s |
υ | 平均比体积 | ft³/lb |
υi | 管道入口处水的比体积 | ft³/lb |
υf与υg | 饱和水和蒸汽的比体积 | ft³/lb |
υfg | 相变所致的比体积变化 | ft³/lb |
χα | 混合物的面积干度或空隙率(气相所占的截面比例) | - |
χm | 混合物的 "质量 "干度分数 | - |
χv | 混合物的 "体积 "流量比 | - |
Δp | 沿管的压降 | lb/ft² |
Δpacl | 加速压降 | lb/ft² |
Δpf | 所有水的摩擦压降 依据 | lb/ft² |
ΔpTPF | 两相流中的摩擦压降 | lb/ft² |
Δpgrav | 垂直向上的重力压降 | lb/ft² |
α | 比体积比(υg/υf) | - |
γ | 无量纲滑移系数(见正文) | - |
ρ | 混合物的密度 | lb/ft³ |
4.1质量干度系数χm分析METHODS OF ASSESSING QUALITY
由于希望了解通过出口的两相混合物的质量QUALITY,因此必须了解其表达的各种方式。
术语 "质量 "干度分数被普遍使用,其定义为
(1)
其中mg和mf分别为出口处的蒸汽和水的质量。通常情况下,χm的值是通过热平衡计算出来的。
另一种方法是按体积而不是按质量进行比较。在这种情况下,"体积 "流量比的定义为
(2)
理想情况下,这两个定义只适用于蒸汽和水相以相同速度流动的均匀混合物(滑速比S=1)。然而,“滑移”的效果是使蒸汽相比均匀的平均流速快一点,并且在管子的横截面上占据较小的部分。相反地,水相的速度比均匀的平均值慢一点,并且占据了比预期更大的横截面部分。这种状态是通过伽马射线来探测到的,伽马射线被安排在出口处扫描管子的横截面,从这些观察中第三个定义被推导出,称为 “空隙率”,其定义为
(3)
其中A是试验管的横截面面积,Ag是被蒸汽相占据的横截面部分。
方程(2)可以写成
(4)
其中,比体积比α=υg/υf (见图1)
图 1体积和面积干度分数之间的关系,两相流在1英寸直径的水平管道中
现在建议将该类型的曲线拟合到新的数据中,
(5)
在任何给定的压力下,滑移系数γ是一个常数。这个武断建议的好处是,它提供了χα和χm之间的简单关系,在边界条件不连续的情况下,χm可以外推。表1中给出的数值和图3的曲线是从一个1英寸口径的水平管的实验数据中得到的。从这些数据中可以发现在任何其他α值和相应压力下的γ值。
表2 α与γ的值(英制psia)
14.7 | 250 | 600 | 1250 | 2100 | 3000 | 3206 | |
α | 1600 | 99.1 | 38.3 | 15.33 | 6.65 | 2.48 | 1.00 |
γ | 246 | 40.0 | 20.0 | 9.80 | 4.95 | 2.15 | 1.00 |
![]() | 6.45 | 2.48 | 1.92 | 1.57 | 1.35 | 1.15 | 1.00 |
表2 α与γ的值(公制kpa)(实验中使用)
101.35356 | 1723.7 | 4136.88 | 8618.5 | 14479.08 | 20684.4 | 22104.7288 | |
α | 1600 | 99.1 | 38.3 | 15.33 | 6.65 | 2.48 | 1.00 |
γ | 246 | 40.0 | 20.0 | 9.80 | 4.95 | 2.15 | 1.00 |
![]() | 6.45 | 2.48 | 1.92 | 1.57 | 1.35 | 1.15 | 1.00 |
该结论经他人重复试验可以认定为是有参考意义的,可以进行实际使用。
4.2滑速比SLIP VELOCITY RATIO
当两相流体在管道中流动时,两相之间存在相对速度或滑移速度。即使是在水平的管道中,在所有的工作压力下都会出现这种情况,但在较低的压力下影响更大,在较高的压力下影响更小。在250-3000 psia的压力范围内,管道出口处的蒸汽和水相之间的滑速比S=Vg/Vf,从250psia的2.55下降到3000psia的1.15。
在每个选定的压力下,滑移率可以被视为几乎恒定,并且与χm,混合物的 "质量 "干度分数无关。
而就混合物的 "质量 "干度分数而言,它可以表示滑速比Vg/Vf和两相间的相对速度(Vg-Vf)
(8)和 (9)
并将在方程(5)中的χα代入可以得到
(10)和 (11)
以至于
和 (12)
4.3混合物流经管子并汽化时因动量增加而产生的压降——加速压降PRESSURE DROP DUE TO CHANGE OF MOMENTUM OF THE PHASES
加速压降倍乘系数r2计算原理
假设出口条件下的水的比体积与进口条件下的相同。此外,根据回路中该点的压力,假设入口处的水正好处于其饱和温度。
出口处的条件可能存在两个极端的情况,实际情况可能在这两个极端之间。
(a) 蒸汽和水完全混合。
(b) 蒸汽和水完全分离。
(13)
其中Vg和Vf是出口处的蒸汽和水的速度,Vin是入口处的水的速度。
在前一种情况下,通常被称为均匀的情况,Vg =Vf=Vout,方程(13)可以表示为
(14)
而且,由于平均出口比体积是由以下公式给出的
这样就可以简化为
(15)
在后一种情况下,当相间发生滑移时,在出口处,蒸汽的速度Vg与水的速度Vf不同,这些量必须从方程(13)中消除掉。现在
因此
(16)
对比方程(16)和(14),可以得出
(17)
这种发生滑移的两相流体的比体积表达式被命名为 "有效 "比体积,如果χα与χm的关系为方程(5),我们可以得到
(18)
如此,有效密度即为
这可以与通过伽马射线测量直接确定的 "表观 "密度进行比较。
(19)
因此,通过公式(5)将χα与χm联系起来
(20)
图2将ρα和ρeff与理想的均质密度进行了比较,定义为
(21)
回到方程(16),χα可以用方程(5)中的χm来消除,所以
(22)
对于一般用途来说,方程(22)过于复杂,我们简化并定义了加速压降倍乘系数r2。
(23)
图 2两相混合物的密度估算方法的比较 图 3两相沸腾时的加速数r2
表3 加速压降倍乘系数r2
出口质量干度系数χm | 压力(kpa) | ||||
1723.7 | 4136.88 | 8618.5 | 14479.08 | 20684.4 | |
0.01 | 0.4125 | 0.2007 | 0.0955 | 0.0431 | 0.0132 |
0.015 | 0.6201 | 0.3034 | 0.1441 | 0.0649 | 0.0195 |
0.02 | 0.8325 | 0.4055 | 0.1930 | 0.0865 | 0.0261 |
0.03 | 1.268 | 0.6132 | 0.2903 | 0.1297 | 0.0392 |
0.04 | 1.710 | 0.8242 | 0.3886 | 0.1739 | 0.0562 |
0.05 | 2.169 | 1.040 | 0.4892 | 0.2182 | 0.0657 |
0.06 | 2.635 | 1.258 | 0.5893 | 0.2582 | 0.0787 |
0.07 | 3.116 | 1.479 | 0.6903 | 0.3076 | 0.0924 |
0.08 | 3.605 | 1.704 | 0.7940 | 0.3521 | 0.1055 |
0.09 | 4.110 | 1.934 | 0.8969 | 0.3975 | 0.1188 |
0.10 | 4.620 | 2.165 | 1.001 | 0.4431 | 0.1319 |
0.15 | 7.365 | 3.379 | 1.538 | 0.6751 | 0.1996 |
0.2 | 10.39 | 4.678 | 2.100 | 0.9139 | 0.2676 |
0.3 | 17.3 | 7.539 | 3.292 | 1.412 | 0.4067 |
0.4 | 25.37 | 10.75 | 4.584 | 1.937 | 0.5495 |
0.5 | 34.58 | 14.30 | 5.968 | 2.490 | 0.6957 |
0.6 | 44.93 | 18.21 | 7.448 | 3.0700 | 0.8455 |
0.7 | 56.44 | 22.46 | 9.030 | 3.678 | 0.9988 |
0.8 | 69.09 | 27.06 | 10.79 | 4.312 | 1.156 |
0.9 | 82.90 | 32.01 | 12.48 | 5.067 | 1.316 |
1.0 | 98.10 | 37.30 | 14.34 | 5.664 | 1.480 |
分析方程(23)可以得到
在实际使用中,我们输入压力p与质量干度系数χm,根据《反应堆热工水力学(第三版)》附录C冷却剂的热物性表,我们可以得到饱和水与饱和水蒸气在一定压力值p下的两相比体积。对于一些压力条件下未直接给出的比体积数值,我们通过线性插值法获得。
因此α,比体积比(υg/υf)得以算出,
对于所定义的γ,因其实际为通过实验法得到,我们通过对表1(公制)内所体现出的γ-p的关系,利用插值法得到在一定压力p下的γ值
至此方程(23)内所包含的未知项已全部获得,代入计算即得到了加速压降倍乘系数r2。
(经对比与表格及关系图相符)
如图4 为程序输出重新拟合的曲线组
图 4利用程序输出的设定质量干度系数下的多组加速压降倍乘系数与压力之间的关系曲线
4.4在两相流动过程中,由于摩擦力的作用而产生的压降——摩擦压降PRESSURE DROP DUE TO BOILING TWO-PHASE FRICTION
摩擦压降倍乘系数r3计算原理
由于沸腾两相摩擦造成的水平管中的压降不能直接测量。它是从观察到的水平管的总压降中扣除由公式(16)估计的加速压降而推导出来的。然后在找到两相摩擦压降后,试图推导出两相摩擦系数的平均值。
因此
(24)
或简化
(25)
除了使用不允许的平均出口均质比容外,还存在另外两种可能性。
(a) 从出口处的空隙率测量得出的表观比体积。
(b) 由公式(18)定义的有效比体积。
两种方法都进行了尝试,发现Iatter方法将各种试验联系起来,其中包括流速、加热率、受热长度和工作压力等变量。因此,两相摩擦系数被定义为
(26)
或简化
(27)
图5显示了600 psia时的结果,看来两相摩擦系数近似于χm的可变函数。由于r2也是χm和压力的一个函数,方程(27)被修改为
(28)
表4给出了合适的值,并在图6中显示,
表4 摩擦压降倍乘系数r2
出口质量干度系数χm | 压力(kpa) | ||||
1723.7 | 4136.88 | 8618.5 | 14479.08 | 20684.4 | |
0.00 | 1.00 | 1.00 | 1.00 | - | - |
0.01 | 1.49 | 1.11 | 1.03 | - | - |
0.015 | 1.76 | 1.25 | 1.05 | - | - |
0.02 | 2.05 | 1.38 | 1.08 | 1.02 | - |
0.03 | 2.63 | 1.62 | 1.15 | 1.05 | - |
0.04 | 3.19 | 1.86 | 1.23 | 1.07 | - |
0.05 | 3.71 | 2.09 | 1.31 | 1.10 | - |
0.06 | 4.21 | 2.30 | 1.40 | 1.12 | - |
0.07 | 4.72 | 2.50 | 1.48 | 1.14 | - |
0.08 | 5.25 | 2.70 | 1.56 | 1.16 | 1.04 |
0.09 | 5.78 | 2.90 | 1.64 | 1.19 | 1.05 |
0.10 | 6.30 | 3.11 | 1.71 | 1.21 | 1.06 |
0.15 | 9.00 | 4.11 | 2.10 | 1.33 | 1.09 |
0.2 | 11.4 | 5.08 | 2.47 | 1.46 | 1.12 |
0.3 | 16.2 | 7.00 | 3.20 | 1.72 | 1.18 |
0.4 | 21.0 | 8.80 | 3.89 | 2.01 | 1.26 |
0.5 | 25.9 | 10.6 | 4.55 | 2.32 | 1.33 |
0.6 | 30.5 | 12.4 | 5.25 | 2.62 | 1.41 |
0.7 | 35.2 | 14.2 | 6.00 | 2.93 | 1.50 |
0.8 | 40.1 | 16.0 | 6.75 | 3.23 | 1.58 |
0.9 | 45.0 | 17.8 | 7.50 | 3.53 | 1.66 |
1.0 | 49.93 | 19.65 | 8.165 | 3.832 | 1.740 |
图 5水和蒸汽两相在600psia下沸腾流动的两相摩擦系数。
在这里的摩擦压降倍乘系数r3由于是经验与实验推导得来,故而我们通过对表3的数据进行二次线性插值法,获取在一定p与一定质量干度系数χm下的摩擦压降倍乘系数r3。
所谓双线性插值,跟线性插值比,复杂一点,因为它是二维的,需要做两次插值。但是如果理解了线性插值再画个坐标,看起来就没有那么复杂了。如图有A,B,C,D四点坐标分别为
A:(x0,y0,z2 );B:(x1,y0,z0);C:(x0,y1,z3);D:(x1,y1,z1)
我们选择先从x方向做插值,
如图 7在AB之间插一点E,把y当作定值,这时候就是做转变成做一个线性插值了,Ze=Za+(Xe-Xa)*(Za-Zb)/(Xa-Xb)。
在CD之间插一点F,把y当作定值,这时候就是做转变成做一个线性插值了,Zf=Zc+(Xf-Xc)*(Zc-Zd)/(Xc-Xd)。
然后在EF之间在y方向做一次插值,即可以找到双线性插值G点的结果,Zg=Ze+(Yg-Ye)*(Ze-Zf)/(Ye-Yf)。
针对我们所给出的一对压力与质量干度系数,我们在表3中寻找出一对压力值上下范围,一对干度系数上下范围,组成一个2*2矩阵,即ABCD点,进而先在一个方向上进行插值得到一对,再进行另一个方向上进行插值,最终得到目标点的摩擦压降倍乘系数r3值。
图 6两相沸腾时的面摩擦压降倍乘乘数r3
图 7二次线性插值法示意图
图 8利用程序输出的设定质量干度系数下的多组加速压降倍乘系数与压力之间的关系曲线
4.5沸腾的混合物在管内上升时重力势能的增加而产生的压降——重力压降BOILING TWO-PHASE GRAVITATIONAL PRESSLJRJX DROP
重力压降倍乘系数r4计算原理
沸腾的两相混合物的重力压降由以下公式给出
(29)
如果假设沿管子长度方向均匀加热(均匀壁温加热),并且饱和水从入口进入,那么对于理想的均质流,方程(29)可以被积分,从而得到
(30)
两相流的问题很复杂。离开沸腾管出口的混合物的平均密度或质量干度分数可以通过热平衡进行评估。另外,两相混合物的表观密度也可以通过伽马装置来测量。
然后从方程(20)中得出
(31)
并且由于方程(29)可以写成
经过代入和积分,我们得到
(32)
或简化
(33)
表5中给出了r4的值,并在图10中显示了其与压力和出口蒸汽质量的关系。
显然同r2,r4可以写成
α,γ计算方法同r2
出口质量干度系数χm | 压力(kpa) | ||||
1723.7 | 4136.88 | 8618.5 | 14479.08 | 20684.4 | |
0.00 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 |
0.01 | 0.842 | 0.915 | 0.956 | 0.991 | 0.994 |
0.015 | 0.784 | 0.877 | 0.937 | 0.966 | 0.992 |
0.02 | 0.736 | 0.845 | 0.918 | 0.960 | 0.990 |
0.03 | 0.658 | 0.787 | 0.882 | 0.947 | 0.979 |
0.04 | 0.597 | 0.738 | 0.850 | 0.923 | 0.974 |
0.05 | 0.549 | 0.696 | 0.823 | 0.910 | 0.970 |
0.06 | 0.508 | 0.660 | 0.795 | 0.892 | 0.963 |
0.07 | 0.475 | 0.627 | 0.771 | 0.879 | 0.957 |
0.08 | 0.446 | 0.599 | 0.746 | 0.860 | 0.952 |
0.09 | 0.421 | 0.573 | 0.724 | 0.848 | 0.948 |
0.10 | 0.399 | 0.549 | 0.705 | 0.836 | 0.941 |
0.15 | 0.319 | 0.460 | 0.624 | 0.774 | 0.916 |
0.2 | 0.268 | 0.399 | 0.558 | 0.718 | 0.889 |
0.3 | 0.206 | 0.317 | 0.468 | 0.637 | 0.843 |
0.4 | 0.167 | 0.269 | 0.406 | 0.575 | 0.803 |
0.5 | 0.142 | 0.228 | 0.357 | 0.525 | 0.767 |
0.6 | 0.123 | 0.201 | 0.321 | 0.482 | 0.733 |
0.7 | 0.109 | 0.180 | 0.291 | 0.444 | 0.702 |
0.8 | 0.098 | 0.163 | 0.267 | 0.413 | 0.675 |
0.9 | 0.089 | 0.149 | 0.248 | 0.389 | 0.651 |
1.0 | 0.081 | 0.136 | 0.229 | 0.364 | 0.626 |
经利用程序输出的设定质量干度系数下的多组重力压降倍乘系数与压力之间的关系曲线对比与原文献的表格及关系图基本相符
图 9利用程序输出的设定质量干度系数下的多组重力压降倍乘系数与压力之间的关系曲线
图 6两相沸腾时的面摩擦压降倍乘乘数r4
五、编程环境
本着便于使用者进行快速计算的目的,在借助Matlab便捷的编程检验数学方法的正确性后,小组曾尝试学习了一周的JavaScript语言,以便于实现编写一个基于前端JS语言逻辑运算的微信小程序,但受限于时间的紧迫,只能暂时放弃,待自身知识水平增加再进行开发。
但伴随着Matlab的广泛使用与开发,我们发现,通过其内部的APP所开发的GUI功能在人机交互与编写上都比较便捷,缺陷是最终的程序受制于Matlab自身语言的性质比较臃肿,但在如今的时代还是可以接受的。并使用 C++语言编译器,对完成的GUI程序进行编译,并生成了可脱离MATLAB环境的GUI可执行文件,进而,通过内置MATLA RuntimeV99函数库,生成了可独立执行程序的安装文件。实现了在任意Windows x64平台上使用该计算程序的目标。缺点便是整体封包文件高达828MB,但为了实现对脱机平台的友好与易上手性,还是值得的。
本次实验仿真中,只需简单利用MATLAB的编程计算功能,主要核心便是插值计算法:
对于单线性插值计算,我们利用两个同体积一维数组,一个实现利用if逐加循环对输入压力值p的定位,另一个用来确定对应定位压力下的已知比体积数值或γ值,进而进行插值计算。
对于双线性插值计算,我们利用两个一维数组分别表示压力值与干度系数数值,一个二维数组表示在横轴压力,纵轴干度系数值下对应的倍乘系数数值。嵌套利用if逐加循环定位出2*2矩阵,再依次在各个方向上插值,最终得到双线性插值计算的结果。
在命令栏中输入guide并确定,可以呼出GUI窗口,创建一个空白窗口,并添加静态文本框;可编辑文本框与按钮,实现静态文字提示,数值输入与输出,运算开始与程序结束命令。
可编辑文本框接受输入双精度数字edit1为数学原理中的压力p,edit2为数学原理中的质量干度系数χm,经过逻辑计算,得到的值赋值给edit3,edit4,edit5分别表示上那种倍乘系数,按钮“开始”pushbutton1用于开始执行计算程序,按钮“退出”pushbutton2用于直接关闭窗口实现退出程序的功能。
对于输入的p与χm,使用if循环进行初始判断,若在非试用范围内则直接在对应的可编辑文本框内输出显示“**值不在范围内”
对于创建的GUI窗口,直接保存会生成“.fig”与“.m”文件,分别为UI信息文件与UI主空白逻辑文件,我们直接在“.m”文件内复制嵌入所需的计算程序即可以通过UI截面使用这个程序的算法。
另外借助AdobePhotoshop制作了一个静态的操作窗口的背景图,对其进行了一定程度的修缮。
6.1主要计算逻辑程序流程图
主要计算逻辑程序代码见附录2
包含操作窗口逻辑的完整程序代码见附录3
7.1输出的安装包安装教程
本安装文件为内置Matlab r2020b配套的Matlab runtime的版本。
首先对安装包进行解压缩到同文件名文件夹内,进入for_redistribution文件夹。
选择MyAppInstaller_mcr.exe,右键以管理员身份运行,进入安装。
点击下一步,进入打包的说明文档、其他资源文件等数据的载入,建议选择为解压缩位置。
勾选将快捷方式添加到桌面,进入到下一步,妥善选择安装位置安装Matlab Runtime v99函数库,并进入到下一步。
选择接受协议条款,进入到下一步。
点击安装 ,等待安装读条完成。
完成后,点击完成按钮即完成安装。
双击桌面的快捷方式即可进入到计算程序,或进入解压缩文件夹,进入for_redistribution_files_only或for_testing子文件夹,双击Thom_mode_calculator.exe也可运行计算程序。
7.2计算程序界面与使用
双击程序开始运行。
上图为正常打开的窗口,受限于屏幕分辨率问题,部分文字在不同主机上可能会有所重叠。
鼠标置于输入窗1上点击出现闪烁光标,键入压力值(单位Mpa)。
鼠标置于输入窗2上点击出现闪烁光标,键入质量干度系数值(小数值形式)。
点击计算即可在窗口345出现对应计算数值。
重新键入数值点击计算可重新计算。
点击退出,窗口即关闭,退出程序。
7.3计算程序特色
本程序仅需根据已有条件:①压力p,②质量干度系数χm,点击确认即可输出现输入条件下的三种压降倍乘系数数值。重新删除原有输入条件,再次点击确认即可重新获得新条件下的三种压降倍乘系数数值。点击退出即关闭程序。
程序基于MATLAB 2020b的编译功能生成可独立在任意64位Windows平台上安装并使用的安装文件,整个过程极为简单,毫无上手难度。启动程序短暂等待后即可进入操作界面,程序的交互界面简洁明了,ICON图标明显且独具风格,识别方便。
程序自身为根据Thom的原有计算模型理论公式计算并获得数据的,经过程序重绘出的图像与原图像可以相互迎合,同时,理论上可以获得在任一的质量干度系数χm下的压力P与倍乘系数r的关系曲线。再代入已知数据的条件,获得的结果与已知数据相比误差在0.001以内,因而此种方法相较于基于有限的定标数据进行曲线拟合获得的特定条件下的倍乘系数数值的方法具有更好的可控准确度,在该程序的应用广度上有更多的可能性。
文件程序基于MATLAB 2020b进行编程,解释性的语言便于在短时间内学习,分模块的结构在理解与编程上优势明显,在安装的程序中有内置其.m文件,程序代码简洁明了,便于该程序进一步的开源分享与再开发,
八、讨论总结与问题反思
本次课程设计注重于现有计算模型的程序化实现,初期根据课本上的提示找到了原作者关于词模型的原始文章[1],但原文为全英文且单位制有别。因此曾花费近近3天往返两校区图书馆寻找相关热工水力的参考书,但发现所有相关书籍关于词模型仅有类似于课本[2]的关于如何使用图7,9,10进行查图寻数的使用方法,缺少关于模型的推导证明过程。最终还是回到原点,决定将原文进行翻译进而尝试理解原作者的思维过程。
从6.13日晚开始直至6.14晚,花费一天一夜时间,两人分工完成了原文的再录入与初版的翻译及校正。6.15日课后将自身思路与老师进行了交流并对部分存疑的翻译词句进行校对。得到了老师在思路上的肯定。
通过使用MATLABr2020b进行数值计算对比原文中的表2中的数值再次验证了r2理论计算公式正确性,同时也验证了r4。
对于r3尝试也使用理论计算公式进行计算,但仔细阅读原文及文内文献[3]大致得出结论r3公式推导是基于实验数据进行的反演,若是直接利用公式计算,需要另行键入具体的流体管道水利参数,难以满足原定的输入压力与质量干度系数输出倍乘系数的目标,故而,我们决定根据原文献中的表3进行双线性差值法实现功能,经过人工比对图表,该计算方法还是有高于人工判读的准确性的,实现了MATLAB主程序逻辑的编辑。
在筹划本次课程设计之时,我们最初目的是编写一个完全基于前段逻辑运算的微信小程序,方便传播与使用。微信小程序是基于JavaScript语言的,需要从零开始进行学习(此种解释性语言与曾经接触到的C++等逻辑语言有较大的区别),因此,从老师在6.11日正式发布课程设计题目时变开始进行JS语言的学习,但受限于课程结课与作业提交等实践的冲撞,最终在完成MATLAB验证程序编写后,小组决定放弃的原有目标,从长计议去学习该语言,并在现有的.m程序上进行修缮改进。在赵佳琦同志的建议下,我们学习并利用guide命令完成了操作界面的规划与逻辑的改写,并尝试做了进一步的界面美化,使该程序逐渐有温度起来。
MATLAB的.m文件需要使用MATLAB自身程序进行运行,难以满足该计算程序推广使用的目标,但随着MATLAB的发展,其能够配合外置编译器进行程序编译与封包操作,尽管存在着受制于自身语言性质而程序臃肿复杂的缺陷,可是当我们满怀欣喜的尝试直接在未安装MATLAB 环境的电脑中使用该程序.exe文件时依然发现需要手动下载安装对应版本的MATLAB-MCR函数库。与此同时我们通过在CSDN上的学习发现MATLAB Runtime的安装包可以随程序一听封包为安装程序,既然如此,送佛送到西,我们对程序进一步进行了修缮,最终输出了现今的“Thom模型计算器1.2”安装文件,算是半数达到了最初的目的,实现了在任意Windows x64平台上使用该计算程序的目标。缺点便是整体封包文件高达828MB,但为了实现对脱机平台的友好与易上手性,还是值得的。
同时我们也将进一步学习JS语言,尝试在后面完整的达成最初的目标,作为当今主流的互联网前端逻辑语言,对于我们的工科基本素质能力提升也是大有益处的。
小组成员在此次课程设计中,第一次接触并开始阅读理解文献,尽管方法着实低效,但也收获了诸多关于外文文献认读的小知识,客服了以往对外文文献得到踌躇,对后面博学广识充满信心。
小组成员都是在本专业课学习上有不少困难的同学,在进行过程中相互研讨督促,重新对以往的课程知识进行学习,才逐渐理解了Thom所提出的模型之巧妙。热工水力学作为一个理论研究与实验经验相互补充的学科,如此一番折腾着实有益。
模型的建立与计算机程序编写在当今的学科交叉发展中不可或缺,借助着这次的新课设题目,我们尝试逐渐融入这一发展洪流,借助CSDN这类技术共享交流平台,乘着当今知识不断平民化的潮流,不断地提升自身知识水平,不断努力,不断实践!
九、参考资料
[1] Thom J.R.S.. Prediction of pressure drop during forced circulation boiling of water[J]. 1964, 7(7) : 709-724.
[2] CSDN博主「re_call」的原创文章:直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)
原文链接:直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)_re_call的博客-CSDN博客_线性插值和二次插值的区别
[3] Haywood RW, Knights GA, Middleton GE, Thom JRS. Experimental Study of the Flow Conditions and Pressure Drop of Steam-Water Mixtures at High Pressures in Heated and Unheated Tubes. Proceedings of the Institution of Mechanical Engineers. 1961;175(1):669-747.
十、附录
10.1附录1
Thom模型的中文翻译版本《水强制循环沸腾压降的预测》见另附的.doc文件
10.2附录2主要计算逻辑程序代码
P=double(input('请输入压力值\n'));%定义输入压力P值为双精度
Xm=double(input('请输入Xm的值\n'));%定义输入质量干度系数Xm值为双精度
if P<=22.1047288&&P>=0.10135356%对压力进行基本范围判断,确定其满足该模型的使用条件
p1=[0.101325,0.14327,0.19854,0.27011,0.36136,0.47597,0.61804,0.79202,1.0027,1.2553,1.5550,1.9080,2.3202,2.7979,3.3480,3.9776,4.6941,5.5052,6.4191,7.4449,8.5917,9.8694,11.289,12.864,14.608,16.537,18.674,21.053];
%一维数组p1盛放附录C物性表的压力采样点
p2=[0.10135356,1.7237,4.13688,8.6185,14.47908,20.6844,22.1047288];
%一维数组p2盛放p-γ关系表中的压力采样点
v1=[1.0435,1.0515,1.0603,1.0697,1.0798,1.0906,1.1021,1.1144,1.1275,1.1415,1.1565,1.1726,1.1900,1.2087,1.2291,1.2512,1.2755,1.3023,1.3321,1.3655,1.4036,1.4475,1.4992,1.562,1.639,1.741,1.894,2.22];
%一维数组v1盛放附录C饱和水物性对应采样压力值下的水的比体积数值×1000
v2=[1.6730,1.2101,0.89171,0.66832,0.50866,0.39257,0.30685,0.24262,0.19385,0.15635,0.12919,0.104265,0.086062,0.071472,0.059674,0.050056,0.042149,0.035599,0.030133,0.025537,0.021643,0.018316,0.015451,0.012967,0.010779,0.008805,0.006943,0.00493];
%一维数组v2盛放附录C饱和水蒸汽物性对应采样压力值下的水蒸汽的比体积数值
gamma1=[246,40,20,9.8,4.95,2.15,1];
%一维数组gamma1盛放p-γ关系表中的对应压力采样点下的γ值
for i=1:1:27%对盛放附录C采样压力值的一维数组进行逐个取样(共28个数,从编号1到编号27)
if P <= p1(i+1)%找到输入压力值所对应在物性表采样压力值的最低上限值的位置
vf=v1(i)+(v1(i+1)-v1(i))*(P-p1(i))/(p1(i+1)-p1(i));%利用插值法计算饱和水在输入压力值下的比体积值
vg=v2(i)+(v2(i+1)-v2(i))*(P-p1(i))/(p1(i+1)-p1(i));%利用插值法计算饱和水蒸汽在输入压力值下的比体积值
break;
end
end
for i=1:1:6%对盛放p-γ关系表中的对应压力采样点的一维数组进行逐个取样(共7个数,从编号1到编号6)
if P <= p2(i+1)%找到输入压力值所对应在关系表采样压力值的最低上限值的位置
gamma=gamma1(i)+(gamma1(i+1)-gamma1(i))*(P-p2(i))/(p2(i+1)-p2(i));%利用插值法计算在输入压力值下的γ值
break;
end
end
Alpha=1000*vg/vf;%计算α其中因为饱和水物性表取值原因,需要对vf进行换算
%根据方程计算加速压降倍乘系数
r2=double((1+Xm*(gamma-1))*(1+Xm*(Alpha-gamma)/gamma)-1)
%根据方程计算重力压降倍乘系数
r4=double((gamma/Alpha-1)/(gamma-1)+(gamma-gamma/Alpha)*log(1+Xm*(gamma-1))/((gamma-1)*(gamma-1)*Xm))
else
'r2/r4:压力值不在范围内'
end
if Xm<0||Xm>1%对r3计算所需的合适的Xm值进行选择
'r3:Xm值不在范围内'
elseif P<1.7237||P>20.6844||(Xm<0.02&&P>8.6185)||(Xm<0.08&&P>14.47908)
%再次对r3计算所需的合适的P值进行选择
'r3:P值不在范围内'
else%对于满足要求的输入数值进行下列计算
%定义一维数组 p3表示表3的纵向压力取值点(共5个取值点,位置标号j为1-4)
p3=[1.7237,4.13688,8.6185,14.47908,20.6844];
%定义一维数组Xm1表示表3的横向干度系数取值点(共22个取值点,位置标号i为1-21)
Xm1=[0,0.01,0.015,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10,0.15,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1];
%定义5*22的二维矩阵,表示在j列i行点的的条件下已知的r3的值
r=[1,1,1,0,0;
1.49,1.11,1.03,0,0;
1.76,1.25,1.05,0,0;
2.05,1.38,1.08,1.02,0;
2.63,1.62,1.15,1.05,0;
3.19,1.86,1.23,1.07,0;
3.71,2.09,1.31,1.10,0;
4.21,2.30,1.40,1.12,0;
4.72,2.50,1.48,1.14,0;
5.25,2.70,1.56,1.16,1.04;
5.78,2.90,1.64,1.19,1.05;
6.30,3.11,1.71,1.21,1.06;
9.00,4.11,2.10,1.33,1.09;
11.4,5.08,2.47,1.46,1.12;
16.2,7.00,3.20,1.72,1.18;
21.0,8.80,3.89,2.01,1.26;
25.9,10.6,4.55,2.32,1.33;
30.5,12.4,5.25,2.62,1.41;
35.2,14.2,6.00,2.93,1.50;
40.1,16.0,6.75,3.23,1.58;
45.0,17.8,7.50,3.53,1.66;
49.93,19.65,8.165,3.832,1.740];
for j=1:1:4%先对输入的p值寻找其在二维矩阵中的上下限列的位置
if P<=p3(j+1)
for i=1:1:21%再对输入的Xm值寻找其在二维矩阵中的上下限行的位置,最终得到了一个2*2四个确定的r3值的坐标位置
if Xm<=Xm1(i+1)
%先对干度系数进行插值,计算得到在该Xm值下围绕输入p的前后的对应r3值
rxm1=r(i,j)+(r(i,j+1)-r(i,j))*(P-p3(j))/(p3(j+1)-p3(j)); rxm2=r(i+1,j)+(r(i+1,j+1)-r(i+1,j))*(P-p3(j))/(p3(j+1)-p3(j));
%再对压力进行插值得到在p,Xm下的r3
r3=rxm1+(rxm2-rxm1)*(Xm-Xm1(i))/(Xm1(i+1)-Xm1(i));
break;
end
end
break;
end
end
end
10.3附录3包含操作窗口逻辑的完整程序代码
注意UI交互的图片替换,才可正常运行!!!
function varargout = Thom_model_UI(varargin)
% THOM_MODEL_UI MATLAB code for Thom_model_UI.fig
% THOM_MODEL_UI, by itself, creates a new THOM_MODEL_UI or raises the existing
% singleton*.
%
% H = THOM_MODEL_UI returns the handle to a new THOM_MODEL_UI or the handle to
% the existing singleton*.
%
% THOM_MODEL_UI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in THOM_MODEL_UI.M with the given input arguments.
%
% THOM_MODEL_UI('Property','Value',...) creates a new THOM_MODEL_UI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Thom_model_UI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Thom_model_UI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Thom_model_UI
% Last Modified by GUIDE v2.5 21-Jun-2021 13:41:14
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Thom_model_UI_OpeningFcn, ...
'gui_OutputFcn', @Thom_model_UI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Thom_model_UI is made visible.
function Thom_model_UI_OpeningFcn(hObject, eventdata, handles, varargin)
% 设置页面左上角的 Logo
I = imread( 'COMIN.jpg' ); % COMIN.jpg为指定的图标
javaImage = im2java( I );
newIcon = javax.swing.ImageIcon( javaImage );
figFrame = get( handles.figure1, 'JavaFrame' ); % 取得Figure的JavaFrame
figFrame.setFigureIcon( newIcon ); % 修改图标
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Thom_model_UI (see VARARGIN)
set(gcf,'name','Thom模型倍乘系数计算'); %第三个参数为要修改的界面名称——定义操作界面左上角窗口名称为“Thom模型倍乘系数计算
% Choose default command line output for Thom_model_UI
handles.output = hObject;
%设置背景
ha=axes('units','normalized','pos',[0 0 1 1]);
uistack(ha,'bottom'); %置于底部用buttom
I1=imread('操作界面背景.jpg'); %读取在当前文件夹下的背景图片
image(I1);
colormap gray
set(ha,'handlevisibility','off','visible','off');
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Thom_model_UI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Thom_model_UI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(~, eventdata, handles)%定义单击按钮pushbutton1“计算”为开始执行主计算程序
P=str2double(get(handles.edit1,'string'));%定义输入压力P值为双精度,获取从edit1窗口输入的数值
Xm=str2double(get(handles.edit2,'string'));%定义输入质量干度系数Xm值为双精度,获取从edit1窗口输入的数值
if P<=22.1047288&&P>=0.10135356
p1=[0.101325,0.14327,0.19854,0.27011,0.36136,0.47597,0.61804,0.79202,1.0027,1.2553,1.5550,1.9080,2.3202,2.7979,3.3480,3.9776,4.6941,5.5052,6.4191,7.4449,8.5917,9.8694,11.289,12.864,14.608,16.537,18.674,21.053];
p2=[0.10135356,1.7237,4.13688,8.6185,14.47908,20.6844,22.1047288];
v1=[1.0435,1.0515,1.0603,1.0697,1.0798,1.0906,1.1021,1.1144,1.1275,1.1415,1.1565,1.1726,1.1900,1.2087,1.2291,1.2512,1.2755,1.3023,1.3321,1.3655,1.4036,1.4475,1.4992,1.562,1.639,1.741,1.894,2.22];
v2=[1.6730,1.2101,0.89171,0.66832,0.50866,0.39257,0.30685,0.24262,0.19385,0.15635,0.12919,0.104265,0.086062,0.071472,0.059674,0.050056,0.042149,0.035599,0.030133,0.025537,0.021643,0.018316,0.015451,0.012967,0.010779,0.008805,0.006943,0.00493];
gamma1=[246,40,20,9.8,4.95,2.15,1];
for i=1:1:27
if P <= p1(i+1)
vf=v1(i)+(v1(i+1)-v1(i))*(P-p1(i))/(p1(i+1)-p1(i));
vg=v2(i)+(v2(i+1)-v2(i))*(P-p1(i))/(p1(i+1)-p1(i));
break;
end
end
for i=1:1:6
if P <= p2(i+1)
gamma=gamma1(i)+(gamma1(i+1)-gamma1(i))*(P-p2(i))/(p2(i+1)-p2(i));
break;
end
end
Alpha=1000*vg/vf;
r2=double((1+Xm*(gamma-1))*(1+Xm*(Alpha-gamma)/gamma)-1);
r4=double((gamma/Alpha-1)/(gamma-1)+(gamma-gamma/Alpha)*log(1+Xm*(gamma-1))/((gamma-1)*(gamma-1)*Xm));
set(handles.edit3,'string',num2str(r2));%输出r2的计算结果到edit3显示
set(handles.edit5,'string',num2str(r4))%输出r4的计算结果到edit5显示
else%若输入值不满足要求范围,在指定的可编辑文本框内输出
set(handles.edit3,'string','P值不在范围内');
set(handles.edit5,'string','P值不在范围内');
end
if Xm<0||Xm>1
set(handles.edit4,'string','Xm值不在范围内');
elseif P<1.7237||P>20.6844||(Xm<0.02&&P>8.6185)||(Xm<0.08&&P>14.47908)
set(handles.edit4,'string','P值不在范围内');
else
p3=[1.7237,4.13688,8.6185,14.47908,20.6844];
Xm1=[0,0.01,0.015,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10,0.15,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1];
r=[1,1,1,0,0;
1.49,1.11,1.03,0,0;
1.76,1.25,1.05,0,0;
2.05,1.38,1.08,1.02,0;
2.63,1.62,1.15,1.05,0;
3.19,1.86,1.23,1.07,0;
3.71,2.09,1.31,1.10,0;
4.21,2.30,1.40,1.12,0;
4.72,2.50,1.48,1.14,0;
5.25,2.70,1.56,1.16,1.04;
5.78,2.90,1.64,1.19,1.05;
6.30,3.11,1.71,1.21,1.06;
9.00,4.11,2.10,1.33,1.09;
11.4,5.08,2.47,1.46,1.12;
16.2,7.00,3.20,1.72,1.18;
21.0,8.80,3.89,2.01,1.26;
25.9,10.6,4.55,2.32,1.33;
30.5,12.4,5.25,2.62,1.41;
35.2,14.2,6.00,2.93,1.50;
40.1,16.0,6.75,3.23,1.58;
45.0,17.8,7.50,3.53,1.66;
49.93,19.65,8.165,3.832,1.740];
for j=1:1:4
if P<=p3(j+1)
for i=1:1:21
if Xm<=Xm1(i+1)
rxm1=r(i,j)+(r(i,j+1)-r(i,j))*(P-p3(j))/(p3(j+1)-p3(j)); rxm2=r(i+1,j)+(r(i+1,j+1)-r(i+1,j))*(P-p3(j))/(p3(j+1)-p3(j)); r3=rxm1+(rxm2-rxm1)*(Xm-Xm1(i))/(Xm1(i+1)-Xm1(i));
set(handles.edit4,'string',num2str(r3));%输出r3的计算结果到edit4显示
break;
end
end
break;
end
end
end
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)%定义单击按钮pushbutton2“退出”为关闭窗口,退出程序
close(gcf)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'String')) returns contents of edit3 as a double
% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit4 as text
% str2double(get(hObject,'String')) returns contents of edit4 as a double
% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit5_Callback(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit5 as text
% str2double(get(hObject,'String')) returns contents of edit5 as a double
% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
10.4附录4冷却剂热物性表