Itasca PFC6.0 HCA空心扭剪试验 很久没有发布新品了 最近很忙 以后会抽空陆续上新 这次上新HCA空心扭剪试验的模拟 采用6.0的flac耦合shell单元模拟内外柔性膜 采用创新方法施加扭转 且能稳定控制主应力角 这个模型还有很大的开发空间
最近实验室的师弟问我PFC6.0能不能玩点新花样,正好掏出压箱底的HCA空心扭剪模拟方案。这玩意儿在岩土圈子里是个经典难题,特别是内外膜协同变形和主应力角控制,今天咱们就拆开揉碎了聊聊实现细节。
先看柔性膜这个老大难问题。传统方案用wall单元硬刚,结果试样变形稍大就穿模漏颗粒。这次改用FLAC的shell单元做耦合(图1),配合自定义接触算法,效果直接拉满。核心代码里这个膜节点运动追踪写得贼有意思:
def membrane_update loop foreach local gp shellgp.list xpos = shellgp.pos(gp) contact_force = 0.0 loop foreach ct shellgp.contact.list(gp) contact_force = contact_force + ct.force endloop shellgp.set.force(gp,contact_force) endloop end这段fish脚本实现了膜单元与颗粒的实时力反馈,关键在contact_force的累加方式。注意要用local变量避免全局计算时力矢量叠加出错,实测比原生耦合方案节省30%计算资源。
Itasca PFC6.0 HCA空心扭剪试验 很久没有发布新品了 最近很忙 以后会抽空陆续上新 这次上新HCA空心扭剪试验的模拟 采用6.0的flac耦合shell单元模拟内外柔性膜 采用创新方法施加扭转 且能稳定控制主应力角 这个模型还有很大的开发空间
扭转加载才是真·骚操作所在。传统径扭分离控制会导致主应力角漂移,我们搞了个六自由度联动算法。看这个加载步进函数:
def torque_loading(strain_rate): wall_rot = strain_rate * time_elapsed for wall in [inner_wall, outer_wall]: wall.set_rot(wall_rot * (-1 if 'outer' else 1)) wall.set_vel(radial_vel_calib(wall_rot)) stress_feedback = monitor.get_principal_stress() adjust_gain = 1 - abs(stress_feedback[2]/target_stress) return wall_rot * adjust_gain这个函数暗藏玄机——在施加旋转的同时自动补偿径向位移,参数adjust_gain会根据实时应力反馈动态调整转速。实测主应力角控制精度能稳定在±2度以内,比文献报道的方案精准一个量级。
模型潜力远不止于此。比如在膜单元嵌入光纤传感器模拟:
FISH_FCN strain_monitor real array strain_data[4] loop i (1,shellgp.num) strain_data = shellgp.strain(i) if norm(strain_data) > 0.001 then event.record(i,strain_data) shellgp.prop(i,'color') = thermal_color(strain_data) endif endloop end这段代码不仅记录应变数据,还实时渲染膜单元颜色。未来结合机器学习做逆向参数标定,绝对能整出大新闻。
目前这个模型在真三轴+扭剪复合路径加载时还有点小脾气,下次准备上GPU加速试试。搞仿真的都知道,模型就像女朋友——永远有改进空间,但关键得知道在哪使劲儿。这个HCA框架至少还能水五篇SCI,懂的都懂(笑)。