CAE软件操作小百科11
吕梁信步
1 为什么Abaqus涉及解的收敛性?
在有限元计算中,经常会遇到解的收敛性问题,而且其原因一般都五花八门,处理起来非常棘手,要解决这个问题,首先需要知道,什么是解的收敛性。
在有限元法中,场函数的总体泛函是由单元泛函集成的。如果采用完全多项式作为单元的插值函数(即试探函数),那么有限元解在有限尺寸的单元内可以精确地与真正解一致。但是,有限元的试探函数实际上只能取有限项多项式,因此有限元解只能是真正解的近似解答。
每一个单元的泛函都有可能趋于其精确值。如果试探函数还满足连续性要求,那么整个系统的泛函将趋近于其精确值,即有限元的解趋近于精确解,也就是说该解是收敛的。
对于解的收敛性最书面的理解是:当选取的单元既完备又协调时,有限元解是收敛的,即当单元尺寸趋于0时,有限元解趋于真正解。这就是有限元的收敛性。
需要说明的是:由于数学微分方程的精确解往往不一定能够得到,甚至问题的数学微分方程并未建立(例如对于复杂形式的结构),同时有限元解中通常包含多种误差(例如计算机的截断误差和舍入误差等),因此有限元解收敛于精确解在更严格意义上说是问题的有限元解的离散误差趋于0。
2 针对解的收敛性,如何选择直接法和迭代法?
针对Abaqus软件用户在使用软件时提出,在静态隐式分析步中方程求解的默认值为“Direct”,而不是本应该的“Iterative”的问题,此处进行详细的说明。
(1)直接法。直接法全称为直接式线性方程求解法,该方法可以用于线性和非线性的分析。在Abaqus/Standard模块下,完成非线性分析时常使用牛顿方法或者其他的方法,比如弧长法,在求解的每次迭代过程中都必须求解一系列线性方程组,而直接线性求解器就是用来寻找这些线性方程组的精确解的。Abaqus/Standard模块下的直接线性方程求解器使用稀疏、直接、高斯消元法,并且往往占用分析所耗总时间的大部分(尤其是大型模型的计算),计算过程中方程的存储占据磁盘空间的最大部分。
(2)迭代法。迭代法全称为迭代式线性方程求解法。在Abaqus/Standard模块下,该方法可以用于寻找线性、非线性、准静态、地应力、孔隙流动扩散以及热传导等分析步的线性方程组。由于采用迭代技术,不能保证给定的线性方程组有收敛解,当迭代求解器不收敛时,模型的改进有助于提高收敛性。在某些情况下,使用直接式线性求解可能是得到解的唯一选择,但当求解收敛时,使用迭代式线性求解法将获得更精确的解答,当然这也要依赖于相对容许值的大小。在通常情况下,相对容许值的缺省值已经足够精确,然而对于特殊的分析,适当地调整容许值将会改善仿真的整体性能,如对于薄板或薄壳结构,相比直接式線性方程求解法,迭代式线性方程求解法更适合进行该类结构的分析与计算。
以上提到的2种方法均在形成线性方程组之后才进行区分。隐式中常说的迭代是指求解刚度矩阵K时采用的求解方法。当刚度矩阵已经求得并形成线性方程组KU=P时,直接法就是直接对刚度矩阵求逆进而得到位移解,而迭代法就是利用迭代的求解手段得到位移解。Abaqus默认为直接法,即在忽略计算时间的前提下,为保证方程组一定有解而设定,而迭代法是用于大型模型或者薄板及薄壳结构求解时采用的,前提是可以收敛。
3 如何提高解的收敛性?
如何在计算过程中避免解的不收敛呢?现列举模型改进的方向和一些方法。
(1)在接触分析真正加载之前,设置一个接触步让2个面相接触。在这个步骤中,接触面的过盈要小一点好(比如0.001),然后再把作用于2个接触体的力以及接触方向的自由度放开。
(2)如果系统的载荷很多,将系统的载荷分多步进行加载。多个载荷一次性全部加载可能使系统无法在规定的迭代次数内收敛,所以根据需要将载荷分步加载,可以让Abaqus的内核慢慢消化。
(3)如果系统有多个接触,最好也如载荷加载过程一样,分成几个步骤接触。这样的做法会令接下来模型的修改更有方向性。
(4)如果模型还是不收敛的话,可以检查是在哪一步或者哪个inc不收敛。假如第一步直接不收敛,如果模型是类似于上述把载荷和接触分成很多步建立的情况,可以调整载荷加载的顺序,比如将第二步加载的载荷换到第一步,很可能会使计算收敛,那么影响收敛的主要问题应该就是原来的第一个加载步。在这种情况下,接下来当再次计算到这个加载步的时候可能还是不会收敛,那么此时可以考虑是否存在其他方法能够使步骤的变化量缩小一点,或者也可以继续把这个载荷细分。
(5)对于接触分析不收敛的情况,可以检查模型的接触面。如果接触面是overclosure,此时在assemble中将模型相对位置稍微移动一下或者选用接触设置中的adjust only to remove overclosure即可,但是注意这种方法会导致网格扭曲变形,只有变形问题不大时才可以选用。如果模型中的2个接触面变成了一个点和一个面接触,而点或者面中有一个位置并不是很稳定,这时候就就会出现dividing,致使求解无法成功。此时可以考察是否能将模型该处略作调整,或将该处的网格细化。
(6)模型实在较大的话,可以修改solver的设定,将迭代次数增大。对于开始计算就不收敛的情况,如果在迭代次数满足以后时间增量还不是很小的话,可以将initial和minimum改小一点。模型越大则可以改得越小,特别是前后2个step变化比较大的情况下。对于模型不是很大的情况,太小的时间增量意义不大,解决该问题应从模型当中是否有错误去考虑。
(7)模型太大会导致求解的方程太大,所以不重要的接触最好从模型中去除。这样可以保证在对结果影响不大的前提下,计算时间大大减少。endprint