简介:这份资料是DNV PHAST工艺危险源分析软件的完整讲解PPT,面向石油天然气、化工、能源等领域的工艺安全工程师、风险评价人员及高校相关专业师生,帮助其系统掌握该软件的原理与操作。PHAST全称Process Hazard Analysis Software Tool,通过数学模型模拟预测油气安全事故后果,涵盖闪火、喷火、池火、火球、爆炸及有毒气体扩散六类分析场景。资料从窗体结构讲起,依次介绍主操作菜单、分析树窗口、工作窗口与日志窗口,并深入建模流程:选择分析模型、输入泄漏量与系统隔离时间等参数、添加物料与混合组分(软件内置61种物质及理化特性)、设置容器边界与防堤、选择燃烧与爆炸类型,直至读取热辐射通量、爆炸下限等结果。包内共1个PPT文件,约10MB,已有563人学习。内容覆盖后果情景选择、室内毒性计算、液气分离器点火装置热辐射影响范围等实操要点,适合作为入门培训与日常查阅的参考材料。
1. 一份 PPT 资料为什么值得当成工程手册来读
第一次拿到「dnv-phast-软件讲解完整版资料.ppt」这个标题的人,多半会愣一下:一份 PPT,能讲出什么工程深度?但如果你正在做化工、石化、能源类项目的定量风险评估(QRA),或者被要求出具泄漏后果、爆炸影响、毒性扩散的合规报告,就会明白这类资料的价值不在排版,而在它把一整套计算流程压缩成了可复现的步骤。DNV 的 PHAST 系列工具(含 SAFETI)长期被用于后果模拟与风险分析,而这份讲解资料本质上是把「建模—算例—结果解读」这条链路讲了一遍。它适合三类人:刚接手 QRA 报告的新人、需要复核第三方结果的审核方、以及想把后果模拟接入内部流程的工艺安全工程师。下面我不复述 PPT 页面,而是把它背后的操作逻辑拆成能照着做的路径。
2. 后果模拟的建模底座:从物性到场景怎么定
2.1 为什么物性数据决定了后面所有结果的可信度
后果模拟的第一道分水岭不是选模型,而是物性。PHAST 内部依赖组分数据库,但很多项目介质是混合物或含少量杂质,直接选纯组分会导致饱和蒸气压、沸点、燃烧热偏差,进而让泄漏速率和扩散距离整体偏移。常见做法是:先确认介质的主要组分与摩尔分数,再决定用内置组分还是自定义混合物。如果介质里有腐蚀性杂质但浓度极低,可以忽略;如果杂质影响相态(比如含水导致两相流),就必须建进去。
我一般会先做一次「物性体检」:把关键组分在操作温度下的饱和蒸气压、密度、黏度拉出来,和工艺包或化验单对一遍。差 5% 以内可以接受,差 20% 以上就要查是不是选错了同分异构体或温度基准。这一步在 PPT 里往往只有一页,但它是后面所有算例的地基。
2.2 泄漏场景的三个必设参数:孔径、压力、持续时间
场景定义是后果模拟的核心。PHAST 里通常要设泄漏孔径、上游压力和泄漏持续时间。孔径不是随便选,常见做法是按工艺管道直径的 10%、25%、50% 或全断裂来分档,对应小孔、中孔、大孔和灾难性破裂。上游压力取操作压力还是设计压力,取决于你要评估的是正常工况还是事故工况。持续时间则决定是连续泄漏还是瞬时释放。
下面是一段用 Python 做场景参数批量整理的示例,方便你把几十个场景一次性生成成表格,再导入模拟流程:
# 场景参数批量生成:按孔径比例和压力档位组合 import pandas as pd # 基础工况:管道内径、操作压力、设计压力 base = { "pipe_id_mm": 200, # 管道内径,单位 mm "op_pressure_barg": 15.0, # 操作压力,表压 bar "design_pressure_barg": 22.0 # 设计压力,表压 bar } # 孔径比例档位:小孔、中孔、大孔、全断裂 hole_ratios = [0.1, 0.25, 0.5, 1.0] # 压力选取:操作压力与设计压力 pressure_keys = ["op_pressure_barg", "design_pressure_barg"] rows = [] for ratio in hole_ratios: for pk in pressure_keys: rows.append({ "hole_ratio": ratio, "hole_dia_mm": round(base["pipe_id_mm"] * ratio, 1), "pressure_barg": base[pk], "pressure_type": pk }) df = pd.DataFrame(rows) print(df.to_string(index=False))这段代码的逻辑很直白:把孔径比例和压力来源做笛卡尔积,生成 8 个基础场景。hole_ratio是孔径占管径的比例,hole_dia_mm是换算后的孔径,pressure_barg是实际参与计算的表压。参数说明上,pipe_id_mm要填管道实际内径而不是公称直径;op_pressure_barg和design_pressure_barg的单位必须统一,PHAST 里通常用 bar 或 Pa,导入前确认单位制。跑完这张表,你就能拿着它逐条建场景,而不是在界面里反复手填。
2.3 扩散模型选型:中性浮力、重气还是浮力羽流
PHAST 会根据介质密度和大气条件自动选模型,但你可以干预。重气扩散(如液化石油气、氯气)在近场会贴地扩散,中性浮力模型会低估下风向浓度。判断依据是泄漏后混合物的相对密度:大于 1.1 按重气处理,0.9 到 1.1 之间按中性,小于 0.9 按浮力羽流。常见做法是先用默认模型跑一遍,再看结果里的云团高度和浓度等值线,如果云团明显贴地而模型选的是中性,就要手动切重气模型。
大气稳定度也影响很大。D 类稳定度(中性)是默认值,但夜间低风速场景往往用 F 类,扩散更慢、浓度更高。如果你做的是最坏可信场景,通常选 F 类和低风速组合。这一步在 PPT 里可能只有一张表,但参数选错,后面所有距离都不可信。
3. 从建模到出图:一次完整算例的落地步骤
3.1 新建算例前必须确认的四个输入项
在 PHAST 里新建算例之前,我会先确认四件事:介质组分、场景类型(泄漏/闪蒸/池火/爆炸)、大气条件、以及输出要哪些结果。介质组分决定物性,场景类型决定用哪套模型,大气条件影响扩散,输出决定后处理工作量。很多新人一上来就点「新建」,结果算到一半发现介质选错,只能重来。
具体操作上,先建一个「物料」条目,把组分和比例填进去;再建「场景」条目,选泄漏类型和孔径;然后设「大气」条目,填温度、风速、稳定度;最后在「结果」里勾选浓度等值线、热辐射阈值、超压阈值。这四步的顺序不要乱,因为后面的条目会引用前面的数据。
3.2 用命令行批量跑算例的可行路径
PHAST 有图形界面,但如果你要跑几十个场景,手点不现实。常见做法是用它的批处理接口或脚本调用。下面是一段用 Python 调用外部计算流程的示意,重点在参数传递和结果收集:
# 批量调用后果模拟流程的示意:参数写入与结果回收 import subprocess import json import os # 场景列表:每个场景一个字典 scenarios = [ {"name": "small_leak_op", "hole_mm": 20, "pressure_barg": 15.0, "stability": "D"}, {"name": "large_leak_design", "hole_mm": 100, "pressure_barg": 22.0, "stability": "F"}, ] work_dir = "./phast_runs" os.makedirs(work_dir, exist_ok=True) for sc in scenarios: # 把场景参数写成输入文件,具体格式按工具要求调整 input_file = os.path.join(work_dir, f"{sc['name']}.json") with open(input_file, "w", encoding="utf-8") as f: json.dump(sc, f, ensure_ascii=False, indent=2) # 调用计算程序,这里用占位命令表示实际可执行文件 # 实际使用时替换为工具提供的命令行入口 cmd = ["phast_cli", "--input", input_file, "--output", os.path.join(work_dir, sc["name"])] result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode != 0: print(f"场景 {sc['name']} 计算失败:{result.stderr}") else: print(f"场景 {sc['name']} 计算完成")这段代码的关键点是:把每个场景的参数写成独立输入文件,再逐个调用计算程序,最后检查返回码。hole_mm是孔径,pressure_barg是表压,stability是大气稳定度。实际使用时,phast_cli要替换成工具真实提供的命令行入口或批处理脚本;输入文件的格式也要按工具要求调整,这里用 JSON 只是示意。逻辑说明:批量跑的核心是「参数外置 + 循环调用 + 失败捕获」,这样你才能在一夜之间跑完几十个场景,而不是守在电脑前点鼠标。
3.3 结果解读:浓度等值线、热辐射阈值和超压距离
算完之后,结果通常以等值线图、距离表和曲线图呈现。浓度等值线要看的是下风向最大距离和云团宽度;热辐射阈值一般关注 4 kW/m²、12.5 kW/m²、37.5 kW/m² 这几档,对应不同伤害程度;超压阈值关注 0.02 bar、0.1 bar、0.3 bar 等。解读时不要只看最大距离,还要看达到阈值的时间窗口,因为应急响应需要知道「多久之后到达」。
常见的一个误区是拿不同场景的最大距离直接比较,却忽略了大气条件和孔径的差异。正确做法是固定其他变量,只变一个参数,看结果怎么变。比如固定孔径和压力,只变稳定度,你就能看出夜间场景比白天场景远多少。这种对比才是报告里真正有说服力的部分。
4. 避坑与排查:五个让结果翻车的细节
4.1 现象:泄漏速率算出来比理论值大一个量级
原因通常是孔径单位填错,把毫米当成米,或者把直径当半径。解决方法是回到输入界面,确认孔径单位是 mm 还是 m,并检查是否用了半径。PHAST 里一般填直径,但有些模板会写半径,这个坑我踩过不止一次。
4.2 现象:扩散距离明显偏短,云团消失太快
原因可能是大气稳定度选成了 D 类而实际是 F 类,或者风速填得过高。解决方法是查项目所在地的气象数据,确认最坏场景用的稳定度和风速组合。如果做的是保守评估,通常选 F 类和 1.5 m/s 左右的风速。
4.3 现象:池火的热辐射结果和手算差很多
原因可能是池面积设成了泄漏面积而不是液池扩展后的面积,或者燃烧热用了纯组分数据而实际是混合物。解决方法是检查池火模型里的池直径和燃烧速率,必要时手动输入液池扩展后的面积。混合物燃烧热要按摩尔分数加权。
4.4 现象:批量跑算例时部分场景没有输出
原因可能是输入文件里某个参数缺失,或者输出路径不存在。解决方法是先跑一个场景确认流程通,再批量跑;每个场景跑完后检查返回码和输出目录。上面代码里的returncode检查就是干这个的。
4.5 现象:结果图里的等值线看起来正常,但报告里被审核方质疑
原因通常是没写清楚模型版本、物性来源和大气条件。解决方法是建一个「算例说明」页,把介质组分、模型选择、关键参数和假设都列出来。审核方质疑的往往不是结果本身,而是结果背后的假设有没有说清。
5. 把 PPT 变成可复用模板:参数表与校核习惯
一份讲解资料最大的价值,是让你能把它变成自己的模板。我一般会做三件事:第一,把常用介质的物性整理成一张表,包括饱和蒸气压、密度、燃烧热和毒性阈值,下次建算例直接查;第二,把场景参数做成 Excel 或 CSV 模板,孔径、压力、稳定度、风速各一列,批量生成输入;第三,建一个「校核清单」,每次出结果前逐条打勾。
下面这张表是我常用的场景参数模板结构,你可以直接照着建:
| 字段名 | 含义 | 单位 | 示例值 |
|---|---|---|---|
| scenario_id | 场景编号 | 无 | S-001 |
| medium | 介质名称 | 无 | 液化石油气 |
| hole_dia_mm | 泄漏孔径 | mm | 25 |
| pressure_barg | 上游压力 | bar | 15 |
| temperature_c | 介质温度 | ℃ | 40 |
| stability | 大气稳定度 | 无 | F |
| wind_speed_ms | 风速 | m/s | 1.5 |
| output_type | 输出类型 | 无 | 浓度等值线 |
建好这张表之后,每次新项目只需要改几列,而不是从头填界面。校核清单我通常包括:物性是否核对、孔径单位是否正确、稳定度是否符合最坏场景、输出阈值是否齐全、结果是否做了单变量对比。这五条看起来简单,但能挡掉大部分低级错误。
还有一个习惯:每次算完,把关键结果(最大距离、阈值时间)记到一个汇总表里,按场景编号排序。这样下次做类似项目,你能快速判断新结果是否合理。如果某个场景的距离突然比历史同类场景大很多,先别急着写报告,回去查输入。这个习惯帮我省过很多后悔药。
最后说一个进阶技巧:把 PHAST 的结果导出成结构化数据,再用脚本做敏感性分析。比如固定孔径,把风速从 1 m/s 到 5 m/s 分五档跑一遍,画出距离随风速的变化曲线。这种图在报告里比单点结果更有说服力,也能帮你快速找到最敏感的参数。我自己的做法是先用模板批量跑,再用 Python 读结果文件做汇总,整个过程从建场景到出图控制在半天以内。希望帮到你。
本文还有配套的精品资源,点击获取