首页/文章/ 详情

PFC6.0 2D使用kmeanss算法对裂纹进行降噪(赠项目包)

3小时前浏览173


导读:本文基于9月20日我给PFC5.0/6.0订阅用户加餐直播时的测试内容,完善后得到的结果。该直播回放已收录在我的仿真秀专栏课程板块与lobby一起学:离散元PFC5.0&6.0分析应用,欢迎读者朋友订阅。

自2024年4月起,我决定与仿真秀独家合作,对我的所有PFC5.0/6.0课程用户,策划每周五直播加餐,截至到目前已组织了16期直播,每期1小时左右。旨在更好的帮助用户更高效,更实用的学号PFC软件与应用,深受用户好评(我被lobby的离散元PFC功底折服)。以下是正文:

一、引言

在PFC中,微裂纹的产生机理是在每个接触破坏的时候,根据接触两端的颗粒或者墙体,提取位置信息生成一个线段(二维)或者圆盘(三维)作为一个微裂纹。大部分情况下裂纹都是有一些中心,然后会在中心进行分散分布,所以可视化效果不是很好。

对裂纹的展示进行降噪,是一直想研究的点,PFC自带的科学计算库scipy中就恰好有这么一个机器学习的算法库cluster。里面包含了常见的聚类算法,最常用的k临近算法可以利用距离特性对数据点进行分类。但是需要提前指定中心点个数。

二、理论基础

技术路线分为两步:

(1)采集所有裂纹的中心点坐标,这里还添加了age的数据,用于把生成时间相近的裂纹也归在一起。传入kmeanss算法中,获取分类后的数据点:

这里涉及到一个参数k_num作为中心点的个数。这里的返回值,一个是各个cluster的中心点坐标,一个是所有数据点所在的cluster组索引。

(2)对每个簇计算平均法向方向

(3)收集簇中每个裂纹距离中心点的法向和切向的距离











  for singleFrac in factList:        singleFrac.set_group("label"+str(labelCount))        vertexs=singleFrac.vertices()        for singleVert in vertexs:            pos_x=singleVert.pos_x()            pos_y=singleVert.pos_y()            singleDist_Normal=math.fabs((pos_x-pos[0])*normal_direct[0]+(pos_y-pos[1])*normal_direct[1])/math.sqrt(normal_direct[0]**2+normal_direct[1]**2)            singleDist_Direct=math.fabs((pos_x-pos[0])*normal_direct[1]-(pos_y-pos[1])*normal_direct[0])/math.sqrt(normal_direct[0]**2+normal_direct[1]**2)            DirectDist.append(length_fac*singleDist_Direct)            NormalDist.append(singleDist_Normal*math.exp(-width_fac*singleDist_Normal)/math.exp(0))

为了使得cluster的降噪后的形状有定向性,并且裂纹发育一般也是沿着一定方向延申的。这里法向的距离用exp函数进行降低,width_fac这个值就是距离系数,这个值越大,远端的颗粒就影响越小。切向的距离也用一个length_fac来进行调整

(4)绘制降噪后的裂纹形状

这个绘制方案有很多,可以用geometry,也可以用rbock,但是我这里想把fracture的age也继承过来,用rblock这个有extra设置参数的就更加适合了。这个功能用fish做,然后在python中进行调用

三、单轴破坏结果

最原始的破坏结果是这样的,裂纹分布比较零散。

从破坏时间上可以看出是自上到下的破坏过程

运用本算法后,给到几个参数下的结果

(1)width_fac=100;k_num=20

(2)width_fac=100;k_num=50

(3)width_fac=100;k_num=70

(4)width_fac=100;k_num=100

中心数越多,数据的视觉效果也就越逼近原有的裂纹数据。

而我们既有的目标是进行降噪或者说是进行特性提取,所以中心数不能太多,其次法向厚度不能太大。

这里给到参数为:

length_fac=1.2
width_fac=100

k_num=5

的效果

这个把原有的390个微裂纹降低到了7个裂纹特征。

四、巴西劈裂

同样的原理适用一下巴西劈裂,也可以得到比较好的裂纹效果:

调整参数也可以获取如图的裂纹特性,可以分析出主发展方向是从两端到中间,然后在左上角有一个次生裂隙。

总结

本文基于最简单的kmean分类方法获取得到降噪结果,分类的合理性还需要更多的验证,并且还有很多高级的cluster方法可以用于分类处理。后续的3d版本也会适配推出。若有引用本文处理方法,可直接在引用中以网络文章的引用格式增加引用。

欢迎大家订阅lobby主讲的6.0的入门课程

欢迎订阅用户免费加入每周五lobby直播加餐

(完)

来源:仿真秀App
ACTpythonUM离散元裂纹理论PFC
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-29
最近编辑:3小时前
仿真圈
技术圈粉 知识付费 学习强国
获赞 9847粉丝 21265文章 3449课程 216
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈