颗粒流环形剪切实验:用代码扒开土体的秘密
PFC3D5.0颗粒流『颗粒材料/土体材料环形剪切实验』完整代码 该代码包括: (1)完整代码及适量注释,可以参考学习,也可直接使用,无需调试; (2)环形剪切实验的建模全过程,剪切应力,法向应力,样品体积变化,能量等完整fish函数。 附图:模型侧视图,俯视图,加载过程中图像,表观摩擦系数曲线(剪切应力除以法向应力),法向应力曲线(恒压加载),样品体积变化曲线。

玩过堆沙子没?颗粒材料在剪切力作用下的反应就跟沙堆塌了似的。环形剪切实验就是专门研究这个的,今天咱们用PFC3D5.0整一套能直接拿来用的代码,手把手教你搓出颗粒材料的剪切特性曲线。
先看看怎么搭模型
建模核心就三板斧:造墙、撒颗粒、加约束。这里用圆柱形剪切盒,下盘固定上盘转。初始化时记得把颗粒的摩擦系数设小点,方便后续压实。
;=======造墙=======
wall generate id 1 cylinder ... ;底下那个固定墙
wall generate id 2 cylinder ... ;上面要转的墙
wall attr damp 0.7 ;墙的阻尼别太小
;=======撒芝麻=======
ball distribute ...
ball attr density 2650 ;石英砂密度
颗粒生成后要压实到目标孔隙比,这步用伺服控制最稳。注意伺服过程中要实时监测接触力,别压爆了。压实完成后把摩擦系数调回正常值,毕竟实验时要模拟真实摩擦状态。
这些参数你肯定得调
剪切速率千万别设太高,颗粒流最怕数值不稳定。建议用准静态条件,剪切速率控制在1e-5到1e-4这个量级。法向应力加载用应力控制模式,比位移控制更贴近实际工况。
;=======加载控制=======
def apply_confining_stress
loop local i (1,wall.num)
if wall.id(i) == 2
wall.force.app = -target_stress * area ;压力换算成力
endif
endloop
end
灵魂Fish函数大揭秘
剪切过程中要实时记录五个关键指标:剪切应力、法向位移、体积变化、动能变化、摩擦系数。这里有个取巧的方法——用墙的旋转角度换算剪切应变。
;=======数据记录=======
def calc_shear_stress
shear_force = 0.0
loop foreach cnt wall.contact.list
if wall.isin(cnt.end1) ;只统计和活动墙的接触
shear_force += cnt.force.shear
endif
endloop
current_shear = shear_force / area ;换算成应力
end
体积变化计算要注意排除墙位移的影响,建议用颗粒的 centroid 坐标统计有效区域内的体积。动能监控能帮我们发现何时系统达到稳定状态,这对确定数据采集时机至关重要。
结果怎么看才专业
当表观摩擦系数曲线(剪切应力/法向应力)出现稳定平台时,说明材料进入临界状态。这时体积变化曲线应该趋于平稳,要特别注意剪胀现象——密砂会膨胀,松砂可能收缩。

PFC3D5.0颗粒流『颗粒材料/土体材料环形剪切实验』完整代码 该代码包括: (1)完整代码及适量注释,可以参考学习,也可直接使用,无需调试; (2)环形剪切实验的建模全过程,剪切应力,法向应力,样品体积变化,能量等完整fish函数。 附图:模型侧视图,俯视图,加载过程中图像,表观摩擦系数曲线(剪切应力除以法向应力),法向应力曲线(恒压加载),样品体积变化曲线。


法向应力保持恒定是检验伺服控制是否达标的关键。如果出现应力波动超过5%,建议检查墙的刚度和阻尼参数设置。能量曲线里,动能占比应该始终小于1%,否则要怀疑是不是加载太快了。
拿去就能用的骚操作
代码包里已经预置了三组典型工况:密砂/松砂/过渡状态。改这三个参数就能切换:
- 初始孔隙比(0.5-0.8)
- 颗粒级配系数(0.1-0.3)
- 围压大小(50kPa-1MPa)
跑完自动生成四个数据文件:
- 应力应变曲线.dat
- 体积变化.dat
- 能量记录.dat
- 实时参数.log
遇到颗粒飞溅别慌,八成是阻尼设小了。建议剪切阶段把局部阻尼调到0.3左右,既能保证收敛速度,又不影响力学响应。记住,颗粒流仿真就像熬汤——火候(时步)到了自然出结果。


AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)