首页/文章/ 详情

裂纹看着弥散,不代表没有剪切带

11分钟前浏览1

结论先行:判断破坏是弥散还是局部化,别数裂纹。剪切带的定义是应变局部化,所以要从位移场算应变,再用 Radon 变换把带的倾角、宽度、统计显著性一次量出来。这套流程我已经做成了技能 pfc-shear-band,2D/3D、胶结/无胶结都能跑。

1. 一、裂纹云会骗人

一个三维单轴压缩的平行胶结试样,加载到峰后,把断键位置画出来是这样:

alt  

中间密、边缘疏,看不出任何"带"的形状。更麻烦的是碎片分析:226 个碎块里最大一块含 91% 的球,100–1000 球的中间尺度是空的——试样根本没碎成几块,也不像有一条贯穿的破坏面。

单看这张图,很容易得出"这个模型破坏是弥散的,没有剪切带"。

这个结论是错的。

2. 二、为什么裂纹密度场必然骗人

有两条原因,第二条才是致命的。

第一条:无胶结材料根本没有裂纹。 砂土没有平行胶结,也就没有 DFN,任何基于裂纹的检测器在它上面直接失效。所以判据的底座不能是裂纹。

第二条:密度场对"宽带"几乎失明。 剪切带的宽度通常是 5–10 个颗粒直径。粒径 2.5 mm 时带宽就是 12–25 mm,而试样半径才 25 mm——带占了试样一大半。这种宽度投影到密度场上,就是一团渐变的光斑,你不可能从中读出一条"线"。

宽带还有个更隐蔽的陷阱:变异系数(CV)会给出完全相反的信号。我实测过一个算例,把粒径减半后 CV 从 1.02 降到 0.88,看着"更均匀了",可形态其实发生了质变——出现了清晰的 X 形双带。CV 低只是因为它把损伤铺得更开。

一句话记住:密度类图(散点、密度场、CV)只能告诉你损伤量,不能告诉你损伤形状。判局部化必须换物理量。

3. 三、换一个物理量:应变场

剪切带的定义是应变局部化,那直接观测应变就好了。PFC 没有位移 getter,位移按标准做法取:导出两个 save 的颗粒场,按球 id 相减。

拿到位移场之后,对每个球拟合它邻域的位移梯度张量:

u  = x_after − x_before          按球 id 匹配 du = G · dX                      每个球在其邻域内最小二乘拟合 G eps = sym(G)                     应变张量 = G 的对称部分 γ_max = e1 − e3                  最大剪应变(主应变差) 

这里有个参数必须选对:邻域半径。太小球数不够,3×3 的最小二乘会欠定。实测半径取 4 倍中位粒径(约 34 个邻居)时 12789 个球里能拟合 12779 个;降到 2.5 倍只剩 17%。判据是每个邻域至少 12 个球。

4. 四、怎么把"带"从场里找出来:加权 Radon 变换

有了剪应变场,还要客观地找出带,不能靠眼睛。用 Radon 变换:把点集投到观察平面,沿各个方向做投影直方图。

一条直线带的特点是——沿着它的法向投影时,带上的点会塌缩成一个窄峰。它在变换图上表现为某个(角度,偏移)处的尖峰。

裂纹和应变场可以统一处理,区别只是权重:


  • 胶结材料:裂纹云,权重 = 1
  • 任意材料:剪应变场,权重 = γ_max

代码上是同一个函数:

pythonp = x*cos(θ) + z*sin(θ)
hist = histogram(p, weights=w)      # w = 1 或 γ_max

这样无胶结的砂土也能跑——把 γ_max 当权重就是了。

必须做显著性检验。有限点集总有峰值,光看山峰高度没有意义。零假设要按通道选:裂纹用同尺寸圆柱内均匀随机撒点(CSR);应变场用权重置换——在同样的点位上打乱 γ_max。后者更严格,它隔离的是"权重的带状",而不是"试样本身的形状"。

5. 五、效果:五个算例

技能做出来后,我在仓库里五个已有算例上全跑了一遍。结果如下(角度均以各算例的加载轴为基准):

算例      
维度      
材料      
带与加载轴      
宽度      
z 值      
三维单轴      
3D      
胶结      
27°      
20.4 mm      
23.4      
单轴压缩      
2D      
胶结      
35°      
6.6 mm      
34.7      
直剪      
2D      
胶结      
5°
4.6 mm      
84.7
直剪砂土      
2D      
无胶结1°
5.4 mm      
45.4
巴西劈裂      
2D      
胶结      
4°
5.6 mm      
92.6

其中两条是"标准答案"式的验证。

直剪。直剪的剪切带本应该水平、且落在 y=0 的剪切面上。技能给的角度 5°(砂土 1°)、偏移 1.0 mm(砂土 −0.0 mm)。而且砂土那个算例完全没有 DFN,走的是纯位移场通道——这条结果直接证明方法不依赖裂纹数据。

alt  

巴西劈裂。劈裂的定义就是裂纹平行于加载方向。技能给出与加载轴仅 4°,几乎完全平行。更有意思的是偏移 −8.9 mm——劈裂面明显偏离圆心,这和我之前用别的方法得到的"端部起裂、非中心起裂"结论是吻合的,等于用一条独立路径复现了它。

alt  

回到开头那个"弥散"的三维单轴。它的带被量出来了:与加载轴成 27°、宽 20.4 mm、显著性 z = 23.4。带确实存在,只是宽到和试样同尺度——所以它在裂纹密度场上只能读作弥散。

alt  

下图是 2D 单轴的对照,35° 的斜带穿破试样中部:

alt  

6. 六、三条使用注意

角度基准最容易错。 Radon 峰值的角度 θ 是带的法向,带本身与坐标轴的关系是 |90 − θ|。写这篇文章时我就把"与 x 轴 63°“当成了"与加载轴 63°”,结论差点反了。报数之前,一定要用叠加图目视核对一遍。

3D 的角度是"视倾角"。 带在三维里是一个平面,投影到某个坐标面得到的倾角,只有在带法向恰好落在该平面内时才等于真倾角。要真倾角得换观察面重做,或者直接拟合三维平面。

两条通道可以不一致。 同一个算例,裂纹通道给 27°、应变通道给 45°。这不是 bug——裂纹找的是"损伤集中带",应变找的是"变形集中带",两者错开本身是有用信息。报数时说清楚用的是哪条就行。

7. 七、诚实声明

这套方法给的是带的几何与统计显著性,它不判断带的力学成因。z 值高只说明"这里确实有一条带",至于它是剪切带、压实带还是别的什么,要结合应力路径和裂纹类型去判断。

另外,宽度是取跨带剖面的半高全宽(FWHM)。对边界模糊的弥散带,这个值对平滑参数有一定敏感性,跨算例比较时建议用同一套参数。

VibePFC 社区 · 一起把 AI 玩进 PFC
我成立了一个 VibePFC 社群,专门聊 AI 怎么落地到 PFC / 数值模拟——让大模型读懂模型、自己改脚本、自动排查"看不懂"的问题。收一个 50 元的门槛费。
想进群的同学,加 QQ 763388012,备注"vibePFC"即可。

8. 八、参考资料


  • 技能源码:~/.claude/skills/pfc-shear-band/(band_a nalyze.py 找带 + plot_band.py 叠加)
  • 五算例汇总报告:剪切带识别报告/report.html
  • Radon 变换与 CSR 检验:标准空间点过程方法


来源:超级大的lobby
UGpython裂纹PFC材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-11-14
最近编辑:11分钟前
lobby
硕士 | 无 擅长颗粒流PFC
获赞 963粉丝 5964文章 121课程 23
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈