genrate的底层就是在create基础上进行的包装下面我们对generate方法进行讲述二、无重叠的成样方法—generategenerate方法是在指定区域内生成无重叠的指定粒径的颗粒,一个最简单的应用就是对前述create的包装图2.1:generate生成的随机排列颗粒代码及结果对矩形规则排列的颗粒也有比较好的实现,需要注意的是指定cubic后,number就没用了,颗粒会铺满区域这个区域指的是圆心在区域内,而不是颗粒整个在区域内,这里建立一个wall box来可视化一下这个边界,从图中可以看出我讲述的意思2.2:generate生成的矩形规则排列颗粒代码及结果在岩土材料中,我们一般要指定颗粒的孔隙率和级配,用generate怎么实现呢?因为generate只能生成指定数量,所以我们需要算出级配中每个粒径颗粒对应的数目逻辑为:试样颗粒体积 Vs=(1-poro)V ,其中poro为孔隙率,V为试样体积如果两个颗粒的质量百分比一样的话(如果密度一样,体积百分比也一样),两个粒径的颗粒体积为 Vs1=Vs2=Vs0.5 一个颗粒的体积为 pirr ,这样颗粒数为 Vs1/(pirr)于是乎命令流为:图2.3:generate生成的指定孔隙率颗粒的代码运行上述代码时我们发现了报了一个警告:图2.4:出现的警告这个警告告诉我们颗粒数目没有达到指定的数目,我们看一下模型图:图2.5:模型图通过模型我们可以发现,0.006粒径的颗粒基本上可以了,但是0.009粒径的颗粒却只有4个,远远没有满足要求这里原因可以去理解一下我create生成随机分布的代码,里面设定了一个数字是20000,这个数字代表着在找不重叠的位置的时候,只会寻找20000次,超过这个次数便放弃生成这个颗粒generate里面也是一样的,默认搜索次数是20000,对应的关键词是tries所以暴露出了generate方法的一个缺点了,就是很难在生成指定孔隙率的颗粒,原因是在指定空间中,不足以生成指定数目指定粒径的颗粒那有没有解决的办法呢?当然是有的,对应上述三个边界条件——“指定空间"、”指定粒径“、”指定数目“,产生三种方法我们一个个来讲三、“指定空间”的解决办法——压缩法压缩法的概念是,保持粒径不变,我先将区域放大,然后移动墙体,使其移动到指定的区域面积以下为这个逻辑的demo,区域放大系数为5.0,也就是先将区域放大五倍,然后移动上部墙体,移动4.0倍的区域距离下为压缩法的代码:图3.1:压缩法代码首先我们在一个比较大的范围内生成颗粒:图3.2:压缩前模型 之后压缩到指定的尺寸:图3.2:压缩后模型 可以看出来,虽然生成了指定数目的颗粒了,但是试样在上方比较密,在下方比较松,这样必然会导致试样的不均匀性,于是很多学者对其进行了拓展,基本的拓展方法为分层压缩法分层压缩法将压缩分成好几层,这样由于压缩底部的空隙被分担到每层中,式样的均匀性就有了很大的提高图3.3:分层压缩法代码这里分5次成样,下面给出执行中的试样状态:图3.4:分层压缩法第1、3、5次分层结果很多学者对于压缩时候的能量传递进行研究,认为由于压缩能的影响,下部的颗粒在成样的时候应该松一点,上部的颗粒应该密一点这时候我们可以改变孔隙率实现这个想法,具体为:如分5层,则5层的孔隙率为 1.08poro,1.04poro,poro,0.96poro,0.92poro这个可以根据试样的情况去调也有一些学者对孔隙率的值进行了定值研究,国内比较著名的就是分层欠压法UCM(蒋)所谓的UCM法基本的概念为其认为压缩的时候墙体对于颗粒有压缩能,压缩能的存在导致了分层压缩的时候,上部颗粒会相对较松,而下部较密这个概念当然是早就有了,UCM的创新之处在于其提出了孔隙率随着层数的分布,有一个初始欠压比的概念,通过调整初始欠压比,便可以实现对所有层孔隙率的调整下面给出分层欠压法的代码:图3.5:分层欠压法代码这里的u0决定了孔隙率的分布,u0等于1.0时,孔隙率的分布为(注意我们目标孔隙率为0.25):图3.6:分层欠压法孔隙率分布图3.7:分层欠压法结果四、“指定粒径“的解决办法——粒径膨胀法这个思路就是先将粒径减小,生成指定数目后,再将粒径增大这里给出demo,这里定义了膨胀系数为5.0,就是先将粒径减小五倍,之后再放大图4.1:粒径膨胀法代码图4.2:粒径膨胀法粒径放大前图4.3:粒径膨胀法粒径放大后这个方法的概念比较简单,就不多赘述了五、“指定数目“的解决办法——“强行塞”这个思路什么意思呢,就是我这里不管你的重叠量了,我直接往区域内塞入指定数目的颗粒,力学平衡后形成我们的式样图5.1:“强行塞”代码在未平衡前,式样状态为:图5.2:“强行塞”平衡前图5.2:“强行塞”平衡后到这里可能很多同学已经发现了,这个形成方法不就是ditribute吗?是的没错,distribute正是基于这样的思路建立起来的,下一节我们就介绍一下ditribute的用法六、指定级配孔隙率的成样方法——distributedistribute方法是专门用来生成级配式样的,就目前来看可以说是最便捷的方法了下面我们就使用distribute来生成我们上面的式样这个方法用的人比较多了,就不去叙述了图6.1:distribute成样代码和模型下面我们讲一下distribute 的进阶,distribute在颗粒数比较多的时候,效果不是很好,会因为颗粒分布不均匀导致的不均匀性为了克服这个缺点,有学者引入了GM法,这个方法是用网格的形式去生成颗粒,代码如下,这里不去过多的讲解,可以参考一下相关的文献图6.2:GM法代码图6.3:GM法过程中模型图6.3:GM法结果模型
可以发现这个方法生成的颗粒数比预想的要低,这是因为我这里颗粒数比较少,在生成的时候产生了较大的误差到这里又熟悉了,想到了PFC中的Brick方法七、超级快速的大模型成样方法——Brick就像其意思一样,Brick方法是先生成满足条件的一个小块,然后用这个小块拼凑起整个模型这个东西牛逼的是计算速度,上面的分层法计算一次基本上都需要十几分钟左右,但是brick方法只需要1秒
Brick分为两部分:(1)首先生成基本的砖头,注意这里的domain必须是周期边界,并且大小就是砖头的大小(2)之后利用brick关键词进行组装图7.1:Brick法代码图7.2:一个Brick图7.3:组装完成后的Brick可以发现Brick方法是对一部分可以的重复复制,所以计算量会小很多,我这里的数目比较少,可能效果不是特别好Brick方法和GM法是类似的,但是GM法在每个网格中都有不一样的随机数,这样不会产生Brick方法中鱼鳞状的效果,我认为相较于Brick方法,可能GM法更加适用于我们的岩土类材料八、写在最后以上便是我总结出来的PFC成样方法了,从底层到顶层都过了一遍,但是我这里只使用了两个粒径,对于多粒径的方法读者可以在理解后自行扩充,distribute相关的方法还是比较容易的,generate相关的方法各位还是得费点心思为了帮助大家掌握离散元颗粒生成的基本概念,接触不同的成样方法以及相关代码编写,4月24日20时,我将在仿真秀平台直播《岩土离散元·PFC案例课堂 第二讲:PFC成样方法详解》,希望对PFC初学者和使用PFC的理工科院校硕博士(尤其是PFC交流群的道友)有些许些许帮助我的直播分享内容如下:最原始的成样——Create无重叠的成样方法——generate指定空间”的解决办法——压缩法、分层压缩、UCM法“指定粒径“的解决办法——粒径膨胀法“指定数目“的解决办法——“强行塞”指定级配孔隙率的成样方法——distribute、GM法超级快速的大模型成样方法——Brick互动答疑+福利派发如何听课文章中所有代码仅对参加直播的同学免费开放,且直播前分享海报到朋友圈可领取,直播结束后凭分享截图,联系仿真小助手领取相关链接一套可行的PFC力控制实现循环加载方法我的PFC岩土颗粒流离散元分析攻略(附赠学习资料)无需调用Tecplot,PFC后处理技巧为你plot精美科研图离散元PFC循环加载:一起探索土体材料的循环特性作者: lobby ,同济大学硕士,仿真秀年度优秀讲师,擅长离散元PFC软件与有限元编程算法声明:原创文章,本文首发仿真秀Ap,部分图片源自网络,如有不当请联系我们,欢迎分享,禁止私自转载,转载请联系我们(图片来源网络,侵删)
0 评论