:瞬态结果与管系载荷——Export Force File 到 CAESAR II / TRIFLEX / ROHR2 / AutoPIPE)
AFT二次开发教程14瞬态结果与管系载荷——Export Force File 到 CAESAR II / TRIFLEX / ROHR2 / AutoPIPE版本与事实声明产品与版本AFT Fathom 15 / AFT Impulse 12当前本篇导出项引用官方Impulse 10帮助页Exporting Force Data、File Menu与官方产品页/示例页正文当前版以官方文档为准。语言/环境Python 3.x标准库。本文目标读完能把瞬态管力导出成应力分析软件可直接消费的载荷文件并说清导给谁、导多少点、用什么单位。所有力数据与数值为示例性建模不代表任何标准规定或真实管系。一句话结论水锤分析的终点是管系应力——AFT Impulse及 xStream在Output 窗口的 File 菜单提供Export Force File可导出CAESAR II / TRIFLEX / ROHR2 / AutoPIPE四种 Force File时间范围、数据点数、力平衡分量与单位均可定制其中CAESAR II 文件的单位只能取lbf或N因为它是 CAESAR II 唯一接受的两种因此批量交付的关键是载荷包目录装配 单位守卫。〇、本篇要解决的认知问题Q1为什么水锤分析的交付物是力文件而不是压力曲线谁在消费它Q2Export Force File在哪、能导给哪些软件四种目标怎么选Q3时间范围、数据点数、力平衡分量、单位这四个定制项各自怎么设Q4为什么CAESAR II 文件的单位只能是lbf或N弄错会怎样Q5管力计算的告警会在哪几个地方出现批跑时怎么收集一、机制解析14.1 为什么终点是力瞬态分析水锤算出来的是压力/流量随时间变化但工程师真正要交付给下游的是管系所受的力压力波在管道里推进 → 管壁、弯头、三通、支吊架受到随时间变化的载荷应力分析软件CAESAR II / TRIFLEX / ROHR2 / AutoPIPE要用这些载荷做动态应力校核所以 AFT 侧的输出不是给水力学工程师看的曲线而是给应力工程师用的载荷文件。官方对瞬态管力的原话要点Impulse 中计算的瞬态管力试图捕捉压力波通过管系时对一系列管所施加的水力载荷并提醒瞬态空化transient cavitation可能引起显著的压力波。这就把整条链路串上了Fathom 稳态 → Impulse 瞬态 → 瞬态管力 → Export Force File → CAESAR II/TRIFLEX/ROHR2/AutoPIPE → 动态应力校核 (第13篇) (特征线法) (不平衡力) (本篇) (下游专业) (交付)14.2 入口与四种目标官方File Menu原文Export Force File - (Output Only)——只有在 Output 窗口里才可用打开 Export Force File 窗口后可选择文件类型官方列出的类型为CAESAR II Force FileTRIFLEX Force FileROHR2 Force FileAutoPIPE亦在支持之列官方产品页Export unbalanced forces to CAESAR II, TRIFLEX, ROHR2, and AutoPIPE。要点这是一个Output Only动作——必须先跑出瞬态结果才能导力文件。批量里这意味着瞬态批跑成功是导力的前置条件。14.3 四个定制项官方Exporting Force Data页原文The time frame of interest,quantity of data points,force balance components, andunitscan be customized.逐一解读定制项含义工程考量时间范围time frame取瞬态的哪一段只取发生最大载荷的时间窗能显著减小文件全时程则更保险数据点数quantity of data points导出多少个时间切片官方示例提示可只含中间数据点点太少会漏掉峰值点太多文件巨大力平衡分量force balance components导哪些力分量按下游软件与校核需求选官方页提到force sets to include… may be individually selected单位units力的单位CAESAR II 文件只能lbf或N硬约束官方在 Impulse 示例Valve Closure with Pipe Forces里的实操描述是在 Output 窗口点 File 菜单选Export Force File并选CAESAR II Force File要包含的力集force sets可单独选择且可以只包含中间数据点或全部窗口会显示所选力集与选项下文件将包含的数据点数。这是一个能提前看到文件规模的设计——导出前看数据点数就能判断文件会不会大到下游读不动。14.4 CAESAR II 的单位硬约束官方原文“the units for CAESAR II files may only be set to lbf or N as these are the only units accepted by CAESAR II.”为什么是硬约束这不是 AFT 的限制而是下游软件的输入契约——CAESAR II 的力文件只吃lbf或N。所以若你习惯用kN、kgf导出时必须换算到N或lbf单位守卫本篇代码 14-1就是防这件事导出前断言目标类型与单位组合合法。这条与铁律 4 同源单位错误不报错、下游静默算错。力单位错一倍以上应力校核结果毫无意义。14.5 管力告警的五个位置官方Warnings For Pipe Force Calculations页列出的告警出现位置Warnings tab of the OutputOutput 的告警页Forces tab of the Graph Results图结果的力页Export Force File window导出力文件窗口Force Definitions pop-up in the Analysis Setup window分析设置里的力定义弹窗Batch Run Status Messages批跑状态消息。工程含义批跑时告警会出现在批跑状态消息里——而官方说过批跑期间的信息在最后一个场景/模型结束时统一显示第 10 篇。所以你的批跑编排要把批跑状态消息也收集起来否则告警会被淹没在滚屏里。这直接影响这次瞬态结果能不能用。注意导力文件窗口自己也会显示告警——所以导出前看一眼窗口是最直接的拦截点。二、完整代码与逐行剖析代码 14-1force_pack.py载荷包装配 单位守卫# -*- coding: utf-8 -*- force_pack.py —— 瞬态载荷包目录装配与导出前单位守卫 1) 守卫按官方约束校验目标软件 × 单位组合CAESAR II 只接受 lbf/N 2) 装配把各场景的 Force File 收进统一目录生成清单与元数据 运行python force_pack.py --selftest importargparseimportjsonimportosimportshutilimportsys# 官方CAESAR II 文件单位只能 lbf 或 N其余目标此处保守留空待探测UNIT_RULES{CAESAR II:{lbf,N},TRIFLEX:None,# 官方未在本页给出单位约束 - 以软件文档/界面为准ROHR2:None,AutoPIPE:None,}TARGETStuple(UNIT_RULES)defguard(target:str,unit:str)-list:导出前单位守卫返回违规说明列表空通过。problems[]iftargetnotinTARGETS:problems.append(f未知目标软件{target}支持{, .join(TARGETS)})returnproblems allowedUNIT_RULES[target]ifallowedisnotNoneandunitnotinallowed:problems.append(f{target}文件单位只能为{sorted(allowed)}当前{unit!r})elifallowedisNone:problems.append(f[待确认]{target}的单位约束未在官方本页给出请以该软件文档/界面为准)returnproblemsdefassemble(files:list,outdir:str,meta:dict)-dict:把 Force File 收进 outdir返回装配报告。os.makedirs(outdir,exist_okTrue)placed[]forfinfiles:ifnotos.path.exists(f):raiseFileNotFoundError(fForce File 不存在{f})dstos.path.join(outdir,os.path.basename(f))shutil.copy2(f,dst)placed.append(os.path.basename(f))manifest{files:placed,count:len(placed),meta:meta}withopen(os.path.join(outdir,manifest.json),w,encodingutf-8)asfh:json.dump(manifest,fh,ensure_asciiFalse,indent2)returnmanifestdefselftest():# 1) 守卫正例/反例assertguard(CAESAR II,N)[],guard(CAESAR II,N)assertguard(CAESAR II,kN),kN 必须被拦# 官方硬约束assertanyway:guard(TRIFLEX,kN),未公开约束应给[待确认]提示assertany(待确认inpforpinanyway)# 2) 装配os.makedirs(selftest_src,exist_okTrue)foriin(1,2):open(fselftest_src/hammer_case{i}.FOR,w).write(dummy force file)manassemble([selftest_src/hammer_case1.FOR,selftest_src/hammer_case2.FOR],selftest_pack,{target:CAESAR II,unit:N,model:demo.imp})assertman[count]2andos.path.exists(selftest_pack/manifest.json)print(SELFTEST OKkN 被守卫生拦TRIFLEX 给出[待确认]装配 2 个力文件并生成 manifest。)defmain():apargparse.ArgumentParser()ap.add_argument(--target,choicesTARGETS,defaultCAESAR II)ap.add_argument(--unit,defaultN)ap.add_argument(--files,help逗号分隔的 Force File 路径)ap.add_argument(--outdir,defaultforce_pack)ap.add_argument(--selftest,actionstore_true)aap.parse_args()ifa.selftest:selftest()return0probsguard(a.target,a.unit)ifprobs:print(单位/目标校验未通过)forpinprobs:print( -,p)return1ifnota.files:ap.error(给出 --files 或 --selftest)manassemble([f.strip()forfina.files.split(,)],a.outdir,{target:a.target,unit:a.unit})print(f已装配{man[count]}个力文件到{a.outdir}/含 manifest.json)return0if__name____main__:sys.exit(main())逐行剖析UNIT_RULES里CAESAR II 用集合{lbf,N}硬编码官方约束其余三种显式设为None——这是诚实表达我不知道。guard()对None给[待确认]提示而不是放行或拒绝把不确定性交给人。guard()返回问题列表而非布尔这样一次能报多条且能被上层汇总进日志。assemble()用shutil.copy2保留元数据把力文件收进统一目录并写manifest.json记录导给谁、什么单位、哪个模型。载荷包必须自带元数据——半年后没人记得那个.FOR是 N 还是 lbf。selftest()用海象运算符anyway : guard(...)顺手断言CAESAR II kN 必须被拦、TRIFLEX 必须出[待确认]。这两条正是本页的两类知识硬约束 vs 未知的代表。装配测试用假力文件写 “dummy force file”因为测的是目录装配与清单逻辑不需要真文件——这让脚本不依赖 AFT 即可自检。代码 14-2collect_warnings.py批跑后收集管力告警# -*- coding: utf-8 -*- collect_warnings.py —— 从批跑状态消息/导出窗口告警文本里收集管力告警 官方列出告警出现于 5 处其中Batch Run Status Messages是批量场景的主收集点。 运行python collect_warnings.py --selftest importsys FORCE_WARN_KEYS[cavitat,force,pipe force,column separation,force balance,vapor]defcollect(text:str)-list:hits[]forlineintext.splitlines():sline.strip()ifsandany(kins.lower()forkinFORCE_WARN_KEYS):hits.append(s)returnhitsdefselftest():demo(Scenario 3 completed in 12.4 s\nWARNING: transient cavitation detected in pipe P-204\nWARNING: pipe force balance includes column separation at 6.2 s\nScenario 4 completed in 11.9 s\n)hitscollect(demo)assertlen(hits)2,hitsassertall(WARNINGinhforhinhits)print(SELFTEST OK从 4 行文本中识别出 2 条管力/空化告警。)if__name____main__:if--selftestinsys.argv:selftest()逐行剖析关键词集合覆盖空化cavitation、液柱分离column separation、管力pipe force、力平衡force balance——这些正是本页关心的现象。返回的是原文行而不是布尔因为告警的**位置信息哪根管、哪个时刻**才是工程师要的东西。别把有用的信息在过滤阶段丢掉。selftest()用一份含 2 条告警的批跑日志验证——模拟的就是批跑状态消息这个真实来源。三、常见报错与排查报错 14-1Export Force File 是灰的点不了。现象File 菜单里该项不可用。根因官方标注它是Output Only——必须先有输出跑出瞬态结果才可用。解法先跑稳态→瞬态批跑场景则确认该场景真的有输出。报错 14-2导出的 CAESAR II 力文件下游读不了或报单位错。现象应力软件导入失败/结果异常。根因CAESAR II 文件单位只能lbf或N用了 kN、kgf 等。解法导出时把单位设为N或lbf代码 14-1 的守卫会拦。报错 14-3力文件大到下游读不动 / 或太小漏掉峰值。现象文件体积与精度两难。根因数据点数选择不当。解法导出窗口会显示所选选项下的数据点数——先看点数再决定通常只取最大载荷时间窗 中间数据点是平衡点。报错 14-4批跑完发现某些场景有管力告警但已经错过处理时机。现象事后才发现警告。根因告警出现在Batch Run Status Messages批跑结束时统一显示滚屏被忽略。解法收集批跑状态消息文本并用代码 14-2 过滤也可在导出力文件窗口导前看一眼告警。报错 14-5多个场景的力文件混在一个文件夹分不清谁是谁。现象文件命名混乱、无法追溯。根因没做载荷包装配与元数据。解法force_pack.py——统一目录 manifest.json记录目标软件、单位、模型、场景。报错 14-6下游应力软件读到了力文件但时间轴对不上。现象载荷相位/峰值位置与 AFT 侧不一致。根因导出的时间范围与数据点数与下游预期不符例如导出时用了仅中间数据点下游却按等间隔全点解读。解法导出前记录time frame 与数据点数随载荷包一并交付写进manifest.json让下游知道这份力文件的采样约定。四、动手练习练习 1单位守卫跑python force_pack.py --selftest。判定输出SELFTEST OK手动把断言目标改成kN自检必须失败证明守卫拦得住的不是假象。练习 2真机导力对一个瞬态结果执行 Output 窗口 → File → Export Force File → CAESAR II Force File。判定记住窗口显示的数据点数导出后用下游软件或文本查看确认单位是 N 或 lbf。练习 3载荷包把 2 个场景的力文件用--files a.FOR,b.FOR --outdir pack装配。判定pack/含 2 个力文件 manifest.jsonmanifest里记录了 target 与 unit。练习 4告警收集把一次批跑的 Status Messages 文本存盘跑collect_warnings.py。判定列出所有含空化/管力的告警行若无告警明确写出本批 0 条。练习 5采样约定对同一瞬态结果用两种数据点数导出力文件。判定比较两份文件的数据点数与峰值说明点数不同峰值是否一致把 time frame 与点数写进manifest.json。五、小结与下一篇预告本篇完成了瞬态交付闭环水锤的终点是管系载荷Export Force FileOutput Only可导CAESAR II / TRIFLEX / ROHR2 / AutoPIPE时间范围、数据点数、力分量、单位四项可定制CAESAR II 文件单位只能lbf或N铁律 4 的邻居条款管力告警出现在五个位置批跑时要去Batch Run Status Messages里收集。你用force_pack.py把力文件升级成了带元数据的载荷包。第 15 篇《边界条件与规格对象参数化Reservoir / Assigned Pressure / Control Valve》我们回到写输入主线讲三类边界对象的参数层级、Special Condition数值映射、单位必须预置铁律 4以及超定/欠定陷阱与Global Edit预填的工程做法。FAQ与第〇节一一对应Q1为什么水锤分析的交付物是力文件A因为瞬态算出的压力/流量随时间变化最终要转成管系所受的随时间变化的载荷交由 CAESAR II、TRIFLEX、ROHR2、AutoPIPE 等应力分析软件做动态应力校核AFT 的瞬态管力试图捕捉压力波通过管系时对一系列管施加的水力载荷空化还会引起显著压力波。Q2Export Force File 在哪、能导给哪些软件A它在 AFT Impulse/xStream 的 Output 窗口的 File 菜单中标记为 Output Only必须先有瞬态输出可导出 CAESAR II Force File、TRIFLEX Force File、ROHR2 Force FileAutoPIPE 亦在支持之列。Q3四个定制项怎么设A时间范围决定取瞬态哪一段只取最大载荷时间窗可减小文件数据点数决定时间切片多少太少漏峰值、太多文件巨大导出窗口会显示文件将包含的数据点数力平衡分量按下游校核需求单独选择单位按目标软件约束设置。Q4为什么 CAESAR II 文件单位只能是 lbf 或 NA因为这是 CAESAR II 唯一接受的两种单位官方原文明示AFT 侧只是遵守下游的输入契约用 kN、kgf 等会导致下游导入失败或结果错误所以导出前应用单位守卫断言目标类型与单位组合合法。Q5管力告警会在哪几处出现A五处——Output 的 Warnings 页、Graph Results 的 Forces 页、Export Force File 窗口、Analysis Setup 中的 Force Definitions 弹窗、以及 Batch Run Status Messages批跑时应收集批跑状态消息文本并过滤出空化/管力相关告警。