在本文中,我们将探讨数字黑匣子以及选择 FEM 求解器的任务。一般来说,有一组典型的选项适用于 FEM 问题,我们从不改变它。这些就像我们永远不会改变的那些神奇参数,我们常常甚至不知道为什么它们被赋予这些值。这次,我们打开黑匣子来看看它们的含义以及它们如何影响解决方案。
当我们使用有限元方法 (FEM) 时,我们正在求解一组 [K]{u} = {f} 形式的矩阵方程。这里[K]称为刚度矩阵;{f} 为力矢量,{u} 为未知量。有多种方法可以直接求解该方程组。一种简单直接的方法(尽管不推荐)是对 [K] 求逆并乘以力向量 {f},这直接求得了{u}。然而,对矩阵求逆是很费事的。更常用的直接计算解的方法包括高斯消去法、LU、Cholesky 和 QR 分解。
然而,当矩阵为以下情况时,这种直接方法 会失败:
矩阵非常大,例如几百万的数量级:如果矩阵的数量级为 n,则需要 n x n x n 运算来使用高斯消去法求解系统。想象一下系统有 1000 万个未知数;在这种情况下,需要 ExaFlops 量级的运算。
有很多零(通常称为稀疏矩阵):稀疏矩阵在矩阵中有很多零。对它们进行操作(例如将零乘以零)既浪费计算资源,又完全没有意义。
无法立即直接访问整个矩阵
与直接求解器相反,迭代求解器首先假设未知数 {u} 的近似解。迭代该解决方案以达到“精确”解决方案。
稀疏矩阵是有限元分析中常见的问题。如上所示,FEM 涉及大量矩阵运算。为了节省时间和存储空间,优选稀疏矩阵。
如图02所示,LHS上的矩阵,所有非零数都在对角线的两侧,零距离很远,通常称为带状矩阵。这样的矩阵有很多零。该矩阵被压缩并以删除零的格式存储。这样的矩阵称为稀疏矩阵。
如图 03 所示,当对称矩阵以“稀疏”格式存储时,优势甚至更大。在这种情况下,仅存储矩阵的一半。如图所示,图 03 中的 A 矩阵中的非零数量要多得多。但是,很明显,所占用的总空间与图 02 中的 B 矩阵相同。而不是 36 个位置,仅使用 18 个位置。想象一下,如果这个矩阵的大小超过一百万乘以一百万,将会节省多少!
正如前面所讨论的,让我们假设我们正在求解方程 [K]{u} = {f}。然后做出近似的初始猜测{u0}。使用此 {u1} 进行计算,然后再次计算 {u2} 等等。继续该过程,直到我们达到解 {un},使得 [K]{un}-{f} 几乎为零。请记住,计算机在使用实数时无法达到精确的零!
为了给出详细的答案,我们首先选择一个更简单的矩阵 [A]。一般选择是 [A] = diag[K]。[A] 开始时只取 [K] 的对角线元素。使用该矩阵[A],通过直接求解方程,根据{u0}计算出{u1}。
迭代 n 步,方程变为
这样一直持续到{u}为止,满足找到原方程的解。
此外,迭代求解器使用称为“预处理”的过程。用最简单的术语来说,矩阵的条件数可以表示为矩阵中最大数与最小数的绝对值之比。随着条件数的增加,方程系统变得不太稳定。
当使用迭代求解器时,在开始求解过程之前会完成预处理过程。这提高了矩阵的条件数。考虑上述系统 [K]{u} = {f}。现在乘以矩阵 [M],则得到 [M][K]{u} = [M]{f}。这不会改变解 {u},但根据矩阵 [M] 的属性,它可以改变系统的整体行为。
选择直接求解器的一般经验法则是基于系统中的自由度数量。
假设我们正在解决 3D 有限元问题,并且网格有 n 个节点。对于纯粹的机械问题,我们在每个节点求解三个未知数。这些是沿 x、y 和 z 方向的位移。因此,总自由度由下式给出:
对于更一般的情况,例如热机械或电水热机械问题,其中:
维数 = d
每个节点的未知数 = p
网格中的节点数 = n
系统的总自由度如下:
一般来说,默认选项应该可以正常工作。然而,了解这些数字的含义可能会很有用。
PETSc 和 GCPC 求解器都使用预处理并允许不同的选项。从图 05 可以明显看出,GCPC 中的选项要有限得多,而且 PETSc 也提供了这些选项。在两者之间进行选择时的一般经验法则是,GCPC 适合运行较小问题的初学者用户,而 PETSc 更适合运行较大问题并对自定义感兴趣的高级用户。
这里需要考虑两个主要选项:预处理技术和求解算法。如前所述,预处理技术改进了矩阵的条件数。求解算法是求解方程组的实际工作。
有多种预处理器可用,建议探索它们以找到适合您确切需求的解决方案。这里没有“适合所有人”的解决方案。一般来说,MUMPS LDLT 是推荐的选项,因为它利用了 MUMPS 软件包的优势。就我个人而言,SOR 是我最喜欢的,因为它为涉及非线性弹性的问题提供了稳定性。
关于求解器,GCPC 仅限于 CG 求解器。PETSc 提供其他几种选择。CG(共轭梯度)和 CR(共轭残差)仅适用于对称矩阵,而 GCR(广义共轭残差)则适用于所有矩阵。GMRES 是我的最爱。GMRES 在计算速度、鲁棒性和可靠性之间提供了良好的平衡。如果您不确定,GMRES 始终是一个安全的选择。
“非线性分辨率”选项为用户提供了更多的定制选项。在每次全局迭代(直接求解器)或局部 + 全局迭代(迭代求解器)时,都会使用一个简单的算法来求解方程。这里使用简单的算法,如牛顿-拉夫森、拟牛顿等。对于直接求解器,只有“牛顿”选项可用。“Newton-Krylov”针对迭代求解器进行了优化,强烈推荐。
首先,对“预测矩阵”和“雅可比矩阵”选项使用相同的选项是一个很好的做法。使用“切线矩阵”称为牛顿法,而使用“弹性矩阵”称为拟牛顿法。对于矩阵可能不具有所有良好属性的耦合问题,建议使用拟牛顿方法。例如,在热机械问题中,拟牛顿法非常适合。否则,强烈建议使用雅可比选项(或完整牛顿法)来准确解决结构问题。
如果问题适定,牛顿法就会表现出“二次收敛”。这意味着 3-7 次迭代即可达到收敛。在某些情况下,这可能并不总是发生。最常见的原因之一是所选的时间步长对于问题的该部分来说太大。在这种情况下,问题将无法收敛。如果选择自动时间步长,则时间步长会减小,直到达到收敛。可以在此处选择系统声明不收敛并减少时间步时的最大迭代次数。默认值 15 通常就足够了。
线搜索将计算的步长减小为更小的增量。由于步长较小,这会自动提高收敛性。即使存在非线性,线搜索并不总是必要的。但是,建议在涉及材料屈服的弹塑性问题中使用它。这里刚度矩阵的导数在屈服点快速变化。线搜索可以显着提高此类场景下的收敛性。然而,在存在接触约束的情况下,不鼓励使用线搜索。
对于纯弹性问题,一般不需要线搜索。
直接求解器还是迭代求解器?
如果自由度数小于一百万,则选用直接求解器
使用哪个直接求解器?
如果自由度数小于 50,000,LDLT 效果很好
对于较大的问题,建议使用 Multfront
要充分发挥并行计算的潜力,请使用 MUMPS
使用哪种迭代求解器?
对于较小的问题,GCPC迭代求解器也值得一试
设置非线性分辨率选项
对于直接求解器,请使用“Newton”选项,对于迭代求解器使用“Newton-Raphson”
什么时候使用线搜索?
对于涉及材料屈服的弹塑性问题很有用。
希望本文能够解答您有关 FEM 求解器的最重要问题以及如何在仿真中进行选择。