1 在线模拟示例
蒸气云爆炸(Vapor Cloud Explosion, VCE)是由于气体或易挥发液体燃料的大量快速泄漏,与周围空气混合形成“预混云”,在某一有限空间遇点火而导致的爆炸.当液化石油气罐体在机械作用、化学作用或热作用下发生破坏导致液化气快速泄漏后与周围空气形成爆炸性混合气云,在遇到延迟点火的情况下被引爆,发生VCE.VCE的破坏作用有爆炸冲击波、热辐射和碎片作用等,其中爆炸冲击波的破坏作用最强,破坏区域最大.常见的冲击波伤害-破坏准则有:超压准则、冲量准则、压力-冲量准则等.本文评价采用超压准则.研究表明,影响VCE行为的主要参数众多,主要有:泄漏物质种类、存储方式、泄漏数量、物质蒸发百分数、气云引燃的可能性、气云引燃前的延迟时间以及爆炸效率等参数。
2 TNT当量模型
TNT模型把物质爆炸的破坏作用转化成 TNT爆炸的破坏作用。 虽然多年来模型经过大量研 究,但是由于自身限制。 此方法现仅普遍用于较 为简单的蒸气云爆炸模拟。 TNT模型在运用中通 过公式计算得出等量的TNT 的量,进而算出数 值,进行评估。 评估结果可用于危险分区,也可以 用于进一步计算伤害区域内人员的伤害程度,破 坏范围内物体损坏程度和直接经济损失。
当发生爆炸时,可以用释放相同能量的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
通过上面两个公式可知:
当知道某个距离,可以求得该距离下的超压值;
或知道某个超压值时,可以求出该超压值对应的距离。
不同的爆炸波超压对人体的损伤不同。
3 TNO多能法
TNO多能法是目前模拟预测蒸汽云爆炸的常用方法,是荷兰TNO实验室于1985年在大量的试验和数值研究基础上提出并逐步完善起来的.TNO多能法属于-维数值模型,在TNO模型基础上进行改进,综合考虑了湍流加速、局部约束、气体火星等各种因素,是一个分析蒸(云爆炸的原则、方法模型假设蒸气云为半球形,中心点火,火焰以恒定速度传播,然后计算不同燃烧速度下的蒸气云爆炸,获得-组爆炸强度曲线经大量实验结果验证和修正,比较接近事实。多能法的计算步骤一般包括: ①识别潜在的强烈爆炸子源:②确定该子源的能量:③确定初始爆炸烈度:④确定伤害半径" 。
下边给一个Python解方程参考(2021-07-31_0.137 0.119 死亡半径_psxhh的博客-CSDN博客):
# 蒸汽云爆炸模型:参数为爆炸物质量(kg)、爆照物的燃烧热(kj/kg),某个距离(m,求超压值,可填0至多个距离)
# 返回值为tnt当量,辐射损伤范围,冲击波损伤范围,某个距离的超压值(若用户输入)
# auth:hui mail:[email protected]
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
package com.planet.engine.bang.param;
import lombok.Data;
/**
* 业务参数
*/
@Data
public class BangBusParam {
/**
* 储物体积,m3
*/
private double volume = 100D;
/**
* 储物密度,kg/m3
*/
private double density = 450D;
/**
* 充装系数
*/
private double fillingRatio = 0.9D;
/**
* TNT爆炸热,kj/kg
*/
private double hTnt = 4520D;
/**
* 目标材料爆炸热,kj/kg
*/
private double hChem = 55600D;
/**
* 死亡半径超压,Pa
*/
private double ps0 = 100000D;
/**
* 重伤半径超压,Pa
*/
private double ps1 = 44000D;
/**
* 轻伤半径超压,Pa
*/
private double ps2 = 17000D;
/**
* 财产损失半径超压,Pa
*/
private double ps3 = 13800D;
}