题目描述
题目描述如下图所示:
原理分析
输入参数:
- 喉部直径 d = 0.06 m d= 0.06 \,\mathrm{m} d=0.06m
- 管口直径 D = 0.1 m D= 0.1 \,\mathrm{m} D=0.1m
- 文丘里管前后压损 Δ ϖ = 45000.0 P a Δ\varpi= 45000.0 \,\mathrm{Pa} Δϖ=45000.0Pa
- 管口与喉部差压 Δ p = 200000.0 P a Δp= 200000.0 \,\mathrm{Pa} Δp=200000.0Pa
- 管口压力 p = 6000000.0 P a p= 6000000.0 \,\mathrm{Pa} p=6000000.0Pa
- 温度 T = 20 ℃ T= 20 \,\mathrm{℃} T=20℃
- 气体等熵指数 κ = 1.3 κ= 1.3 κ=1.3
- 气体密度 ρ g a s = 50 k g / m 3 ρ_{\mathrm{gas}}= 50 \,\mathrm{kg/m^3} ρgas=50kg/m3
- 液体密度 ρ l i q u i d = 800 k g / m 3 ρ_{\mathrm{liquid}}= 800 \,\mathrm{kg/m^3} ρliquid=800kg/m3
- 重力加速度 g = 9.81 m / s 2 g= 9.81 \,\mathrm{m/s^2} g=9.81m/s2
直径比 β = d D = 0.6 \beta=\frac{d}{D}=0.6 β=Dd=0.6
针对不同的湿气,设置不同的液体表面张力函数 H H H
湿气种类 | H H H |
---|---|
碳氢化合物 | 1 1 1 |
常温水 | 1.35 1.35 1.35 |
水蒸气中的水 | 0.79 0.79 0.79 |
根据题目条件,先确定 H = 1 H = 1 H=1 .
先置 τ \tau τ 为文丘里喉部压力与管口压力比值:
τ = p − Δ p p \tau = \frac{p-\Delta p }{p} τ=pp−Δp
然后根据 GB 2624-4 国家标准提及的可膨胀系数 ε \varepsilon ε
ε = κ τ 2 κ κ − 1 ⋅ 1 − β 4 1 − β 4 τ 2 κ ⋅ 1 − τ κ − 1 κ 1 − τ \varepsilon = \sqrt{\frac{\kappa \tau ^{\frac{2}{\kappa } }}{\kappa -1}\cdot \frac{1-\beta ^4}{1-\beta ^4\tau ^{\frac{2}{\kappa } }} \cdot \frac{1-\tau ^{\frac{\kappa -1}{\kappa } }}{1-\tau } } ε=κ−1κτκ2⋅1−β4τκ21−β4⋅1−τ1−τκκ−1
迭代公式如下:
-
先置流出系数 C = 1 C=1 C=1, ϕ = 1 \phi =1 ϕ=1 ,较大的液相 X X X, X > 0.016 X>0.016 X>0.016
-
计算气相质量流量:
q m , g a s = C 1 − β 4 ε π 4 d 2 2 Δ p ⋅ ρ g a s ϕ q_{\mathrm{ m,gas}} = \frac{C}{\sqrt{1-\beta ^{4}} } \varepsilon \frac{\pi }{4} d^2\frac{\sqrt{2\Delta p \cdot \rho _{\mathrm{gas}}} }{\phi } qm,gas=1−β4Cε4πd2ϕ2Δp⋅ρgas -
计算气体密度弗劳德数
F r g a s = 4 q m , g a s ρ g a s π D 2 g D ρ g a s ρ l i q u i d − ρ g a s Fr_{\mathrm{gas} }=\frac{4q_{\mathrm{ m,gas}}}{\rho _{\mathrm{gas}}\pi D^2\sqrt{gD} } \sqrt{\frac{\rho _{\mathrm{gas}}}{\rho _{\mathrm{liquid}}-\rho _{\mathrm{gas}}} } Frgas=ρgasπD2gD4qm,gasρliquid−ρgasρgas -
计算流出系数
C = 1 − 0.0463 exp ( − 0.05 F r g a s β 2.5 ) min { 1 , X 0.016 } C=1-0.0463\exp \left ( -0.05\frac{Fr_{\mathrm{gas} }}{\beta ^{2.5}} \right ) \min \left \{ 1,\sqrt{\frac{X}{0.016} } \right \} C=1−0.0463exp(−0.05β2.5Frgas)min{ 1,0.016X} -
计算指数
n = max { 0.583 − 0.18 β 2 − 0.578 exp ( − 0.8 F r g a s H ) , 0.392 − 0.18 β 2 } n=\max \left \{0.583-0.18\beta^2-0.578\exp\left ( -\frac{0.8Fr_{\mathrm{gas}}}{H} \right ) ,0.392-0.18\beta^2 \right \} n=max{ 0.583−0.18β2−0.578exp(−H0.8Frgas),0.392−0.18β2} -
计算流出系数
C C h = ( ρ l i q u i d ρ g a s ) n + ( ρ g a s ρ l i q u i d ) n C_{\mathrm{Ch} } = \left ( \frac{\rho_{\mathrm{liquid}}}{\rho _{\mathrm{gas}}} \right ) ^n + \left ( \frac{\rho_{\mathrm{gas}}}{\rho _{\mathrm{liquid}}} \right ) ^n CCh=(ρgasρliquid)n+(ρliquidρgas)n -
分别计算两个参数
{ Y = Δ ϖ Δ p − 0.0896 − 0.48 β 9 Y max = 0.61 exp ( − 11 ρ g a s ρ l i q u i d − 0.045 F r g a s H ) \left\{\begin{matrix} Y=\frac{\Delta \varpi}{\Delta p}-0.0896-0.48\beta^9 \\ Y_{\max }=0.61\exp\left ( -11 \frac{\rho_{\mathrm{gas}}}{\rho _{\mathrm{liquid}}} -0.045 \frac{Fr_{\mathrm{gas} }}{H} \right ) \end{matrix}\right. { Y=ΔpΔϖ−0.0896−0.48β9Ymax=0.61exp(−11ρliquidρgas−0.045HFrgas) -
计算液相
X = ( − ln ( 1 − Y Y max ) 35 exp ( − 0.28 F r g a s H ) ) 4 3 X=\left ( \frac{-\ln\left ( 1-\frac{Y}{Y_{\max }} \right ) }{35\exp\left ( -0.28\frac{Fr_{\mathrm{gas} }}{H} \right ) } \right ) ^{\frac{4}{3} } X= 35exp(−0.28HFrgas)−ln(1−YmaxY) 34 -
计算虚高参数
ϕ = 1 + C C h X + X 2 \phi =\sqrt{1+C_{\mathrm{Ch} }X+X^2} ϕ=1+CChX+X2 -
检查误差是否满足要求,不满足回到步骤2,满足则退出
液相由下式定义:
X = q m , l i q u i d q m , g a s ρ g a s ρ l i q u i d X=\frac{q_{\mathrm{ m,liquid}}}{q_{\mathrm{ m,gas}}} \sqrt{\frac{\rho _{\mathrm{gas}}}{\rho _{\mathrm{liquid}}} } X=qm,gasqm,liquidρliquidρgas
可以用获得液相质量流量 q m , l i q u i d q_{\mathrm{ m,liquid}} qm,liquid .
误差分析
气相测量不确定度定义由下式给出:
δ q m , g a s q m , g a s = ( δ ( C / ϕ ) C / ϕ ) 2 + ( δ ( ϕ q m , g a s / C ) ϕ q m , g a s / C ) 2 \frac{\delta q_{\mathrm{ m,gas}}}{q_{\mathrm{ m,gas}}} = \sqrt{\left ( \frac{\delta \left ( C/\phi \right ) }{ C/\phi} \right )^2+ \left ( \frac{\delta \left ( \phi q_{\mathrm{ m,gas}}/C \right ) }{\phi q_{\mathrm{ m,gas}}/C } \right ) ^2 } qm,gasδqm,gas=(C/ϕδ(C/ϕ))2+(ϕqm,gas/Cδ(ϕqm,gas/C))2
其中 δ ( C / ϕ ) C / ϕ \frac{\delta \left ( C/\phi \right ) }{ C/\phi} C/ϕδ(C/ϕ) 由下表确定
条件 | δ ( C / ϕ ) C / ϕ \frac{\delta \left ( C/\phi \right ) }{ C/\phi} C/ϕδ(C/ϕ) |
---|---|
X ≤ 0.15 X\le0.15 X≤0.15 | 3 % 3\% 3% |
X > 0.15 X>0.15 X>0.15 | 2.5 % 2.5\% 2.5% |
Y / Y max < 0.6 Y/Y_{\max } <0.6 Y/Ymax<0.6 | 4 % 4\% 4% |
0.6 ≤ Y / Y max < 0.65 0.6\le Y/Y_{\max } <0.65 0.6≤Y/Ymax<0.65 | 6 % 6\% 6% |
若未给出压损测量不确定度,则 δ ( ϕ q m , g a s / C ) ϕ q m , g a s / C \frac{\delta \left ( \phi q_{\mathrm{ m,gas}}/C \right ) }{\phi q_{\mathrm{ m,gas}}/C } ϕqm,gas/Cδ(ϕqm,gas/C)可忽略,若假定给出压损测量不确定度 δ Δ ϖ Δ ϖ \frac{\delta \Delta \varpi }{\Delta \varpi } ΔϖδΔϖ,则令压损
Δ ϖ ′ = Δ ϖ ± δ Δ ϖ \Delta \varpi'=\Delta \varpi \pm \delta \Delta \varpi Δϖ′=Δϖ±δΔϖ
再次通过之前的公式迭代得到 q m , g a s ′ q_{\mathrm{ m,gas}}' qm,gas′, q m , g a s ′ ′ q_{\mathrm{ m,gas}}'' qm,gas′′,取
δ ( ϕ q m , g a s / C ) ϕ q m , g a s / C = max { ∣ q m , g a s − q m , g a s ′ ∣ q m , g a s , ∣ q m , g a s − q m , g a s ′ ′ ∣ q m , g a s } \frac{\delta \left ( \phi q_{\mathrm{ m,gas}}/C \right ) }{\phi q_{\mathrm{ m,gas}}/C } =\max \left \{ \frac{\left | q_{\mathrm{ m,gas}}-q_{\mathrm{ m,gas}}' \right | }{q_{\mathrm{ m,gas}}}, \frac{\left | q_{\mathrm{ m,gas}}-q_{\mathrm{ m,gas}}'' \right | }{q_{\mathrm{ m,gas}}} \right \} ϕqm,gas/Cδ(ϕqm,gas/C)=max{
qm,gas
qm,gas−qm,gas′
,qm,gas
qm,gas−qm,gas′′
}
解答
编程如下:
新建一个文件名为 GB2624_4.py 的文件,填写如下代码
from math import *
############################################################################################
# beta: 管径比 D/d
# kapa: 等熵指数
# p_: 文丘里喉部与入口压力比值
# epsilon: 可膨胀系数
# p1↓ p2↓ p_ = p2/p1
# ___ ___
# \____/
# ____
# ___/ \___
# C: 流出系数
# d: 喉部直径
# D: 管口直径
# phi: 虚高参数
# d_p: 文丘里前后差压
# qm_gas: 气相质量流量
# H: 液体表面张力函数
# g: 重力加速度
# Fr_gas: 气体密度弗劳德数
# kapa: 等熵指数
# rho_gas: 气体密度
# rho_liquid: 液体密度
# X: 液相
# d_w: 文丘里管前后压损
# d_p: 管口与喉部差压
############################################################################################
def get_epsilon(beta, kapa, p_):
term_1 = kapa * pow(p_, 2/kapa) / (kapa - 1)
term_2 = (1 - pow(beta, 4)) / (1 - pow(beta, 4) * pow(p_, 2/kapa))
term_3 = (1 - pow(p_, (kapa - 1)/kapa)) / (1- p_)
return sqrt(term_1 * term_2 * term_3)
def get_qm_gas(C, beta, epsilon, d, d_p, rho_gas, phi):
term_1 = C / sqrt(1 - pow(beta, 4))
term_2 = epsilon * pi / 4 * d *d
term_3 = sqrt(2 * d_p * rho_gas) / phi
return term_1 * term_2 * term_3
def get_Fr_gas(qm_gas, rho_gas, D, g, rho_liquid):
term_1 = 4 * qm_gas / (rho_gas * pi * D * D * sqrt(g * D))
term_2 = sqrt(rho_gas / (rho_liquid - rho_gas))
return term_1 * term_2
def get_C(Fr_gas, beta, X):
Fr_gas_th = Fr_gas / pow(beta, 2.5)
return 1 - 0.0463 * exp(-0.05 * Fr_gas_th) * min(1, sqrt(X / 0.016))
def get_n(Fr_gas, beta, H):
term_1 = 0.583 - 0.18 * beta * beta - 0.578 * exp(-0.8 * Fr_gas / H)
term_2 = 0.392 - 0.18 * beta * beta
return max(term_1, term_2)
def get_C_Ch(rho_liquid, rho_gas, n):
term_1 = pow(rho_liquid / rho_gas, n)
return term_1 + 1 / term_1
def get_Y(d_w, d_p, beta):
return d_w / d_p - 0.0896 - 0.48 * pow(beta, 9)
def get_Y_max(rho_gas, rho_liquid, Fr_gas, H):
return 0.61 * exp(-11 * (rho_gas / rho_liquid) - 0.045 * (Fr_gas / H))
def get_X(Y, Y_max, Fr_gas, H):
term_1 = -log(1 - Y / Y_max)
term_2 = 35 * exp(-0.28 * Fr_gas / H)
# print("term_1 / term_2:",term_1 / term_2)
return pow(term_1 / term_2, 4 / 3)
def get_Y_Ymax(X, Fr_gas, H):
return 1 - exp(-35 * pow(X, 0.75) * exp(-0.28 * Fr_gas / H))
def get_X_from_Y_Ymax(X, Fr_gas, H):
Y_Ymax = get_Y_Ymax(X, Fr_gas, H)
term_1 = -log(1 - Y_Ymax)
term_2 = 35 * exp(-0.28 * Fr_gas / H)
return pow(term_1 / term_2, 4 / 3)
def get_phi(C_Ch, X):
return sqrt(1 + C_Ch * X + X * X)
该文件主要用于获得 GB 2624-4 标准下的可膨胀系数和其他参数的迭代公式。
新建一个文件名为 VenturiMoisture.py ,写入如下代码:
from GB2624_4 import *
from math import *
# 计算一种情况下的迭代类
class VenturiMoisture:
############################################################################################
# 注:以下参数均采用国际标准单位
# d: 喉部直径
# D: 管口直径
# d_w: 文丘里管前后压损
# d_p: 管口与喉部差压
# p1: 管口压力
# kapa: 等熵指数
# rho_gas: 气体密度
# rho_liquid: 液体密度
# g: 重力加速度
# property: 湿气类型,包括"Hydrocarbons"碳氢化合物、"normalT_H2O"常温水、"steam"水蒸气中的水
# uncertanty: 压损测量不确定度
# err: 迭代误差,以气相体积流量为准
############################################################################################
def __init__(self, d, D, d_p, d_w, p1, kapa, rho_gas, rho_liquid, g=9.81, property="Hydrocarbons"):
# 若迭代过程报错,该标志位置1
self.errflag = 0
# 入口参数
self.d = d
self.D = D
self.d_p = d_p
self.d_w = d_w
self.p1 = p1
self.kapa = kapa
self.rho_gas = rho_gas
self.rho_liquid = rho_liquid
self.g = g
self.beta = d / D
# 根据输入类型选择液体表面张力函数H
if property == "Hydrocarbons":
# 碳氢化合物
self.H = 1
elif property == "normalT_H2O":
# 常温水
self.H = 1.35
elif property == "steam":
# 水蒸气中的水
self.H = 0.79
else:
self.H = 0
self.errflag = 1
# 获取可膨胀系数,采用一次计算公式并非查表
self.epsilon = get_epsilon(self.beta, kapa, (p1 - d_p) / p1)
# 设置迭代初始值
self.C = 0.95
self.phi = 1
self.X = 0.016
self.qm_gas = 0
self.n = 0
self.C_Ch = 0
self.Y = 0
# 迭代次数
self.iter_times = 0
# 存储迭代中间变量
self.qm_gas_list = []
self.X_list = []
self.C_list = []
self.phi_list = []
# 迭代函数,可以设置结束误差
def iteration(self, err=1e-4):
err_get = err + 1
self.iter_times = 0
while err_get > err and not self.errflag:
qm_gas = get_qm_gas(self.C, self.beta, self.epsilon, self.d, self.d_p, self.rho_gas, self.phi)
Fr_gas = get_Fr_gas(qm_gas, self.rho_gas, self.D, self.g, self.rho_liquid)
C = get_C(Fr_gas, self.beta, self.X)
n = get_n(Fr_gas, self.beta, self.H)
C_Ch = get_C_Ch(self.rho_liquid, self.rho_gas, n)
Y = get_Y(self.d_w, self.d_p, self.beta)
Y_max = get_Y_max(self.rho_gas, self.rho_liquid, Fr_gas, self.H)
# print(Y, Y_max)
if Y >= Y_max:
# 若Y >= Y_max,会导致下一步带入log报错
self.errflag = 1
print("interation error! terminated..")
break
X = get_X(Y, Y_max, Fr_gas, self.H)
# X = get_X_from_Y_Ymax(self.X, Fr_gas, self.H)
phi = get_phi(C_Ch, X)
err_get = abs(qm_gas - self.qm_gas)
self.iter_times += 1
self.C = C
self.n = n
self.C_Ch = C_Ch
self.Y = Y
self.Y_max = Y_max
self.X = X
self.phi = phi
self.qm_gas = qm_gas
# print(qm_gas)
self.X_list.append(self.X)
self.C_list.append(self.C)
self.phi_list.append(self.phi)
self.qm_gas_list.append(self.qm_gas)
# 为了计算不确定度,需要创建多个VenturiMoisture并处理合并
class VenturiMoistureUncertanty:
def __init__(self, d, D, d_p, d_w, p1, kapa, rho_gas, rho_liquid, g=9.81, property="Hydrocarbons",uncertanty=0.1,err=1e-4):
# 传入输入参数
self.d = d
self.D = D
self.d_p = d_p
self.d_w = d_w
self.p1 = p1
self.kapa = kapa
self.rho_gas = rho_gas
self.rho_liquid = rho_liquid
self.g = g
self.uncertanty_rate = uncertanty
self.property = property
self.err = err
# 创建三个VenturiMoisture,后两个为计算管口与喉部差压有不确定度的情况
self.moisture_1 = VenturiMoisture(d, D, d_p, d_w, p1, kapa, rho_gas, rho_liquid, g, property)
self.moisture_2 = VenturiMoisture(d, D, d_p, d_w*(1-self.uncertanty_rate), p1, kapa, rho_gas, rho_liquid, g, property)
self.moisture_3 = VenturiMoisture(d, D, d_p, d_w*(1+self.uncertanty_rate), p1, kapa, rho_gas, rho_liquid, g, property)
# 分别迭代计算
self.moisture_1.iteration(err)
self.moisture_2.iteration(err)
self.moisture_3.iteration(err)
# 获得 C/φ 不确定度
if self.moisture_1.Y / self.moisture_1.Y_max < 0.6:
d_C_phi = 0.04
elif self.moisture_1.Y / self.moisture_1.Y_max < 0.65:
d_C_phi = 0.06
elif self.moisture_1.X <= 0.15:
d_C_phi = 0.03
else:
d_C_phi = 0.025
# 只有全部迭代成功才能计算当压损测量不确定度增加时的气相测量不确定度
if not self.moisture_1.errflag and not self.moisture_2.errflag and not self.moisture_3.errflag:
d_phi_q_C_1 = abs(self.moisture_1.qm_gas - self.moisture_2.qm_gas) / self.moisture_1.qm_gas
d_phi_q_C_2 = abs(self.moisture_1.qm_gas - self.moisture_3.qm_gas) / self.moisture_1.qm_gas
d_phi_q_C = max(d_phi_q_C_1, d_phi_q_C_2)
else:
d_phi_q_C = 0
self.uncertanty_1 = d_C_phi
self.uncertanty_2 = sqrt(d_C_phi * d_C_phi + d_phi_q_C * d_phi_q_C)
def info(self):
print("----------------------------------------")
print("| 输入参数:")
print("| - 喉部直径 d=",self.d,"m")
print("| - 管口直径 D=",self.D,"m")
print("| - 文丘里管前后压损 Δω=",self.d_w,"Pa")
print("| - 管口与喉部差压 Δp=",self.d_p,"Pa")
print("| - 管口压力 p=",self.p1,"Pa")
print("| - 温度 T=",20,"℃")
print("| - 气体等熵指数 κ=",self.kapa)
print("| - 气体密度 ρ_gas=",self.rho_gas,"kg/m^3")
print("| - 液体密度 ρ_liquid=",self.rho_liquid,"kg/m^3")
print("| - 重力加速度 g=",self.g,"m/s^2")
print("----------------------------------------")
if self.moisture_1.errflag:
print("| !!压损范围不合理!!")
else:
print("| - 可膨胀系数 ε = "+str(round(self.moisture_1.epsilon, 5)))
print("| - 气相质量流量精度为:", self.err,",一共迭代", self.moisture_1.iter_times, "次")
print("----------------------------------------")
print("| 计算结果:")
print("| - 气相质量流量 q_m,gas = "+str(round(self.moisture_1.qm_gas, 3))+" kg/s")
print("| - 液相 X = "+str(round(self.moisture_1.X, 4)))
print("| - 流出系数 C = "+str(round(self.moisture_1.C, 4)))
print("| - 虚高参数 φ = "+str(round(self.moisture_1.phi, 4)))
print("----------------------------------------")
if self.moisture_2.errflag or self.moisture_3.errflag:
print("| !!压损测量不确定度范围不合理!!")
else:
print("| - 气相测量不确定度大小为:"+str(round(self.uncertanty_1*100, 3))+" %")
print("| - 当压损测量不确定度增加 "+str(round(self.uncertanty_rate*100, 3))+" % 时,"+"气相测量不确定度大小为:"+str(round(self.uncertanty_2*100, 3))+" %")
print("----------------------------------------")
该代码主要建立两个类,分别完成迭代运算和误差分析,具体内容可看注释。
再新建一个文件名为 test.py 用于调试结果。
import matplotlib.pyplot as plt
from VenturiMoisture import VenturiMoistureUncertanty
# 根据入口参数创建类
############################################################################################
# 注:以下参数均采用国际标准单位
# d: 喉部直径
# D: 管口直径
# d_w: 文丘里管前后压损
# d_p: 管口与喉部差压
# p1: 管口压力
# kapa: 等熵指数
# rho_gas: 气体密度
# rho_liquid: 液体密度
# g: 重力加速度
# property: 湿气类型,包括"Hydrocarbons"碳氢化合物、"normalT_H2O"常温水、"steam"水蒸气中的水
# uncertanty: 压损测量不确定度
# err: 迭代误差,以气相体积流量为准
############################################################################################
moisture = VenturiMoistureUncertanty(d=0.06, D=0.1, d_p=2e5, d_w=4.5e4, p1=6e6, kapa=1.3, rho_gas=50, rho_liquid=800, g=9.81, property="Hydrocarbons", uncertanty=0.1, err=1e-5)
# 输出结果信息
moisture.info()
# 绘制一个迭代过程图
plt.plot(moisture.moisture_1.qm_gas_list)
plt.legend(["$q_{m,gas}$ iteration"])
plt.xlabel("iteration")
plt.ylabel("$q_{m,gas}$(kg/s)")
plt.show()
运行 test.py 可以看到如下输出结果:
----------------------------------------
| 输入参数:
| - 喉部直径 d= 0.06 m
| - 管口直径 D= 0.1 m
| - 文丘里管前后压损 Δω= 45000.0 Pa
| - 管口与喉部差压 Δp= 200000.0 Pa
| - 管口压力 p= 6000000.0 Pa
| - 温度 T= 20 ℃
| - 气体等熵指数 κ= 1.3
| - 气体密度 ρ_gas= 50 kg/m^3
| - 液体密度 ρ_liquid= 800 kg/m^3
| - 重力加速度 g= 9.81 m/s^2
----------------------------------------
| - 可膨胀系数 ε = 0.97692
| - 气体体积流量精度为: 1e-05 ,一共迭代 23 次
----------------------------------------
| 计算结果:
| - 气体体积流量 q_m,gas = 10.741 kg/s
| - 液相 X = 0.1061
| - 流出系数 C = 0.9871
| - 虚高参数 φ = 1.2168
----------------------------------------
| - 气相测量不确定度大小为:4.0 %
| - 当压损测量不确定度增加 10.0 % 时,气相测量不确定度大小为:5.694 %
可以看到气体体积流量的收敛过程: