最近一个朋友在用一个很简单的模型验证接触设置的时候遇到一个小问题,在计算的时候出现如下Error,于是跟笔者一起探讨了下,笔者看到这个Error的第一眼就是似曾相识的感觉,熟悉的对话框,熟悉的提示信息,因为笔者在之前学习摸索的过程中,不止一次遇到这个Error。通过Error中的提示信息可以了解到:
1. 求解结果超过最大限制;
2. 施加了不正确的载荷或缺少约束;
3. 实体单元中至少在两个方向上存在不止一个单元。
可见出现求解错误的总体原因是上述三个,但是还是无法精确判断原因到底是哪一个,那么打开flie.err文件之后如下图,可进一步确认:在UX方向计算位移值远远超过了最大限制1000000,并提示出现这种错误的通常原因是欠约束导致刚体 位移。
通过上述分析我们可进一步确认出现求解错误的最大原因极有可能是约束不足导致的刚体 位移值极大。所以笔者便询问了朋友的模型情况、载荷和位移施加情况、接触定义情况。针对朋友的这个模型,其实很简单,仅是两段Φ10×1mm的接管连接,不同的是一段接管采用实体单元,一端接管采用梁单元,并在实体单元和梁单元连接位置定义了绑定接触,一段接管施加固定位移约束,一段施加轴向力约束。至此便可清晰的分析出导致约束不足的原因只可能出现在接触位置,但是朋友明明已经设置接触了为什么还会出现刚体 位移呢?
这也是我们在用wb的时候很容易出现的一个问题,就是一切都采用wb软件内部程序的默认设置Program Controlled,不可否认的是在前任经典界面基础和多年实践经验上发展而来的wb在一些计算类型、计算模型等方面会默认选择比较合适的一些设置,省去了很多操作的麻烦,但这恰恰也是隐患所在,比如上述绑定接触在程序默认的设置下是求解错误的,因而我们需要去了解每个设置中的含义,做到知己知彼方能百战不殆。后来笔者将接触算法改为MPC算法,同时将Pinball半径进行了修改计算便可求解了。
接触算法选择不当导致错误,分析如下:
1. 接触分析中,接触算法有罚函数法、拉格朗日法、增广拉格朗日法和MPC法,而wb中如果由Program Controlled默认选择的话,对于两个实体接触(体-体接触)则默认的是罚函数法,而对于其他任何接触(如点-线接触、点-面接触、面-面接触等)则默认的是增广拉格朗日法。本模型中是点-面接触,因而程序默认的是采用增广拉格朗日算法。
2. 算法是有适用的接触类型的,比如对于Bonded接触类型,增广拉格朗日算法是不适用的,而只有MPC法才适用于Bonded接触类型,所以本模型采用默认的增广拉格朗日算法是错误的。需记住,MPC法只适用于Bonded和No Separation两种接触类型,其他接触类型均不适用。因而本模型中需要将接触算法改成MPC法。关于接触类型可点击链接文章:这些接触类型的定义搞明白了,方能根据工程实际和模型进行正确选择!
未定义Pinball半径导致错误,分析原因如下:
1. 本模型将算法改成适用的MPC法后仍然无法求解,原因在于Pinball Region和Pinball Radius也是由Program Controlled默认的,默认的含义是通过程序内置的一种算法计算接触尺寸的大小来检查接触状态是否是闭合的,但前提是真正建立的模型中存在实际的接触或间隙极小的时候,程序默认计算的尺寸才能搜索和探测到接触的存在。
2. 本模型中是点-面接触,一个是点一个是圆环面,而点与圆环面之间有4mm的间隙,程序默认根本探测不到接触区域闭合,所以就没有建立接触,因而这个接触的定义是无意义的(相当于没有定义),所以才会出现约束不足导致刚体 位移的错误。
3. 需手动将Pinball Region修改为Pinball Radius并定义“合适”的Radius半径来进行接触的探测,“合适”两字很重要,定义的半径不同会导致不同的结果,因而需对半径的含义认识清楚。在wb中定义了Pinball Radius之后会在模型中显示出一个球体,球的半径即为定义的Pinball半径,其含义如下图所示:凡是被球面所包裹的contact(如上图的目标点)和target(如上图的接触面)单元内的高斯积分点或节点便被探测到处于接触状态并将它们绑定耦合在一起,一般默认情况下是高斯积分点的耦合,但是对于采用拉格朗日算法和MPC算法的则是节点耦合,如下图所示:
4. 要根据实际模型来定义Pinball半径的大小,半径的不同影响到接触范围并最终影响计算结果,比如上图定义的半径大小不足以将接触面内所有单元都包裹,因而只绑定了内圈和中间圈的节点,而外圈节点则未绑定,当增大半径到能包裹整个接触面时,如本模型外径10mm,则将Pinball半径定义为5mm则能将整个接触面节点全部包覆住并将目标点与接触面上所有网格节点进行了绑定,但继续增大半径则没有意义了,比如将半径定义为5000mm时与定义5mm的效果是相同的,如下图所示。包裹的含义是“并不一定要将单元内的网格节点都完全包裹住,定义的半径大小其实并不是识别网格节点的,而是识别单元的,只要半径能够识别到包裹范围内的单元,则这个单元接触面上的网格节点都被识别了,比如半径为4.8mm时并未包裹到外圈节点,但其能够识别外面的单元进而将单元上的外圈节点也识别到了,效果与5mm时也是相同的”。
5. 选择定义接触要慎重:如上述绑定范围不同的时候最终计算结果肯定也是不同的,下图分别是只绑定接触面内圈和中间圈节点(接触一)、绑定接触面所有节点时(接触二)的计算结果。可清楚的看出,接触一情况下最大应力出现在约束位置的接管内表面处,而接触二情况下最大应力位置已经完全变了。绑定接触的含义是类似于在这个位置直接施加了刚性位移约束,因而计算出来的应力全是失真的应力而非正确的应力,所以在我们重点关注的区域最好不要用绑定接触,因为你会发现在整个模型中往往有绑定接触的地方应力会很大,而这个应力却是错误的,如果用这地方的应力来进行评定的话,那就是一错再错,大错特错了。
上述通过一个简单模型对接触设置中的接触算法和Pinball半径进行了简单的摸索和验证,当然这仅仅是接触分析中的一小部分问题,接触设置中的一个小小的选择不当不仅会影响到计算结果甚至会直接导致无法计算。关于接触分析中需要学习的概念、知识点和每个功能选项的深层含义,都需要我们去不断学习和摸索验证,希望更多的朋友能够将您遇到的问题分享出来与大家一起学习和探讨。
遇到错误会让我们烦恼和困扰,但换个角度来想,如果我们遇不到这些错误,可能永远不会去摸索和学习到这地方的知识点和经验,所以相反的我们应该感谢曾经出现的错误和困难,让我们在未知的学习道路上又掌握了一个新的知识点。人生何尝不是如此,永远不要害怕犯错误和失败,犯了错误敢于承认和承担,并从中吸取教训和得到进步,失败是成功他老妈,老祖宗留下的经验之谈不是毫无道理的。心灵鸡汤一则,我先干为敬!