当前位置: 首页 > news >正文

基于PFC5.0代码的可破碎cluster与ball颗粒模拟碎石、矿渣混凝土材料单轴压缩实验研...

PFC5.0代码,可以破碎的cluster,可模拟碎石、矿渣混凝土材料,ball与cluster颗粒,单轴压缩实验,内涵声发射事件数代码,分析统计ball与ball直接的裂纹数目,cluster内部破碎的裂纹数目

上周帮同门调PFC5.0的矿渣混凝土单轴压缩模拟,本来以为就是套个现成的代码改改参数,结果栽在cluster内部裂纹统计和声发射计数上折腾了快两天,现在终于把坑填完了,顺手把整理好的代码和踩过的雷分享出来。

咱先唠唠为啥要用cluster:平时模拟素混凝土用ball堆就行,但矿渣混凝土的骨料都是大块的碎石,单个ball太假了,得把一堆小ball绑成一个大颗粒当骨料,也就是cluster。这样碎的时候能从骨料内部裂开,比单个ball真实多了。比如要做一个10mm的碎石骨料,就先扔20个半径2-5mm的小ball在一个小区域里,再用clump命令把它们捆成一个整体。

先贴一段生成cluster骨料的代码:

set aggregate_rad 5.0 ;# 大颗粒的包络半径 set sub_ball_num 20 ;# 组成cluster的小ball数量 set gap 0.1 ;# 小ball之间的间隙,防止太挤 set clump_id [clump create rad=$aggregate_rad num=$sub_ball_num gap=$gap] # 给cluster赋值物理参数,和矿渣骨料匹配 clump attribute density=2800 young=3.5e10 poisson=0.22 range id $clump_id # 随机扔一堆骨料和砂浆用的小ball ball distribute porosity=0.32 rad=1.0 3.0 density=2100 young=2.5e10 poisson=0.2 range x=-0.5 0.5 y=-0.5 0.5 z=-0.5 0.5

这段代码一开始我把gap设成0了,结果生成的cluster直接挤成一团,导入模型的时候直接报错,后来加了gap=0.1才好,而且porosity设0.32是模拟混凝土的孔隙率,这个参数得根据实际级配调。

接下来是单轴压缩的加载墙,别用固定墙,伺服墙才是做准静态加载的正道:

# 生成上下伺服加载墙,尺寸和模型域匹配 wall create position 0 0 -0.48 size 0.96 0.96 id 1001 wall create position 0 0 0.48 size 0.96 0.96 id 1002 # 设置加载速率,别太快不然惯性炸模型 wall servo velocity 0.008 range id 1001 wall servo velocity -0.008 range id 1002 wall servo on

我一开始手滑把速率设成0.1,结果模型刚加载就被弹飞了,后来查了PFC官方文档才知道,准静态加载的速率要足够慢,让每个步长的位移都小于颗粒的半径量级。

PFC5.0代码,可以破碎的cluster,可模拟碎石、矿渣混凝土材料,ball与cluster颗粒,单轴压缩实验,内涵声发射事件数代码,分析统计ball与ball直接的裂纹数目,cluster内部破碎的裂纹数目

然后是声发射计数,PFC里声发射本质就是接触破坏的次数,不管是拉伸还是剪切破坏,只要接触的状态变了就算一次事件。一开始我抄了网上的代码,结果跑出来一直是0,后来才发现把contact.state的数值记错了——PFC5.0里contact.state(c)=2是拉伸断裂,=3是剪切断裂,修正之后就对了:

fish define count_ae_events local ae_total = 0 loop foreach c contact.list ;# 跳过还没破坏的接触 if contact.state(c) < 2 continue ae_total = ae_total +1 endloop global total_ae = ae_total end ;# 每100个计算步调用一次,省点算力 history add @total_ae

这里加了continue跳过未破坏的接触,比原来的多层if判断看着清爽点,要是模型颗粒多的话,甚至可以隔500步再算,省算力。

最后是裂纹统计的重头戏:区分ball-ball之间的裂纹和cluster内部的裂纹。ball-ball就是砂浆里两个独立小颗粒之间的接触破坏,cluster内部的就是同一个骨料包里的小ball之间的开裂,这个得靠clump.id来判断——同一个cluster里的所有ball的id都属于同一个clump的编号:

fish define count_crack_types local bb_crack = 0 ;# ball-ball之间的裂纹数 local ci_crack = 0 ;# cluster内部的裂纹数 loop foreach c contact.list if contact.state(c) <2 continue local id1 = contact.id1(c) local id2 = contact.id2(c) ;# 先判断是不是两个独立的ball(都不属于任何cluster) if [ball exists id1] and [ball exists id2] if not [clump exists id1] and not [clump exists id2] bb_crack = bb_crack +1 endif endif ;# 再判断是不是同一个cluster内部的接触 if [clump exists id1] and [clump exists id2] if [clump id id1] = [clump id id2] ci_crack = ci_crack +1 endif endif endloop global crack_bb = bb_crack global crack_ci = ci_crack end fish call count_crack_types

这段代码一开始我没加clump exists的判断,结果把cluster和普通ball之间的接触也算进去了,比如骨料和砂浆颗粒的接触,那显然不算内部裂纹,后来加了之后统计就准确了。

跑起来之后的效果还挺直观的:加载初期声发射数很少,都是一些微小的接触调整,到接近峰值应力的时候,声发射数突然暴涨,cluster内部的裂纹先变多,然后ball-ball之间的裂纹开始激增,对应实际混凝土里骨料先碎,然后砂浆和骨料之间的界面开裂,最后整体垮掉。

对了,要是想实时看这些数据,可以开个绘图窗口,把totalae、crackbb、crack_ci都加进去,调参数的时候不用等跑完就能看到效果,省了好多时间。

这次折腾下来才发现,PFC的代码看似简单,但是细节坑特别多,比如接触状态的数值、cluster的id判断、加载速率这些,都是抄现成代码容易踩的雷,还是得自己捋一遍逻辑才好用。

http://www.jsqmd.com/news/545366/

相关文章:

  • 【漫画阅读器】漫蛙2正版下载全攻略:manwa漫蛙2使用教程 - xiema
  • 如何3步掌握阴阳师百鬼夜行自动化脚本的核心功能
  • python-flask-djangol框架的关爱空巢老人和孩子留守儿童管理系统的设计和实现
  • 【开题答辩全过程】以 基于SSM的游戏商城系统为例,包含答辩的问题和答案
  • PTA编程题实战:如何用C语言高效判断素数(含常见错误分析)
  • DPDK-RSS调试指南:从五元组到哈希值的全链路分析技巧
  • Kvaser CANKing从入门到精通:手把手教你玩转CAN总线分析(附DBC文件配置技巧)
  • 终极音频切换工具:专业高效的多设备音频管理解决方案
  • 13.UE5关卡与字符串实战:从动态加载到数据解析的C++核心操作
  • MoveIt 2 Launch文件进阶:如何用MoveItConfigsBuilder灵活切换规划器(OMPL vs. Pilz)
  • 如何用BewlyBewly插件个性化你的B站首页:完整使用指南
  • 保姆级教程:在Hi3516DV500开发板上跑通YOLOv8,从模型转换到RTSP推流全流程(附避坑指南)
  • 开源六轴机械臂:重塑低成本自动化的技术路径
  • Android PDF 渲染终极指南:PdfiumAndroid 完整教程
  • OpenCV分水岭算法实战:5步搞定象棋棋子分割(附完整代码)
  • python-flask-djangol框架的婚恋相亲交友网站
  • Unity URP管线下,用Shader Graph实现物体淡入淡出效果的完整流程(附避坑指南)
  • [精品]基于微信小程序的移动学习平台的研究与开发 UniApp
  • AI写论文不迷茫!这4款AI论文写作工具,让论文创作不再困难!
  • 2026年3月,“响课AI爆搜GEO系统”最新技术线下发布会在苏州举行并取得圆满成功! - 速递信息
  • 告别卡顿!用UE5关卡流送(Level Streaming)优化你的开放世界游戏性能
  • 水下机器人导航的‘感官进化’:从纯视觉VIO到声光惯压融合的SVIn2系统拆解
  • 2026年浮动球阀供应厂家大揭秘,这些厂家值得关注,浮动球阀供应商双达阀门专注产品质量 - 品牌推荐师
  • 【AI黑话日日新】什么是具身世界模型?
  • 实战指南:ReactQuill 企业级富文本编辑器深度解析与高级定制
  • # 发散创新:用Rust编写高性能驱动程序的实战指南在现代操作系统中,**驱动程序是
  • 告别官方包:手把手教你为遗留项目编译一个“增强版”Qt5.15.17
  • 2026橡塑板优质厂家推荐 适配城市综合体保温 - 资讯焦点
  • OpCore-Simplify:5分钟完成专业级黑苹果EFI配置的终极指南
  • OpenClaw+GLM-4.7-Flash:3种常见文件处理自动化方案对比