ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PFC中clump与cluster相互转化方法及在颗粒形状模拟中的应用

2026/9/6 21:28:59 拓冰建站 浏览量
PFC中clump与cluster相互转化方法及在颗粒形状模拟中的应用 简介针对离散元模拟中圆球颗粒难以反映真实形状的问题这份资料详细介绍了PFC中团粒与簇两类非圆形颗粒模型之间的相互转化方法。内容首先对比了刚性团粒和可变形簇在颗粒破碎模拟中的不同适用场景随后给出完整的FISH程序代码从团粒到簇的转化需将团粒内部的球体颗粒替换为圆球并以团粒编号为唯一标识确保同属一个团粒的圆球才能被粘结从簇到团粒的转化则借助FISH内置的片段识别函数判断同簇圆球删除后重建为团粒形状。文中还专门说明了避免球体过度重叠、保障体积守恒等建模要点。资源为一份PDF文档大小335KB适合具备一定PFC操作经验和编程基础的研究人员用于颗粒破碎机理研究、复杂颗粒形状建模及力学响应分析。页面紧凑、步骤清晰现有78人学习下载具有较好的工程参考价值。 用PFC做岩土颗粒流模拟最绕不开的就是clump和cluster这两个概念。很多刚上手的同学会把它们当成同一种东西都是把好几个球粘在一起组成一个大颗粒嘛。但真正跑过模型、调过参数的人都知道这两个家伙从底层计算模型到适用的物理场景完全不是一回事。更折磨人的是如果你在一个模型里需要同时考虑颗粒形状效应和颗粒破碎效应往往就得在同一套试样上先后使用clump和cluster这时候“相互转化”就不再是锦上添花而是决定模型能不能跑通的关键一步。我前阵子一直在做颗粒形状对砂土力学特性影响的数值试验折腾了大半个月才把clump和cluster的转换流程理顺。这篇就系统地把这套数值方法、背后原理、以及在颗粒形状模拟里的实际应用完整拆开来讲。无论你是刚入门的PFC新手还是已经在做岩土细观模拟但被聚集体转换卡住的同行这篇文章应该都能帮你省下不少弯路。1. clump和cluster不是同一类东西底层差异决定了建模路线1.1 从离散元“单球”的局限说起PFC里面最基础的单元是ball圆盘/球体求解层面就是无数个球之间通过接触本构关系相互作用。球有两个天生的短板一是形状太规则真实砂粒、碎石哪有这么圆的二是破碎行为被写死单个球要么不坏坏掉也是“消失”没法模拟颗粒在受力后从完整到断裂的过程。clump和cluster都是为弥补这两块短板出现的但补短板的方式完全不同。clump把多个pebble砾石刚性组合成一个不可变形的整体pebble之间相对位置锁死接触计算时每个clump被当成一个刚体处理。cluster本质上是一堆用粘结模型连起来的ball接触和粘结都是真实参与计算的应力一旦超过粘结强度粘结断裂颗粒就碎了。一句话概括clump是“刚性聚合物”cluster是“可破碎聚合物”。1.2 clump和cluster的五个关键差异下面这个表格是我日常建模时最常用到的对比建议保存对比维度clumpcluster组成单元pebble刚性绑定ball独立计算变形特性刚体不可变形可变形可产生破碎接触检测按整体表面检测每个ball独立参与检测破碎行为不可破碎粘结断裂后可分裂成多个颗粒典型应用形状固定、不可破碎的砾石/粗颗粒可破碎的砂粒、岩块、胶结体计算开销相对低较高内部接触与粘结都要算剥离难度构建后网格关系固定可以按粘结损坏程度动态调整这个差异直接决定了后续转化时的处理方式完全不同。clump转cluster等于是把“一个刚体”拆成“多个可交互ball”所以要为每个pebble生成独立ball并重建接触模型。cluster转clump则是把“一堆有粘结关系的ball”合并成“一个刚性整体”要处理的是质量凝聚、重心位置、以及周边接触关系的重构。1.3 什么时候该用clump什么时候该用cluster我的选型逻辑很简单先问一个问题——我要不要在这个阶段研究这个颗粒的破碎如果试样从初始生成到加载结束都强调形状固定、颗粒完整那就老老实实用clump。比如做颗粒形状对摩擦角、剪胀性的影响你只关心形状变量clump一颗都不碎形状效应最纯粹。如果研究侧重点在颗粒破碎导致级配演化、液化趋势、或者冲击破碎响应那必须用cluster因为破裂阈值、碎片分布、断裂后的级配变化才是核心指标。麻烦就出现在混合场景试样固结阶段要求颗粒不碎好让初始结构稳定、孔隙比可控而到了剪切阶段又希望颗粒能碎用来复现真实砂土在高围压下的破碎现象。这种情况下最稳健的做法就是固结阶段用clump加载前统一转成cluster再继续跑。这也是我这篇要展开的核心场景。2. 颗粒形状模拟的建模细节让数值颗粒更像真实颗粒2.1 真实颗粒形状重构的常用思路要在PFC里模拟真实颗粒形状第一步是获取颗粒的几何信息。常见路径有三条CT扫描或照片重建对砂样做micro-CT扫描或显微照片采集用图像处理提取颗粒轮廓/表面点云再在三维空间里包络。球面调和函数拟合将颗粒表面用SH函数参数化重构后的表面可生成任意数量的离散点。规则几何体近似直接根据颗粒长短轴比、扁平度、棱角度等指标用组合球构造椭球、三棱锥、棱柱等理想化形状。拿到点云或轮廓之后下一步就是“用球去填充”。这个填充过程在PFC里通常有两种做法一是手动/脚本布置pebble直接生成clump模板二是先用离散球体逼近形状再决定是刚性绑定还是加粘结生成cluster。同一个球排列绑成clump就是刚性形状颗粒加平行键就是可破碎颗粒——两者唯一的差别就在“粘结”和“锁定”上。2.2 clump模板生成与pebble排布经验clump模板生成的核心不是让pebble铺得越满越好而是要在形状精度和计算效率之间找平衡。pebble越多形状还原越细腻但接触检测越慢、内存占用越大。实际操作时我倾向分两步控制球填充质量先求一个“等体积圆”用目标颗粒的真实体积换算成等效圆半径R0然后约束各pebble的总体积与R0的偏差不超过3%。再用“形状误差指标”约束用重构点云与clump外包络面的平均距离来评估填充质量pratio一般控制在1.05~1.3之间。pratio太小计算量爆炸pratio太大形状失真、接触行为偏滑。pebble排布还有个容易忽视的点pebble之间允许重叠是正常的重叠度不影响几何合理性只要别让某个pebble完全陷入另一个内部就行否则接触法向场会出现畸形。通常我让相邻pebble中心距控制在0.7~0.85个半径和这样既紧凑又不会导致表面本构异常。2.3 cluster的生成与粘结本构参数选择生成cluster时球布局思路和clump类似但之后需要把球与球之间的接触模型设成可破碎的粘结模型。PFC中我用得最多的是平行键模型linearpe因为平行键能同时传递力和弯矩断裂判断也比较符合岩土材料的破坏特征。生成cluster的常规顺序在目标形状内部放置ball并给每个ball赋密度、刚度等基础参数。用cmat设定接触模型为线性平行键模型linearpe。给平行键设置法向/切向刚度、抗拉/抗剪强度等参数。删除掉那些没有进入颗粒“壳体”内部的ball避免内部球之间产生不必要的内接触。这里面最关键的参数是平行键的抗拉强度σ和切向抗剪强度τ。如果你有单颗粒破碎试验的点载数据就按点载强度标定没有的话一个常见的做法是先按单球法向接触刚度的比例设定一个初值再用单颗粒单轴压缩试验两个plate夹一个cluster压碎做参数反演。3. 相互转化的核心流程从clump到cluster以及反向操作3.1 转化前必须完成的数据体检转化看起来只是“删除clump、生成ball、施加键”三步但实际工程中失败往往在转化前就决定了。我每次转化之前会先做四个检查查接触模型确认目标区域内所有球-球接触都已被设置了bond参数否则新生成的ball之间可能是一堆无粘结的散球。查clump内部pebble重叠度如果pebble之间重叠太厉害转成cluster后初始接触力会非常大初期就有大量bond被压爆试样直接“自爆”。查边界约束如果试样已经处于加载过程中比如已经施加了围压转化组件周围的伺服机制是否还在工作转化瞬间的力脉动会不会被误判为破坏。查本构继承决定转化后的ball是要继承clump的初始位移、速度还是要继承pebble的局部应力不同目的做法不同。我一般要求转化后系统能快速达到平衡所以会选择“继承位移、重置速度”减少振荡。3.2 clump转cluster的逐步实现以PFC 6.0的Python接口为例核心逻辑可以写成这样一个伪代码级的实现# 遍历指定group内的所有clump for cp in clump.list(): # 获取该clump的所有pebble信息 pebbles clump.shape.pebblelist(cp) pos_list [] rad_list [] for pb in pebbles: pos_list.append(pebble.pos(pb)) rad_list.append(pebble.radius(pb)) # 释放pebble转为独立ball clump.delete(cp) # 在原位置生成ball for pos, r in zip(pos_list, rad_list): ball.create(pospos, radiusr) # 更新接触模型与平行键参数 ball.cmat.apply(cluster_cmat)这段逻辑归结起来就三步提取信息 → 删除clump → 原位生成ball并施键。但真实代码里有个细节很关键在clump.delete之后原来clump和其他颗粒之间的接触信息会全部消失新生成的ball和周围颗粒之间的接触需要重新建立。如果周围颗粒已经处于应力耦合状态重新生成的ball很可能因为接触缺失而在第一步产生巨大的不平衡力。所以我在实际处理时会用另一个更稳的替代方案不删除clump而是把clump先“冻结”起来在删除前记录全局接触状态和接触力再用这些值初始化新生成ball的局部应力。这相当于给新颗粒一个“初速度为零但有初始应力”的边界条件数值稳定性会好很多。3.3 cluster转clump的实现方法与适用场景反向操作用得没有正向那么频繁但在某些场景下也是刚需。比如模型运行到中间阶段某些cluster已经完全压实或者你需要在某个时刻冻结破碎行为只保留当前状态继续做渗流分析这时候就要把当前仍“存活”的cluster转成刚性clump。实现思路有两种直接凸包化对每一个目标cluster读取内部所有ball的位置和半径删除这些ball并在相同位置生成pebble绑定为一个新的clump。粗略但快速。保留几何轮廓重新用pebble填充先用球集合的外包络面提取形状特征再按最优化算法重新填充pebble减少球数并保持体积一致。精度高但算法复杂度也高。第一种方法如果ball太多生成的clump pebble数量可能巨大导致计算变慢。第二种方法适合那种cluster已经碎得七零八落、碎片需要被当作刚性块继续参与后续计算的情形。3.4 转化后的力重平衡与初始条件恢复无论哪种转化最终都需要跑几十步到几百步的迭代让系统重归平衡。我个人的经验是转化后不要立刻加载先让模型在无扰动条件下循环足够多的时步观察最大不平衡力比MUBR下降到1e-3量级以下再恢复围压伺服或开始加载。如果转化后MUBR始终降不下去95%是接触模型参数没对齐要么new ball的接触刚度与原clump表面刚度不一致要么新生成的ball之间因重叠产生过大的初始排斥力。这时优先调整lin_kn和lin_ks把归一化重叠率控制在允许范围内而不是盲目加大bond强度硬扛。4. 转化方法在数值试验中的应用场景4.1 三轴压缩试验中从固结到剪切的分阶段转化三轴试验是最典型的应用场景之一。用常规方法直接生成cluster并进行等向固结会遇到两个麻烦固结过程中颗粒普遍受到高应力集中cluster边缘的角部位置特别容易提前破碎导致固结完成时试样已经“伤痕累累”初始孔隙比失真。解决办法就是分阶段转化先用clump生成试样完成等向固结再在开始剪切前把全部clump转成cluster最后施加偏应力加载。这样固结阶段不破碎初始结构完整剪切阶段随着偏应力增长颗粒逐步断裂材料软化行为、体积应变响应都能真实反映出来。我在做砂土高围压三轴模拟时就是用这套流程复现了不同围压下颗粒破碎率的差异。围压低时转化后几乎没有bond断裂宏观应力应变曲线接近理想弹塑性围压升高后剪切带上cluster持续破碎强度曲线出现明显的应变软化段级配曲线也随破碎逐渐向右移动——这些现象和室内试验结果趋势一致。4.2 颗粒破碎与级配演化的细观追踪转化后cluster的破碎过程可以通过bond break统计直接追踪。PFC 6.0中能输出bond断裂数量、断裂位置、断裂类型等细观信息。把这些信息叠加到最终试样的级配曲线上就能明确回答“哪些粒径段颗粒最易碎、断裂后碎片往哪个粒径段迁移”这类问题。这里特别提醒一句碎片粒径统计不要直接把所有子ball当成筛分产物。断裂后的碎片形状不规则用等效体积法换算直径比较靠谱不然统计出来的级配会偏细。我一般是跑完模型后用后处理脚本遍历所有ball包括断裂后的碎片按体积等效球径累加再做筛分曲线归并。4.3 形状效应研究的变量控制另一个我经常推荐的应用方向是做“形状变量”和“破碎变量”的双变量解耦分析。传统做法是直接构建不同形状的cluster对比力学响应结果里形状和破碎耦在一起难以分清效应来源。更好的实验设计是先构建几套形状明显不同的clump模板椭圆、三角形、棱状、片状各自完成固结和一个小偏压加载让初始结构差异充分体现然后统一转成cluster在同样的偏应力路径下继续加载。这样固结阶段的形状效应用clump响应记录剪切阶段的破碎附加效应通过cluster响应获得两个变量在指标上可分离开来。做细观力学研究的同学可以试试这个思路发论文的结论会清晰很多。5. 实测中的坑与参数校核建议5.1 转化过程中的体积与质量守恒检查这个坑我踩过不止一次。clump里pebble重叠区域的质量密度和独立ball是不同的概念clump整体的转动惯量与cluster各ball的转动惯量之和也有差异。转化前后如果不做修正试样的总质量可能悄悄变了百分之几宏观应力一换算就会产生系统偏差。我的处理办法是在转化前统计所有clump的总质量和总转动惯量转化后立即用所有ball重新统计一次。质量偏差超过0.1%就手动修正ball密度转动惯量偏差超过1%就重新调整pebble布局或接受一个小的计算误差并在结果讨论中说明。5.2 数值不稳定的典型征兆与处理转化后最常见的数值不稳定现象有几种我都遇到过初始爆炸balancestep内大量bond断裂试样向外飞散。通常是ball重叠度过大或平行键参数过低。振荡不收敛MUBR在某个水平震荡无法下降往往是new ball和周围原有颗粒接触刚度不匹配。局部应力集中转化边界附近出现几条如“裂缝”的高应力带这是新接触没有继承初始接触力导致的。针对这几类问题我总结了一套组合拳先用小步长、局部阻尼跑500步“预平衡”再把质量比例缩放打开一段时间让高频振荡衰减最后恢复常规时步继续加载。这套流程跑下来绝大多数不稳定问题都能压住。5.3 粘结强度标定的试验参照bond强度直接决定了cluster的破碎阈值标定时最好有物理试验做锚点。目前业内常用的是“单颗粒压碎试验单轴压缩试验组合标定”把目标形状的cluster放在两块plate之间加载记录压碎力和位移曲线室内则用真实颗粒做相应的单颗粒点载荷试验。两条曲线对上了bond强度参数基本可信。没有试验数据时可以用经验初值起步先把平行键抗拉强度设为单球法向接触刚度的0.01~0.05倍量级然后做一组围压灵敏度分析找到“低围压不碎、高围压显著破碎”的参数区间再在这个区间里精细调。5.4 一个值得收藏的检查清单为了让大家少走弯路我把整套转化方法的自检项整理如下检查项通过标准不通过的处理clump内部pebble重叠度中心距不低于0.7倍半径和重新布置pebble转化后总质量偏差≤0.1%修正ball密度转化后体系MUBR≤1e-3500步内增大局部阻尼或调接触刚度bond断裂初始分布无大面积瞬时断裂调高粘结强度或降低初始重叠伺服压力恢复围压偏差≤1%延长伺服控制周期宏观应力应变复现与直接cluster建模偏差可解释检查转化时机与初始应力继承我个人的实际体会是clump和cluster的混合建模难点不在单个模型的使用而在“何时转、如何转、转了之后怎么让数据连续”这三件事上。你把第3节的流程走通一遍之后这套思路完全可以迁移到其他颗粒材料模拟中比如砾石、碎石、胶结砂土甚至矿山充填体。如果后面有空我还会把“PFC内置cmat模板与自定义本构在cluster上的适配差异”单独拎出来写一篇想看的可以先关注着。本文还有配套的精品资源点击获取