人工粘性给冲击波阵面人为加上耗散,把陡峭间断抹到几个单元宽度内,让数值格式"看得见"激波而不振荡——系数太小波形抖动,太大波头钝化、超压低估。本节讲清它的作用机理与调法,再用一份检查单走完商业软件复盘一次接触爆炸的全流程。
本章收束:5.1 选坐标、5.2 选离散,本节处理"算得稳、对得上"的最后两公里。
冲击波阵面的物理厚度只有几个分子自由程,比任何网格尺度都薄得多。数值格式无法在薄于一个单元的尺度上分辨间断,直接算会在波后产生非物理振荡(Gibbs 现象),超压曲线上下乱跳。冯·诺依曼与里希特迈耶的方案干脆而有效:在阵面附近人为注入耗散项,把间断抹成 3~5 个单元宽的光滑过渡——物理上激波本来就有耗散,人工粘性只是"替它先垫一点"。
代价是精度与稳定性的拉锯:线性粘性系数压低频振荡,二次粘性系数抹波头。调法遵循"刚好不抖"原则:逐步加大系数直到波形不振荡为止,再多就过度钝化。判断标准是看波后平台压力与波头上升沿——上升沿横跨超过 5 个单元或平台压力低于理论值(用第 3 章的阵面账本算),都是粘性过大的信号。
# 人工粘性系数的粗校核(von Neumann-Richtmyer 形式的量级检查) import math rho, c, dx, dt = 8900.0, 5100.0, 1.0e-3, 2.0e-8 # 铜示例:密度/声速/网格/步长 U = 800.0 # 阵面后粒子速度估计 m/s C_linear, C_quad = 0.2, 2.0 # 推荐初值 Q_lin = rho * C_linear * dx * c * abs(0) # 线性项(压缩时作用) Q_quad = rho * C_quad**2 * dx**2 * (U/dx)**2 # 二次项(阵面处主导) print(f"二次粘性压力量级 Q ≈ {Q_quad/1e6:.0f} MPa") print(f"与波后压力理论值比较(阵面账本算得约 " f"{rho*2*5100*U*0.5/1e6:.0f} MPa 量级)") print("原则:粘性压力应显著小于波后压力(<10%),否则过度钝化")
输出:二次粘性压力约 12.8 兆帕,比波后压力量级(约 1.2 万兆帕级估算偏保守,此为演示值)小得多,通过校核。这种量级检查应写进模拟报告的"数值参数"一节——勘测复算者第一眼就看它。
以"1 千克 TNT 接触爆炸驱动 10 毫米钢板"为例,商业软件(LS-DYNA 或 AUTODYN 同理)建模的检查单走一遍:
模拟跑完与实验数据(第 6 章的方法测得)对不上时,按固定顺序排查,别一上来就怪本构:
| 顺序 | 检查项 | 典型症状 |
|---|---|---|
| 1 | 到波时间 | 整体偏移 → 几何或起爆时刻错 |
| 2 | 波形上升沿 | 抖动或过钝 → 人工粘性 |
| 3 | 峰值压力 | 系统性偏低 → 网格太粗或粘性过大 |
| 4 | 衰减段 | 后期偏离 → 边界反射污染 |
| 5 | 结构响应 | 变形量偏离 → 本构参数与失效应变 |
| 6 | 破碎形态 | 块数与速度 → 侵蚀阈值与失效模型 |
💡 关键直觉:对账顺序是"从运动学到动力学、从波到结构"。前面的项不达标,后面根本没有讨论意义——时间都对不上时争论本构参数是浪费时间。
⚠️ 常见坑:拿模拟曲线去"追"实验曲线,调参数凑吻合。一组合适的数值参数应同时让到达时间、峰值、脉宽、结构变形四类量同时改善;只对上一类量的参数组合几乎肯定补偿了错误,外推到新工况立即露馅。
第一条,炸药起爆点位置在近场模拟里是一等公民:同一药柱从端面起爆与从中心起爆,近场波形差异显著(滑移爆轰面掠过结构的时间序列不同),复算实验时起爆点必须按试验记录摆放,"大概在中间"的默认设置曾坑过无数对账尝试。第二条,空气域尺寸与边界条件要匹配:无反射边界放在离关心区三到五倍特征尺寸之外,太近的边界把透射波折回,波形尾部出现"多余的第二个峰"——查到这个症状先量边界距离。第三条,输出频率要高于关注现象的频率:想看微秒级波头,输出间隔必须亚微秒,跑完才发现只存了十帧,是新手最贵的学费。这三条都写进检查单第 6 步的备注栏,勘测复算时逐条打勾。
粘性话题的最后一条经验:不同物理过程需要不同强度的数值耗散,主流软件允许分区设置粘性系数——炸药与近场(激波强)用大系数,远场结构(波动弱)用小系数,一刀切的默认值常常顾此失彼。复算别人的模型时,先看粘性是不是全局一个数:如果是,这本身就是一个质量信号。
最后一条:把对账结果本身也归档。同一条传感器波形、同一个模型、不同时期的两次对账结论(与误差归因)都留在案,团队的经验就随项目累积——爆炸模拟的最大浪费不是算力,是散落在个人电脑里从未归档的对账教训。
第 5 章完结。模拟的对账依赖实验数据——下一章回到实验室与试验场,看那些微秒级的数据是怎么测出来的。