蒸汽云爆炸模型@蒸汽云爆炸模型
蒸汽云爆炸理论基础
当发生爆炸时,可以用释放相同能量的TNT炸药的质量表示,即TNT当量。其计算公式为:
WTNT =1.8·α·W·QV / QTNT
式中,WTNT—A物质的梯恩梯当量(kg);
α—蒸汽云爆炸的效率因子,取4%;
W—为A物质质量(kg);
QV—为A物质热值(KJ/kg);
QTNT—为TNT的爆炸热,取4520KJ/kg。
(1)死亡半径R1
该区内的人员如缺少防护,则被认为将无例外地蒙受严重伤害或死亡,死亡半径根据以下公式计算:
R1=13.6×(WTNT/1000)0.37
(2)重伤半径R2
该区的人员如缺少防护,则绝大多数人员将遭受严重伤害,极少数人可能死亡或受轻伤。
重伤半径R2根据以下公式计算:
R2=Z·(E/P0)1/3
ΔPS=0.137Z-3+0.119Z-2+0.269Z-1-0.019
ΔPS=44000/P0
其中:P0=101300Pa,解得Z=1.099;E为爆炸总能量(J),E =WTNT×QTNT。
可计算重伤半径R2。
(3)轻伤半径R3
该区内的人员如缺少防护,则绝大多数人员将遭受轻微伤害,少数人将受重伤或平安无事,死亡的可能性极小。
轻伤半径R3根据以下公式计算:
R2=Z·(E/P0)1/3
ΔPS=0.137Z-3+0.119Z-2+0.269Z-1-0.019
ΔPS=17000/P0
其中:P0=101300Pa,解得Z=1.96;E为爆炸总能量(J),E =WTNT×QTNT。
可计算轻伤半径R3。
当发生爆炸时,爆炸产生的冲击波对人体将造成伤害。
(4)爆炸超压
Pi=3.9/Z1.85+0.5/Z
Pi为爆炸超压(MPa),其中Z为爆炸特征长度,计算方法如下:
Z=R/WTNT1/3
通过上面两个公式可知:
当知道某个距离,可以求得该距离下的超压值;
或知道某个超压值时,可以求出该超压值对应的距离。
不同的爆炸波超压对人体的损伤不同。
由于公式有幂函数,手工计算极其复杂,因此通过计算机二分法迭代计算未知量。
蒸汽云爆炸模型实现代码
# 蒸汽云爆炸模型:参数为爆炸物质量(kg)、爆照物的燃烧热(kj/kg),某个距离(m,求超压值,可填0至多个距离)
# 返回值为tnt当量,辐射损伤范围,冲击波损伤范围,某个距离的超压值(若用户输入)
# auth:hui mail:psxhh@outlook.com
def model_ace( wf, qf, *distance):
wtnt = 1.8 * 0.04 * wf * qf / 4520
# 热辐射死亡半径、重伤半径、轻伤半径(m)
def thermal_rad(wtnt):
rad_death = 13.6 * (wtnt / 1000) ** 0.37
rad_severe_wound = 1.089 * ((wtnt * 4520 * 1000 / 101300) ** (1 / 3))
rad_slight_wound = 1.957 * ((wtnt * 4520 * 1000 / 101300) ** (1 / 3))
return round(wtnt, 2), round(rad_death, 2), round(rad_severe_wound,2), round(
rad_slight_wound, 2)
# 炮炸冲击波伤害距离
def shock_wave_rad(wtnt):
solution = []
# 二分法迭代
def dichotomy(pi, left, right):
def dic(dis):
z = dis / wtnt ** (1 / 3)
return 3.9 / z ** 1.85 + 0.5 / z - pi
mid = 0.5 * (left + right)
if right - left > 0.0001:
if dic(left) * dic(mid) < 0:
solution.append('1')
return dichotomy(pi, left, mid)
else:
return dichotomy(pi, mid, right)
else:
# 判断有无解
if len(solution) != 0:
return mid
else:
print('unsolvable')
# 大于r1大部分人死亡距离;r1-r2内脏严重损伤或死亡;r2-r3人员严重伤害;r3-r4人员轻微伤害
r1 = dichotomy(0.1, 0.001, 10 ** 10)
r2 = dichotomy(0.05, 0.001, 10 ** 10)
r3 = dichotomy(0.03, 0.001, 10 ** 10)
r4 = dichotomy(0.02, 0.001, 10 ** 10)
# 判断用户是否输入某个距离,求爆炸超压
if len(distance) != 0:
pi = []
for i in distance:
# 爆炸特征长度
z = i / (wtnt) ** (1 / 3)
# 爆炸超压峰值
result = 3.9 / z ** 1.85 + 0.5 / z
result = round(result, 3)
pi.append(result)
return round(r1, 2), round(r2, 2), round(r3, 2), round(r4,2), pi
else:
return round(r1, 2), round(r2, 2), round(r3, 2), round(r4,2)
r_th=thermal_rad(wtnt)
r_sh=shock_wave_rad(wtnt)
return r_th,r_sh