三维延时掏槽爆破空孔效应及爆破成腔效果模拟SPH-FEM算法 1.关于sph算法中,炮孔越多...
三维延时掏槽爆破空孔效应及爆破成腔效果模拟SPH-FEM算法 1.关于sph算法中,炮孔越多,网格的均匀性越差,多炮孔案例下较难求解成功,本案例对整体网格进行了优化设计,既能满足计算效果,也能提高计算效率。 2.SPH光滑粒子的生成方式对模拟结果具有影响,进行了调试记录。 并对sph算法中粒子穿透问题、求解停止等问题进行了讲解。 3.对材料参数的定义、边界条件的设置、关键字导入方法进行了讲解。 4.后处理中对云图显示、粒子显示、曲线输出、爆破腔体显示进行了讲解。
在三维爆破模拟里搞SPH-FEM耦合算法这事儿,真是踩过不少坑。特别是掏槽爆破这种多空孔场景,刚开始跑模型的时候十次有八次直接崩掉——要么粒子乱飞穿透结构,要么算到一半突然卡死。后来发现问题的根子出在网格和粒子的配合上。
先说说网格优化这茬。传统方法直接按炮孔数量均匀划分网格,结果跑六炮孔模型时网格畸变率直接飙到15%(用这个脚本检查的):
def check_mesh_quality(nodes): distorted_count = 0 for element in elements: if jacobian_det < 0.1: distorted_count +=1 return distorted_count/len(elements)后来改成在炮孔周围做局部加密,其他区域用过渡层网格。具体实现时用到了ABAQUS的meshSizeControls模块,把炮孔区域的种子密度设为全局的3倍。调整后畸变率压到5%以下,最骚的是计算时间反而缩短了20%,估计是减少了迭代收敛次数。
SPH粒子的生成姿势绝对是个技术活。最开始按常规方法在炮孔表面均匀撒粒子,爆破后腔体形状总像被狗啃过似的。后来发现得在装药段加密、空孔段适当稀疏。用这个参数化生成脚本才搞定:
def generate_sph_particles(blasting_hole): density_curve = [2.0 if z<charge_length else 1.0 for z in hole_positions] particles = [] for pos in hole_positions: if random.random() < density_curve[pos]: particles.append(SPHParticle(pos, base_radius*0.8)) return particles粒子穿透这事儿最让人头秃。有次模拟爆轰波刚传到空孔位置,SPH粒子突然集体穿越隔壁岩层,活像穿墙外挂。后来在接触定义里加了点黑魔法——把FEM网格的刚度矩阵对角项乘以1.2的系数,同时给SPH粒子加了个速度相关的排斥力场。改完contact关键字大概长这样:
*CONTACTAUTOMATICNODESTOSURFACE
三维延时掏槽爆破空孔效应及爆破成腔效果模拟SPH-FEM算法 1.关于sph算法中,炮孔越多,网格的均匀性越差,多炮孔案例下较难求解成功,本案例对整体网格进行了优化设计,既能满足计算效果,也能提高计算效率。 2.SPH光滑粒子的生成方式对模拟结果具有影响,进行了调试记录。 并对sph算法中粒子穿透问题、求解停止等问题进行了讲解。 3.对材料参数的定义、边界条件的设置、关键字导入方法进行了讲解。 4.后处理中对云图显示、粒子显示、曲线输出、爆破腔体显示进行了讲解。
, , , 1.2, 0.02, , , 0.8
参数里的0.02是阻尼系数,0.8是摩擦系数,这几个数都是拿试算模型调了二十多遍才定下来的。
材料参数这块有个骚操作可能大家没注意。岩体本构模型里的损伤参数如果直接从文献里抄,爆破裂纹扩展路径准不对。后来发现得结合现场岩芯的CT扫描数据,把各向异性系数调成空间函数。用这种动态赋值方法才吻合实际:
*MAT_ADD_EROSION $# mid excl mxeps mneps 2 0.05 0.03 $# dmgf sigtm epss ... FCTN , ,后处理要玩出花,得活用Python脚本。比如爆破腔体的三维重构,用这个numpy技巧可以快速提取空腔轮廓:
def extract_cavity(sph_data): density_threshold = 0.3 * max_density cavity_mask = sph_data['density'] < density_threshold vertices = sph_data['position'][cavity_mask] # 用alpha_shape算法生成曲面 return alphashape.alphashape(vertices, 0.5)曲线输出千万别直接用软件默认设置,爆破压力上升段的采样频率得手动提到1e-6秒间隔,不然峰值压力能被低估30%。有个惨痛教训是某次论文数据因为采样间隔设成1e-5秒,审稿人直接质疑结果可信度...
搞这种仿真最魔幻的是,有时候明明所有参数都设对了,就因为粒子生成时的随机种子不同,结果能差出个十万八千里。后来专门写了个蒙特卡洛循环,每个工况跑五次取平均,这才算稳住数据波动。现在看到SPH粒子都有点PTSD,但看着模拟结果和现场监测数据曲线完美重合的时候,真香!
