PFC中clump与cluster相互转化方法及在颗粒形状模拟中的应用
2026/9/6 21:28:49 网站建设 项目流程

简介:针对离散元模拟中圆球颗粒难以反映真实形状的问题,这份资料详细介绍了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里模拟真实颗粒形状,第一步是获取颗粒的几何信息。常见路径有三条:

  1. CT扫描或照片重建:对砂样做micro-CT扫描或显微照片采集,用图像处理提取颗粒轮廓/表面点云,再在三维空间里包络。
  2. 球面调和函数拟合:将颗粒表面用SH函数参数化,重构后的表面可生成任意数量的离散点。
  3. 规则几何体近似:直接根据颗粒长短轴比、扁平度、棱角度等指标,用组合球构造椭球、三棱锥、棱柱等理想化形状。

拿到点云或轮廓之后,下一步就是“用球去填充”。这个填充过程在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的常规顺序:

  1. 在目标形状内部放置ball,并给每个ball赋密度、刚度等基础参数。
  2. cmat设定接触模型为线性平行键模型(linearpe)。
  3. 给平行键设置法向/切向刚度、抗拉/抗剪强度等参数。
  4. 删除掉那些没有进入颗粒“壳体”内部的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(pos=pos, radius=r) # 更新接触模型与平行键参数 ball.cmat.apply("cluster_cmat")

这段逻辑归结起来就三步:提取信息 → 删除clump → 原位生成ball并施键。但真实代码里有个细节很关键:在clump.delete之后,原来clump和其他颗粒之间的接触信息会全部消失,新生成的ball和周围颗粒之间的接触需要重新建立。如果周围颗粒已经处于应力耦合状态,重新生成的ball很可能因为接触缺失而在第一步产生巨大的不平衡力。

所以我在实际处理时会用另一个更稳的替代方案:不删除clump,而是把clump先“冻结”起来,在删除前记录全局接触状态和接触力,再用这些值初始化新生成ball的局部应力。这相当于给新颗粒一个“初速度为零但有初始应力”的边界条件,数值稳定性会好很多。

3.3 cluster转clump的实现方法与适用场景

反向操作用得没有正向那么频繁,但在某些场景下也是刚需。比如模型运行到中间阶段,某些cluster已经完全压实,或者你需要在某个时刻冻结破碎行为,只保留当前状态继续做渗流分析,这时候就要把当前仍“存活”的cluster转成刚性clump。

实现思路有两种:

  1. 直接凸包化:对每一个目标cluster,读取内部所有ball的位置和半径,删除这些ball并在相同位置生成pebble,绑定为一个新的clump。粗略但快速。
  2. 保留几何轮廓,重新用pebble填充:先用球集合的外包络面提取形状特征,再按最优化算法重新填充pebble,减少球数并保持体积一致。精度高但算法复杂度也高。

第一种方法如果ball太多,生成的clump pebble数量可能巨大,导致计算变慢。第二种方法适合那种cluster已经碎得七零八落、碎片需要被当作刚性块继续参与后续计算的情形。

3.4 转化后的力重平衡与初始条件恢复

无论哪种转化,最终都需要跑几十步到几百步的迭代,让系统重归平衡。我个人的经验是:转化后不要立刻加载,先让模型在无扰动条件下循环足够多的时步,观察最大不平衡力比(MUBR)下降到1e-3量级以下,再恢复围压伺服或开始加载。

如果转化后MUBR始终降不下去,95%是接触模型参数没对齐:要么new ball的接触刚度与原clump表面刚度不一致,要么新生成的ball之间因重叠产生过大的初始排斥力。这时优先调整lin_knlin_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-3(500步内)增大局部阻尼或调接触刚度
bond断裂初始分布无大面积瞬时断裂调高粘结强度或降低初始重叠
伺服压力恢复围压偏差≤1%延长伺服控制周期
宏观应力应变复现与直接cluster建模偏差可解释检查转化时机与初始应力继承

我个人的实际体会是:clump和cluster的混合建模,难点不在单个模型的使用,而在“何时转、如何转、转了之后怎么让数据连续”这三件事上。你把第3节的流程走通一遍之后,这套思路完全可以迁移到其他颗粒材料模拟中,比如砾石、碎石、胶结砂土甚至矿山充填体。如果后面有空,我还会把“PFC内置cmat模板与自定义本构在cluster上的适配差异”单独拎出来写一篇,想看的可以先关注着。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询