尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hypermesh+LS-DYNA多次爆破岩体损伤累积仿真全流程解析

Hypermesh+LS-DYNA多次爆破岩体损伤累积仿真全流程解析 爆破冲击下的岩体损伤不是一次算完就结束的。实际工程里经常是一排炮孔、分段起爆前后几炮的振动波叠加在一起岩石内部裂隙不断扩展强度逐渐下降。要把这个全过程算出来一个常见组合是 Hypermesh 新界面做前处理、LS-DYNA 做动力求解目标就是得到岩体在多次爆破全时段里的振动时程和损伤累积响应。这篇文章会把这个流程拆开讲单位制怎么统一、材料模型怎么选、HyperMesh 新界面里网格怎么处理、多次起爆怎么设置、最后怎么判断结果真的对。适合刚接手爆破动力仿真、或者想做多次爆破累积损伤研究的人。这类仿真最容易被低估的是“多次”两个字。单次爆破算出来是脆性破坏加振动衰减多次爆破则要回答另一个问题上一炮留下的损伤区会不会让下一炮的振动传播得更远、破坏范围更大。这个问题的本质是材料状态继承而不是简单地把两次计算结果堆在一起。1. 先判断这套多爆破振动损伤仿真到底要算什么1.1 多次爆破和单次爆破的本质区别单次爆破仿真最常见的输出是爆腔附近的破坏范围、自由面上的振动速度曲线、以及有没有出现飞石或崩落。这些结果对一个炮孔、一个起爆时刻基本够用。但工程里真正出现的情况是多个炮孔按延迟起爆前后两个炮的应力波会在岩体内叠加前一个炮引起的裂纹还没稳定后一个炮就打进来了。这时候岩体已经不是一个完整连续体而是一个带着损伤场、波阻抗发生变化的新介质。所以“多次爆破岩体全时域振动损伤累积响应”这个题目核心是三个问题第一炮产生的损伤场长什么样范围多大。第二炮在这个损伤场基础上继续传播时应力波衰减规律被改成了什么样。多炮之后岩体里哪些区域已经进入临界损伤状态哪些区域还在弹性范围内。如果只是把三次爆破分别建三个模型单独算再用后处理叠加这种做法在力学上是不严格的。因为第二次爆破的入射波遇到的是第一次爆破后的材料状态不是初始状态。真正合理的做法必须在同一个模型里保留前一阶段的状态变量或者通过重启动把应力、损伤、塑性应变一起带过去。1.2 为什么选 Hypermesh 新界面加 LS-DYNAHypermesh 在这个领域的老本行是网格。爆破模型通常有炸药区、空气区、岩体近区和远区这几个区域的网格密度差异很大炮孔附近可能要加密到厘米级远区可以用几十厘米甚至更大的网格。Hypermesh 对几何清理、单元质量控制和分区管理做得比较成熟所以很多人愿意用它做前处理。新界面主要指的是默认开启的 Ribbon 风格界面。和经典界面相比面板入口变了右键菜单也更集中。第一次从旧界面切过来的人最明显的感觉是找不到 F10 之类的旧面板。实际用下来新界面的网格质量检查、显示控制和模型浏览器都集中在顶部和右侧习惯之后处理复杂三维模型的效率反而不低。LS-DYNA 负责的是求解。它是显式动力学求解器计算冲击、爆炸、碰撞这类短时强非线性问题很有优势。爆破岩体问题里既有炸药高应变率响应又有岩体拉压损伤还有振动波在远区传播正好在 LS-DYNA 能覆盖的范围里。1.3 值得关注的可交付指标做这类项目验收时不能只说“算完了”。我一般会列出这几项结果来判断流程是否完整岩体损伤云图能看到每次爆破后损伤区的扩展。监测点振动时程包括加速度、速度、峰值振动速度 PPV。多个炮孔不同延迟时间下波的叠加规律。累计损伤指标随爆破次数变化的数据可以直接画成曲线。最终稳定性判断比如声速下降率、损伤变量超过阈值的单元比例。如果这些指标都没有提前规划好后面后处理会非常被动。2. 前置条件单位制、材料模型和网格底线2.1 单位制统一材料参数才有意义爆破动力仿真里最常见的混乱来源就是单位制。Hypermesh 本身不做物理量换算你输入 1 就是 1它只是一个数字。LS-DYNA 关键字里也没有全局单位系统所有参数必须由你自己组成一套自洽单位。爆破类题目最常见的有三套单位制如下表所示单位制长度时间质量密度力应力/压力速度mm-ms-kgmmmskgkg/mm³kNGPamm/msm-s-kgmskgkg/m³NPam/scm-g-µscmµsgg/cm³1e7 NMbarcm/µs以 mm-ms-kg 为例密度要写成 kg/mm³。岩石密度 2700 kg/m³ 要写成 2.7e-6炸药密度 1630 kg/m³ 要写成 1.63e-6。弹性模量 30 GPa 直接写 30屈服应力 60 MPa 要写 0.06。很多人第一次算爆破模型几何和网格都对结果应力曲线差了三个数量级基本都是单位制没有统一。还有一点要特别注意Hypermesh 的 Materials 面板里单位是在材料卡片里体现的不是单独有一个“单位设置”选项。你选了 mm-ms-kg 作为约定那么所有材料参数、所有边界条件、所有时间参数都要按这个约定填。换单位制时不是简单改一个下拉框而是把所有参数重新换算一遍。注意开始建模前先决定单位制然后写在一张纸上贴显示器旁边。后面填任何材料数据之前都先问一句这个数字在当前单位制下合理吗2.2 岩体、炸药、空气材料怎么选爆破岩体仿真里的材料主要分三块岩体、炸药、空气。岩体材料的选择决定了损伤能不能被算出来。如果只算振动响应可以用弹性材料或者简单弹塑性材料如果要算损伤累积就必须用带损伤变量的材料模型。常见选择如下表材料模型关键词特点适用场景塑性随动模型MAT_003参数少有应变率选项但没有明确损伤变量初期验证、简单围岩、不考虑裂纹伪张量帽盖模型MAT_016能描述静水压力下的体积屈服岩土介质偏重于压剪响应JHC 模型MAT_111高应变率下强度增强带损伤变量 D岩石和混凝土爆破很常用CSCM 模型MAT_159自带损伤软化和应变率影响混凝土、岩体的压缩和拉伸破坏RHT 模型MAT_272抗压抗拉分开描述损伤累积清晰岩石爆破适合多次累积损伤需要说明的是以上每种模型都有一大堆参数原始材料不会直接给你一套通用值。常见做法是从文献或者材料手册取初始参数再用单轴压缩、动态拉伸、SHPB 之类的试验数据标定。如果项目周期短可以先用 MAT_111 或 MAT_272 的参数样例跑通流程再逐步替换成标定值。炸药材料最经典的是 MAT_HIGH_EXPLOSIVE_BURN 加 JWL 状态方程。JWL 模型用 A、B、R1、R2、ω 这几个参数描述爆轰产物压力-体积关系是爆破仿真里最常用的组合。以 TNT 常见参数为例在 mm-ms-kg 单位制下密度大概在 1.63e-6 kg/mm³ 量级爆速在 6.9 mm/ms 量级JWL 参数 A 的量级在 370 左右B 在 3 左右。这里必须强调这只是文献里的常见量级参考实际参数要以你用的炸药型号和试验标定为准。空气通常用 MAT_NULL 加线性多项式状态方程或者直接采用 GRUNEISEN 状态方程模拟。空气部分网格要覆盖爆破冲击波传播的主要空间密度按 1.29e-9 kg/mm³ 量级给初始比内能按单位制换算。2.3 网格质量要求和新界面检查入口爆破模型里网格不是越细越好。炮孔附近要细因为压力梯度大单元太粗会把峰值压力抹平远区可以粗因为主要关心的是波动传播单元尺寸要满足最小波长有足够采样点。工程上常按一个波长至少 10 到 15 个单元来估算具体可以结合岩石波速和主要关注频率算。Hypermesh 新界面里网格质量检查入口一般集中在顶部 Mesh 菜单下的 Check 相关面板或者通过 Quality Index 面板查看质量分布直方图。检查三维单元时重点看这几个指标Jacobian反映单元畸变程度。Aspect长宽比四面体单元太扁就会导致时步过小。Warpage翘曲度六面体单元容易出问题。Tet Collapse四面体塌陷度直接影响小尺寸单元质量。Min/Max Angle角度越小越容易引起负体积。我一般会先看直方图整体分布再单独查看落在不合格区间的单元而不是只看一个平均值。爆破分析最怕局部几个畸变单元在爆炸压力下失真因为显式计算里一个坏单元就可能让时间步长骤降甚至导致计算中止。3. Hypermesh 新界面里的建模、网格与显示坑3.1 几何导入、清理和分区很多爆破模型是从 CAD 文件开始导入的。导入之后第一件事不是急着画网格而是做几何清理。炮孔、临空面、台阶边界这些特征要保留但导入时产生的小圆角、短边、重复面一定要清理掉否则会生成大量小碎单元。在 Hypermesh 新界面里几何处理主要在 Geometry 菜单下常见操作用 Auto Cleanup 或者 Defeature。处理完几何之后我建议把模型分成几个 Component比如炸药区、空气区、近区岩体、远区岩体。分区的目的有两个一是不同区域使用不同网格尺寸二是方便后面定义 PART 和材料属性。如果不分区后面给 LS-DYNA 关键字时基本没法下手。3.2 四面体还是六面体网格尺寸怎么定爆破近区通常用自适应精度更好的网格。如果几何复杂六面体很难画可以考虑四面体。四面体的优点是能适应复杂炮孔形状缺点是单元数量大刚度偏硬而且同样尺寸下临界时间步可能比六面体更受限制。如果几何相对规整比如单个圆柱炮孔加规则岩土体用六面体或者五面体过渡单元数量更少波形传播也更干净。我的建议是低配置机器或者初学阶段先用四面体把流程跑通后面要追求精度和效率再考虑用 Solid Map 做六面体分区。网格尺寸上炮孔近区、炸药区和空气区要明显细一格。比如近区单元取炮孔半径的 1/4 到 1/3远区逐渐放大。不要一上来就把整个模型统一加密那样计算量会爆炸而且很多加密单元其实没参与关键响应。3.3 节点不显示、小球看不见怎么处理很多人在 Hypermesh 里会遇到一个问题明明能看到网格但节点不显示或者节点小球全部消失。这通常是显示设置问题不是模型坏了。新界面里可以先看显示控制面板检查节点显示开关有没有打开。如果节点被隐藏了可以清除隐或者用快捷键重新显示。另一个常见原因是当前所在的 Component 被关闭了显示只显示单元但不显示节点支座。还有可能是图形显示模式的关系比如某些渲染模式下节点显示被弱化。可以在显示选项里把节点大小调大强制用显示球表示节点。如果节点能显示但选不中大概率是选择过滤器被设成了单元而当前应该选节点。把过滤器切回节点即可。这些都是界面操作层面的问题不要急着重装软件。4. LS-DYNA 关键字组织炸药、岩体、边界和起爆时序4.1 最小关键字骨架Hypermesh 前处理之后导出的是包含节点、单元、材料、边界和输出控制的关键字文件。即使你接触得不多也建议至少能看懂最小骨架因为很多问题要回到关键字文件里才能确认。一个比较典型的关键字组织如下*KEYWORD $ $ 岩体 PART 和材料 *MAT_PLASTIC_KINEMATIC $ MID RO E PR SIGY ETAN BETA 1 2.70E-06 30.0 0.22 0.06 1.0 0.0 $ $ 炸药 PART 和材料 *MAT_HIGH_EXPLOSIVE_BURN $ MID RO D PCJ BETA 2 1.63E-06 6.93 27.0 0.0 $ $ 炸药 JWL 状态方程 *EOS_JWL $ EOSID A B R1 R2 OMEG E0 V0 2 3.74E02 3.23E00 4.15 0.95 0.35 7.00E00 1.00 $ *INITIAL_DETONATION $ PID X Y Z LT 2 0.00 0.00 0.00 0.00上面这些参数只是为了说明量级并不是可以直接抄的通用参数。每个材料参数都要根据你的炸药型号、岩石类型、单位制重新确认。PCJ 是爆轰压力BETA 默认给 0 表示自动起爆LT 是起爆时间。4.2 多次起爆用延迟时间控制多次爆破和单次爆破在关键字层面的核心差异是起爆时序。在 LS-DYNA 里可以通过多条 *INITIAL_DETONATION 卡片给不同炸药 PART 指定不同起爆时间和起爆位置。比如第一炮在 t0 起爆第二炮延迟 25 ms 起爆可以在 mm-ms 单位制下写 25.0。*INITIAL_DETONATION $ PID X Y Z LT 2 0.00 0.00 0.00 0.00 3 2.50 0.00 0.00 25.0这种方法的好处是一次求解就能看到整个时间域里的振动叠加和损伤累积。岩体材料模型里的损伤变量会自然地从前一炮延续到后一炮不需要手动处理。需要注意的是实际爆破设计中延迟时间通常根据孔距、岩性、爆破目的来定可能是十几毫秒也可能是几十毫秒。你可以先按工程参数设置再对比延迟时间变化对振动峰值和损伤范围的影响。4.3 透射边界、阻尼和时步控制实际岩体是无限域模型只能截取一部分。截断边界上如果直接设固定约束反射波会把结果弄得一团糟。LS-DYNA 里常用非反射边界来消除这种人工反射*BOUNDARY_NON_REFLECTING $ SSID 1这里 SSID 是施加非反射条件的 segment set通常是模型的底面和侧面顶面按临空面保留。施加时要注意非反射边界不是万能的它主要针对体波衰减有效对表面波和近场破坏区会有一定误差。所以模型截取范围要足够大让破坏区和关注区离边界有一定距离。阻尼对全时域振动响应影响很大。岩石在振动过程中有能量耗散如果不加阻尼振动曲线会衰减过慢甚至持续振荡。LS-DYNA 里可以用 *DAMPING_GLOBAL 或 *DAMPING_PART_GLOBAL 设置与频率相关的阻尼。岩体阻尼比常见在 2% 到 5% 的数量级具体要参考现场测试或岩土规范。时间步方面显式求解的时间步受最小单元尺寸和材料波速控制。炸药和空气区单元如果太小时间步会非常小计算时间剧增。不要一上来就开调大质量缩放系数那样会让波的传播失真。正确顺序是先优化网格让最小单元尺寸不要太夸张再考虑适当质量缩放。4.4 输出控制要提前想好很多问题到最后才发现没输出想要的数据。比如损伤变量没有输出、某个监测点的速度时程没记录、振动曲线点位太少。这些都要在求解前通过关键字定好。监测节点要提前选定一般放在地表、边坡坡脚、建筑物基础附近等关心位置。用 *DATABASE_HISTORY_NODE 指定节点编号再用 *DATABASE_NODOUT 固定输出间隔。*DATABASE_HISTORY_NODE $ NID 1001 1002 1003 $ *DATABASE_NODOUT $ DT BINARY 0.001 0 $ *DATABASE_BINARY_D3PLOT $ DT LCDT BEAM NPLTC PSETID 0.020 0 0 0D3PLOT 输出间隔也要注意。爆破峰值很短如果输出间隔太大峰值振动速度会被漏掉。一般建议峰值阶段输出间隔比关注的时间尺度小 5 到 10 倍。整个全时域如果很长可以后期再决定是否加密输出时间窗。5. 多次爆破损伤累积思路一次跑完还是重启动5.1 先从单次爆破跑通开始不管最终要多复杂第一次先做单孔单次爆破。这一步的目的是验证单位制、材料参数、边界条件、输出设置是否正常。看三个东西损伤云图是否对称、测点时程是否有正常波形、总能量曲线是否合理。如果单次爆破都出现负体积、穿透、能量异常先别排日程做多次爆破。把单次问题查清楚比带着一串问题进多炮分析要省时间得多。5.2 推荐用同一个模型做多孔延迟起爆如果两次爆破之间的时间间隔不大而且你想看到损伤的连续演化最省事的方式是在同一个模型里设置多炮孔延迟起爆。这种方式下损伤变量、应力状态、塑性应变都在一次求解过程中自然传递不需要人为干预逻辑最干净。全时域振动也是这个方案的强项。因为整个时间历程是连续的前面的振动还没有完全衰减后面的爆破波就叠加上来测点曲线能真实反映叠加效果。后处理时按时间窗口分别看第一炮、第二炮的响应也可以看整体全时段曲线。缺点也有总计算时间会比较长尤其是延迟时间很大、需要模拟很长物理时间时。另外中途如果算挂了从开始重跑的成本会很高。所以建议先跑一个中低网格密度的版本确认整个时间域内没有异常再上精细网格。5.3 重启动方案和应力继承问题如果两次爆破间隔时间很长比如中间需要等振动稳定、需要更换边界条件同一个模型硬跑会浪费大量计算时间这时考虑 LS-DYNA 重启动。重启动分为简单重启动和完全重启动。简单重启动可以直接读取 d3dump 文件继续计算适合只修改终止时间或增加输出频率的场景。如果第二炮需要添加新的单元、改变材料参数那就需要完全重启动。最需要警惕的是状态变量的继承。岩体的损伤变量、塑性应变、当前应力场这些状态必须在重启动后正确保留。不同材料模型在重启动时的表现不完全一样有的模型会对状态变量做重新初始化有的模型会读入但需要额外设置。所以跑多次爆破重启动前一定先用一个简单算例验证第一次加载产生损伤后重启动继续加载看损伤是不是在前一状态基础上继续累积而不是清零重来。我一般会刻意设定一个中间输出点比较重启动前后的损伤云图和应力场如果对应不上说明重启动设置有问题不要继续盲目往后算。5.4 怎么判断损伤真的“累积”了判断损伤累积不能只看最后的损伤云图最大范围。要定量看损伤区扩展过程建议做这几步分别提取每次爆破结束后的损伤变量场做差值得到新增损伤区。统计损伤变量超过阈值的单元数量画成随爆破次数增加的柱状图或曲线。在关键位置布设单元监测点输出损伤变量时程观察是不是每一步爆破后损伤值都上升。如果条件允许对比不同延迟时间下累计损伤区体积看延迟时间对损伤范围的影响。一个靠谱的信号是第二炮的损伤增量方向不应该和第一炮完全一样。如果第二炮只是把第一炮的损伤区向外平移一圈那说明材料状态基本没起作用问题可能出在材料模型太简单没有真正记录损伤或者重启动把状态变量丢掉了。要警惕这种“看起来在累积、但其实只是重复破坏”的假象。6. 全时域振动响应验证与后处理6.1 先看时程曲线还是先看损伤云图我会建议先看振动时程再看损伤云图。原因是振动时程能快速暴露模型层面的问题。比如波形突变、负速度、高频振荡、衰减速度明显不符合常识基本都在时程里一眼能看出来。损伤云图更像最终结果如果中间物理过程就是错的云图再漂亮也没有说服力。监测点数据一般包括位移、速度、加速度三样。爆破振动工程里最常用的是速度尤其是 PPV 峰值振动速度。所以后处理时要重点看速度时程的峰值和时间位置而不是只盯着应力云图。6.2 典型合理结果长什么样一个合理的多次爆破振动时程通常具备这些特征第一次起爆后监测点速度从零开始逐渐上升到达第一个峰值然后震荡衰减。第二次起爆时刻附近测点速度再次上升峰值可能因为叠加而变大也可能因为前次爆破产生损伤、波阻抗变化而变化。阻尼作用下每个炮之间的振动不会无限持续会逐步衰减到接近零。如果测点离炮孔近波形更尖锐峰值大离得远波形拉伸峰值小。损伤云图方面第一炮的损伤区应该以炮孔为中心向外扩展临空面方向因为反射拉伸波会有更明显的拉裂区。后续炮的损伤区在已有损伤区基础上继续发展但不会突变到非常奇怪的位置。6.3 结果不合理时的检查顺序如果发现结果不合理我的排查顺序基本固定先看输入有没有问题比如单位制、起爆时间、测点编号、输出间隔这些最容易出错。再看材料参数比如岩体抗拉强度、炸药参数、损伤阈值这些参数对峰值和破坏形态影响极大。再看网格比如最小单元尺寸、局部畸变单元、近区加密程度。最后再怀疑模型本身比如边界条件、阻尼、算法选择。排查时记住一个原则先排除最容易改、最容易确认错误的地方再动材料参数。很多人一上来就调炸药参数结果等网格质量修好后炸药参数又被调乱了。7. 常见报错和易踩的坑7.1 Hypermesh 节点不显示类问题新界面里节点不显示、节点小球消失先不要怀疑软件坏了。按这个顺序检查显示过滤器里节点显示有没有打开。当前 Component 是否被隐藏或者显示状态只有单元没有节点。节点大小设置是否过小导致显示成点而看不见。选择过滤器是否从 Node 切到了其他类型导致选不中节点。最后再看显卡驱动和显示模式某些渲染模式下点状显示会被弱化。这种问题基本不影响计算但确实会影响操作效率。处理完显示设置后建议在模型浏览器里把节点显示状态固定避免反复切换。7.2 单位错误导致速度、应力离谱如果你算出爆速快得离谱或者应力值大得离谱第一反应就该是检查单位。比如用 mm-ms-kg 单位制时速度单位是 mm/ms也就是 m/s数值上可以直接读。但你要是把爆速写成了 6930而不是 6.93那爆轰波速度就会快 1000 倍结果完全没法看。同样的错误也常出现在密度上。在 mm 单位下密度用 kg/m³ 填入那质量就会大得离谱。Hypermesh 的 Materials 面板本身不会提示你单位对不对它只是按照你填的数字生成关键字。所以设材料参数时一定要回到单位制表里核对。7.3 负体积、穿透、时步过小爆破近区空气和炸药单元最容易出现负体积特别是单元畸变严重、材料压力非常大时。处理顺序一般是先检查网格质量把极小 Jacobian、负角度单元修掉。检查炸药和空气的网格尺寸近区不要用太扁的单元。检查算法ALE 方法里流体网格和拉格朗日网格的耦合关系是否正确。检查时间步控制避免为了提速把质量缩放调得过大。穿透问题通常出现在拉格朗日网格和 ALE 网格之间或者炸药和岩体之间的接触定义不完整。这时候优先看接触关键字和耦合关键字比如 *CONSTRAINED_LAGRANGE_IN_SOLID 的设置而不是盲目加密网格。7.4 材料模型状态变量在重启动中是否继承多次爆破重启动最容易踩的坑不是报错而是“没报错但结果错了”。损伤变量没有继承往往不会弹出任何提示只是第二炮的响应看起来和第一炮完全独立。所以做重启动分析时必须在正式计算前做一个验证算例先算第一炮产生明显损伤区保留重启动文件然后从重启动文件继续算第二炮同时再开一个完全从零开始的对照组。对比两组结果的损伤云图如果基本一致说明状态变量很可能没被正确继承。这时候就要查材料模型对重启动的支持情况或者干脆改回同一个模型多段起爆的方案。爆破岩体这种问题稳定性和结果可解释性比“能不能算完”更重要。宁可第一次计算时间长一点也要把材料状态继承关系搞清楚否则算出来的“累积损伤”只是一个数字撑不起后面的工程结论。我在多轮爆破项目里养成的习惯是先跑一个 2 到 3 个炮孔的小模型网格偏粗延迟时间按实际设计设跑通后再逐步加大模型。多花半天做小模型验证通常能省下后面几天排查问题的时间。整条流程里最值得盯住的不是 LS-DYNA 算了多少步而是每一步的物理量有没有延续、有没有叠加、有没有按你预期的方式进入下一个阶段。做到这一点多次爆破的全时域振动损伤累积响应才算真正闭环。
返回列表