首先祝各位中秋节快乐,好长时间没有更新内容了,今天写一篇关于后处理的一个技术,后面会夹带点私货。本文的技术方法参考的同济付龙龙老师的颗粒力链方法,这里是我个人的理解写出来的实现方法,给各位参考。
一、理论方法
本理论认为颗粒的连接形成颗粒的力链,所以直接以颗粒形成力链。这里关于颗粒力链有如下几个假设:1、形成力链的颗粒都属于高应力颗粒;2、颗粒之间主应力方向与颗粒接触方向的夹角有一定的阈值;3、组成力链的颗粒数有一个阈值。所以这里的技术方法也会有一些难点,包括高应力颗粒的筛选,方向夹角的计算等,下文一一解决。
二、高应力颗粒筛选
这里将颗粒大主应力大于平均值的颗粒认为是高应力颗粒。使用的是ball.stress来获取颗粒的应力状态,也就是一个tensor。之后可以使用tensor.prin获取颗粒的主应力,这个返回值为一个vector,其中的xyz分别为大中小主应力。分为两步,首先第一次遍历获取总应力值来计算平均应力,第二次便利根据大主应力和平均应力的相对大小来判定是否是高应力颗粒。
运行结果如图,这里以直剪实验来表现,其实是可以看出来高应力颗粒的分布和力链分布还是一致的。
三、单个颗粒的力链延申
一个力链颗粒的延申方向需要有两个条件:1、延申方向的颗粒属于高应力颗粒;2、主应力和颗粒连线夹角小于阈值alpha;3、延申方向的颗粒是满足1 2条件中颗粒中的最大应力对应的颗粒。
这里的一个点是使用math.atan反三角来获取应力的角度theta。连线向量为ball_L。其余的没啥难点,仔细阅读应该是可以看懂的。
最终返回值就是下一个力链颗粒
四、单条力链的生成
这里传入的是某个颗粒,然后形成一条力链,力链中的颗粒会储存在一个map结构中-map_lilian。这里会调用上面介绍的函数来计算,从一个颗粒开始不停的计算下一个颗粒,知道下一个颗粒的类型不是“Ball”为止,这里也对数目进行判定,如果小于3就不对其进行生成。
五、所有力链的生成
这也是我们调用的主函数,对高应力组中的颗粒进行遍历即可。
效果为:
可以看出和contact的效果几乎差不多,但是其作为一种比较新颖的后处理方式还是比较有意思的,这里也可以对力链进行统计分析,其实也是类似与颗粒玫瑰花图类似的方式。
结果为:
可以看出只有三种尺寸的力链,分别是3个颗粒、4个颗粒和5个颗粒,基本上力链中的颗粒数越多,其数目越少,这个也是合理的。
最后对2021版新课程做一下说明,目前免费开放前39节课,到双轴为止,其实到这里也是满足入门需求了。
40节之后的课程付费开放,目前定价89元,购买后可获得配套的代码。
下面为课程的目录图,后续也会继续更新。
后面还会继续更新,更新内容不定。