找回密码
 注册
Simdroid-非首页
查看: 912|回复: 15

[工程实例] 基于PFC5.0生成随机不规则粗粒料模型的数值方法

[复制链接]
发表于 2018-3-9 11:06:43 | 显示全部楼层 |阅读模式 来自 湖北武汉
基于PFC5.0生成随机不规则粗粒料模型的数值方法
1.   定义粗粒料形状特征
对于不规则颗粒的形状,目前存在多种不同的表达方法。其中,基于电镜扫描获取粗粒料的形状特征,已逐渐得到了广泛的应用。然而,上述方法一般只能对有限数量的粗粒料颗粒进行扫描,并将其作为所谓的典型形状。因此,该方法受人为因素影响较大,不同的试验人员选取的典型形状,实际上是不统一的。
除电镜扫描法以外,基于数学方法在统计意义上描述粗粒料的形状特征,也是一种重要的手段。在二维条件下,粗粒料的几何形状可简化为多边形,而通过数学方法生成多边形的方法较多,其中圆内接多边形法是一种较为常见的方式,这里主要以圆内接多边形法确定粗粒料的形状特征。
假定通过圆内接多边形法确定的某粗粒料各顶点坐标为x1x2….xn(逆时针方向排布),则通过下列代码可将各顶点通过墙体wall依次连接,构建封闭区域,勾勒出粗粒料的边界轮廓。
;;;;make walls
wallmake=array.create(n)
loop i(1,n-1)
   wallmake(i)=string.build("wall createvertices %1 %2 %3 %4",x(i),y(i),x(i+1),y(i+1))
endloop
wallmake(n)=string.build("wallcreate vertices %1 %2 %3 %4",x(n),y(n),x(1),y(1))
array.command(wallmake)
2.   模型区域随机投放粗粒料模型
当在模型区域生成若干粗粒料模型时,需对粗粒料模型间的相对位置关系进行判别,严格避免相邻的粗粒料模型存在相互重叠。由于将粗粒料的形状简化为多边形,因此对于粗粒料相对位置关系的判别,实际上是判断平面上两个多边形间的相对位置。相关的判别方法很多,这里仅列举其中一种。具体说来,若多边形AB不相交,则其充要条件如下:
(1)   A的任意顶点不在B中;
(2)   B的任意顶点不在A中;
(3)   AB的任意两条线段不相交
其中,判断A的任意顶点是否在B中的代码实现如下:
      s_check=polyarea(B)
      loop q(1,n)
        xx =x(q)
        yy =y(q)
        s_test=0.0
        loop p(1,polysize(B))
         s_test=s_test+triarea(xx,yy,polyx(B,p),polyy(B,p),polyx(B,p+1),polyy(B,p+1))
        endloop
        
        ifs_test<1.1*s_check then
           command
            [string.build('the current node of polygon A is in polygon B')]
           endcommand
           check = 0
           exit section
        endif
      endloop
上述代码中,polyarea(B)表示多边形B的面积,polysize(B)B的顶点数量,x(q)y(q)分别表示A的各顶点坐标,q=12nnA的顶点数量。triarea为自定义的计算三角形面积的函数。通过上述代码判断A的顶点是否在B中的关键是查看自定义变量check的返回值,其初值设置为1,执行上述代码后,一旦其返回值为0,则表示A的某一个顶点落入了B中。
3.   粗粒料模型内部圆形颗粒的填充方法
基于步骤12可确定各粗粒料模型的边界轮廓,由于PFC的基本颗粒形状为圆形,因此还需在定义好的粗粒料边界内部按照一定的原则填充圆形颗粒,才能生成可参与计算的粗粒料模型。
填充圆形颗粒时,首先需定义填充颗粒的尺寸。Lim(2007)等指出,为避免填充颗粒尺寸效应的影响,粗粒料模型内部包含的圆形颗粒数量不宜少于500(三维),由此可知二维条件下粗粒料模型内部包含的圆形颗粒数量不宜少于63。基于上述原则可确定粗粒料模型内部填充圆形颗粒的尺寸,假设其范围为[ball_rmin,ball_rmax]
在粗粒料模型内部填充圆形颗粒时,只需保证填充的圆形颗粒落入粗粒料边界轮廓内部即可,填充颗粒间允许重叠。当填充颗粒的面积之和达到粗粒料模型的面积时,填充过程结束。此时将模型计算至平衡状态,则彼此重叠的填充颗粒会相互分离,并最终填满整个粗粒料模型内部。
4.   设置平行粘结模型
颗粒填充结束后,首先清除颗粒间的初始接触力,并将法向力-位移关系由总量格式(默认)改写为增量格式,其代码实现如下:
contact propertylin_force 0.0 0.0 lin_mode 1
ball attributecontactforce multiply 0.0 contactmoment multiply 0.0
随后对同一粗粒料模型内部的各填充颗粒间设置平行粘结(其余粘结模型也可),粘结完毕后,删除各粗粒料模型边界处的墙体。
5.   重力沉降并压实
设置重力加速度,使得生成的粗粒料模型在重力作用下沉降至密实状态,同时也可施加一定的初始压力将模型压实。
这里需要特别注意的是,压实过程中对粗粒料模型设置不同的细观摩擦系数,可得到不同密实度的数值模型。因此,在压实过程中,究竟该如何设置细观摩擦系数,需要专门分析。通常条件下,细观摩擦系数设置为0,以达到最密实的状态。
6.   结果分析
基于步骤1~5的数值方法,各阶段的建模结果见附件。

7.   总结
基于上述方法可建立考虑粗粒料随机不规则形状和破碎特性的数值模型,是目前开展粗粒料数值试验的方法之一。上述方法中,最耗时的阶段为阶段12,其耗时量直接决定于模型的初始密实度等,当设计的初始密实度较小,则可快速完成投放粗粒料模型的过程,若初始密实度较大,则需耗费一定的时间。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2018-3-18 14:52:04 | 显示全部楼层 来自 江苏徐州
好东西啊!!正在找粘结模型的问题
回复 不支持

使用道具 举报

发表于 2018-3-19 10:29:16 | 显示全部楼层 来自 四川成都
请问有没有PFC3.0版本的程序呀?目前只有思路,但不知道该怎么实现
回复 不支持

使用道具 举报

发表于 2018-4-1 17:35:12 | 显示全部楼层 来自 湖南怀化
不错,很好的资料
回复 不支持

使用道具 举报

发表于 2018-5-21 14:40:54 | 显示全部楼层 来自 广东广州
楼主,可否讲一下三维里如何实现,这种方法我个人感觉比较适合二维,如果到了三维,势必工作量会增加很多,有更好的思路吗?
回复 不支持

使用道具 举报

发表于 2018-7-17 21:00:21 | 显示全部楼层 来自 湖南长沙
请问一下LZ,怎么设置平行粘结模型?我感觉我写的代码在查看颗粒的数据的时候,pb_kn,pb_ks,pb_ten等这些数据都能查看得到,但感觉颗粒并没有粘结在一起,因为在给端部的颗粒施加速度的时候,与其粘结的颗粒并没有监测到位移。对了,我的颗粒生成的时候是没有重叠的,恰好相切。
回复 不支持

使用道具 举报

发表于 2019-6-17 14:45:47 | 显示全部楼层 来自 湖南
正在学习二维颗粒形状的构造
回复 不支持

使用道具 举报

发表于 2019-7-7 14:37:45 | 显示全部楼层 来自 大连理工大学北山B区
读书学习两不误 发表于 2018-7-17 21:00
请问一下LZ,怎么设置平行粘结模型?我感觉我写的代码在查看颗粒的数据的时候,pb_kn,pb_ks,pb_ten等这些数 ...

您好!请问您的粘结做成功了么?我也遇到了同样的问题,可否请教一下?谢谢!
回复 不支持

使用道具 举报

发表于 2019-8-12 14:26:39 | 显示全部楼层 来自 黑龙江牡丹江
非常感谢楼主的分享,
回复 不支持

使用道具 举报

发表于 2022-3-15 20:48:12 | 显示全部楼层 来自 湖北武汉
谢谢大佬的分享
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 16:28 , Processed in 0.044878 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表