接触分析在众多有限元分析中是一个比较特殊的领域,大部分有限元算法(教科书上那些)研究连续体内部的应力应变、整体变形等。而接触分析则是研究两个或多个物体(自接触另说)之间的作用关系。另外呢大部分有限元的书,商业软件的理论文档都对接触这里描述的不多。我呢有幸在计算接触力学领域耕耘多年,打算今天先做一个引子,引出未来一步步给大家说的接触分析相关内容。
接触搜索
接触首先的第一步是要分析两个物体哪里发生接触,这个在显式分析和隐式分析中会有些不同,集中体现在:
但是两者都离不开一个核心诉求,那就是接触搜索(找到发生接触或者潜在发生接触的区域),这个过程呢与其说是个有限元的过程,其实更接近于图形学也就是CG的那些知识。最简单但却不可用的方法,就是穷举,将主面m个单元和从面n个单元所有单元都建立一个接触单元用于后续分析,那么算下来程序内部就会有 个接触单元对,耗时耗力,根本不可行。所以为了解决这样的问题,我们就要引出一些技术以快速的进行接触搜索,常见的有:
总之呢要么就是对空间进行划分,要么就是对单元去进行排序,然后一个原则就是,两个接触面中 个接触单元对中大部分真实情况下是绝对不可能接触的,接触检测的时候也没必要去搜索他们,提高效率与降低存储空间。
当搜索完了可能的接触对之后,我们进行局部的一些投影、分割等,进行真正的接触有限元计算部分,也就是说形成一些刚度矩阵、载荷向量,这个过程中,我们主要会有两类方法的区别:
这里的两种方法指的是接触的离散方法,并不是说点对面只能用于点和面的接触,其实在用户层面都可以选择两个面进行接触。之前写过这个的文章,可以看:
当选定了这两种方法中的任何一种后,我们都会面临一个问题,那就是如何施加如下的接触约束:
由于接触问题之于有限元麻烦的就在于,传统有限元本质上是一个优化问题(求能量最小),而接触分析则是一个约束优化问题(在接触约束的情况下,求能量最小),那么我们就要引入一些方法来实现上述的接触约束,总体上有:
OK,至此如果你正确、且高效的完成了接触搜索、使用某种离散方式构建了接触的关系,通过某种约束方法写出了其刚度矩阵和载荷向量的贡献,那么理论上你是可以求解一个接触问题的。然而事实往往事与愿违(大部分论文绝对不会说这部分,只有鲜花),我们往往会遇到算法稍微算个复杂点的问题就不收敛、算出来的应力、接触力、支座反力上蹿下跳一点不平稳、过盈配合根本算不了等等问题。当然这些问题都有答案,但涉及很多细节的打磨,比如: