COMSOL Multiphysics能求解多大的模型是我们最常碰到的问题之一。这个问题其实很难直接回答,因此在本篇博客中,我们将讨论内存需求、模型大小、以及用户如何预测在求解大型三维有限元问题时所需的内存量。
先看一些数据
下图按照模型中自由度(DOF)数显示了求解不同三维有限元问题时所需的内存量。各种典型案例中自由度对应的内存需求(二次多项式曲线拟合)
在这里,我们介绍了五个不同的实例:
实例1:球壳中的传热问题,在所有面间均存在辐射传热现象。模型使用缺省迭代求解器求解。
实例2:悬臂梁中的结构力学问题,使用缺省直接求解器求解。
实例3:电磁波问题,使用缺省迭代求解器求解。
实例4:与实例2相同的结构力学问题,但使用迭代求解器求解。
实例5: 一块材料中的传热问题,只考虑热传导,使用缺省迭代求解器求解。
如图所示,在一台配置 64 GB 随机存取存储器 (RAM) 的计算机上,您可以求解模型 DOF 数从 26,000(最低) 到接近 1,400 万(最高)的问题。为什么数量范围这么大?让我们了解一下如何解读这些数据…
自由度的解释
在大多数问题中,COMSOL Multiphysics 通过有限元方法求解一系列偏微分控制方程组,它会使用您的 CAD 模型,并将域细分为由边界上的一组节点所定义的单元。
每个节点中至少会包含一个未知数,具体未知数的数量取决于您正在求解的物理场。举个例子,在求解温度时,每个节点中只有一个未知数(缺省名称为T)。在求解结构力学问题时,我们需要计算应变以及它所带来的应力,因此你需要求解三个未知数(u,v,w),即每个节点在xyz空间中的位移。
对于湍流流体流动问题,我们需要求解流体流速(缺省名称为u,v,w)、压力(p)以及其他用于描述湍流的未知数。如果正在求解含多种成分的扩散问题,未知数的数量就等于化学物质的种类。此外,即使同一个模型中,不同的物理场也可能有不同的缺省离散阶数,意味着在单元边缘和内部会有额外的节点。求解二阶四面体单元中的温度场时,每个单元共有 10 个未知数,当使用一阶单元求解层流Navier-Stokes 方程的速度和压力时,每个单元共有16个未知数。
COMSOL Multiphysics 使用物理场、材料属性、边界条件、单元类型和单元形状等信息来组装方程组( 方阵),并求解它来得到有限元问题的解。这个矩阵的大小就是模型的自由度(DOF)数,其中 DOF 数是单元数、每个物理场中使用的离散阶数,以及所求解变量数的函数。
这些方程组是典型的稀疏方程组,即方阵中的大部分项为零。对于大部分类型的有限元模型,网格中的每个节点仅与邻近节点相连。请注意,单元形状也会有影响:比如在分别由四面体单元和六面体(块体)单元构成的网格中,矩阵的稀疏程度就有差别。
一些模型中会包含节点间的非局部耦合,从而会出现一个相对密集的系统矩阵。辐射传热是拥有密集型系统矩阵的典型问题。在任何互相可见的面之间,都存在辐射传热现象,因此辐射表面上的每个节点都连接至其他每个节点。在本篇博客开头的图片中,我们可以清楚地看到这一点。相对不包含辐射的传热模型,热辐射模型有更高的内存需求。
此时,您应该已经发现,除了DOF数,系统矩阵的稀疏程度同样也会影响求解 COMSOL Multiphysics 模型所需的内存数量。现在让我们来看一下电脑是如何管理内存的。
操作系统如何管理内存
COMSOL Multiphysics 会调用您使用的操作系统 (OS)的内存管理算法。无论您正在使用哪个 OS,在所支持的最新 OS 版本中,这些算法的表现都极其相似。
OS 会创建一个虚拟内存堆栈,COMSOL 软件会将这部分视为连续的空闲内存。这一连续的虚拟内存块可以映射到不同的物理位置,因此一部分数据会被存储在 RAM 中,其余部分则会被存储到硬盘上。OS 将对数据的实际存储位置(RAM 或 硬盘)进行管理,缺省情况下,用户对此没有控制权。虚拟内存的数量由 OS 控制,通常情况下,用户也不会更改此项设定。
理想情况下,COMSOL Multiphysics 所需的数据将完全在 RAM 中存储,一旦 RAM 空间不足,部分数据就会被存储到硬盘中。此时,所有正在这台电脑上运行的程序都会受到明显影响。
如果 COMSOL 软件请求的内存量过大,OS 将确定它当前已无法有效地管理内存(即使通过硬盘),并通知 COMSOL Multiphysics 当前已无内存可用。此时,您会收到内存不足的提示,COMSOL Multiphysics 也会停止尝试求解模型。
下面,我们将介绍 COMSOL Multiphysics 在进行哪些操作时系统会提示内存不足,以及用户能做些什么。
COMSOL 何时使用的内存最多?
当您建立并求解有限元问题时,有三个大量使用内存的步骤:网格剖分、装配和求解。
网格剖分:在网格剖分这一步,CAD 几何被细分为有限元。缺省网格剖分算法会在大部分模型空间中使用自由剖分四面体网格。对于复杂的大型结构,自由剖分四面体网格需要大量的内存。事实上,它有时请求的内存量会高于实际求解方程组所需的内存量,因此即使在这个步骤,也可能遇到内存不足的问题。如果您确实发现网格剖分占用的时间和内存过高,就应该将几何细分(或分割)为更小的子域。一般而言,子域越小,剖分所需的内存就越少。相对一次性完成全部的剖分工作,将它分解为一系列的操作,可以降低内存占用量。本博客中,假定没有模型简化方法来简化模型或降低网格尺寸,比如利用对称、或薄层边界条件等。
装配: 在装配这一步,COMSOL Multiphysics 会生成系统矩阵,以及一个用于描述载荷的矢量。对该矩阵的装配和存储需要大量内存,可能高于网格剖分步骤,但总是低于求解步骤。如果在本步骤中内存不足,则应增加系统的 RAM 量。
求解:在求解这一步,COMSOL Multiphysics 会采用非常通用而鲁棒的算法来求解非线性问题,其中可以包含任意耦合的物理场。不过,在这些算法的最核心部分,系统会使用直接或迭代方法来求解线性方程组。下面让我们来看一下应该在什么情况下采用这两种方法,以及它们所需的内存。
直接求解器
直接求解器非常鲁棒,几乎可以求解在有限元仿真中可能出现的任何问题。COMSOL Multiphysics 中使用的稀疏矩阵直接求解器包括 MUMPS、PARDISO 和 SPOOLES 求解器。也包括一个密集矩阵求解器,不过用户仅应在明确系统矩阵确为密集矩阵时才应使用这一求解器。
所有这些求解器都有一个缺点,随着DOF数和矩阵密度的增加,所需内存量和求解时间也会急剧增长。其比例接近于DOF数的二次方。
写作本文时,COMSOL 软件中的 MUMPS 和 PARDISO 直接求解器均提供了核外选项。该选项会覆盖 OS 中的内存管理,让 COMSOL Multiphysics 直接控制多少数据将存储在 RAM 中,以及何时开始与如何向硬盘写入数据。这一做法要优于 OS 的内存管理算法,但仍慢于完全在 RAM 中求解问题。
如果您可以访问集群超级计算机,比如 Amazon Web Service™、 Amazon Elastic Compute Cloud™ ,也可以通过 MUMPS 求解器将问题分配到集群的多个节点上。虽然我们可以通过这种方法求解大型问题,不过同样需要了解,通过集群求解的速度可能要慢于单机求解。
由于直接求解器的求解会随问题规模增长而急剧变化(大约二次方),它们通常只作为少数几个三维物理场接口的缺省求解器,不过二维模型中一般都会使用直接求解器,它们在二维模型中的增长比例情况会好很多。
缺省使用直接求解器的最常见情况是三维结构力学问题。虽然这一选择是出于鲁棒性的考虑,在许多结构力学问题中,也可以使用迭代求解器。在扳手中应力的实例模型中,介绍了切换求解器设定的方法。
迭代求解器
相对直接求解器,迭代求解器需要的内存较低,但需要较多的定制化设定以保证它们正常运行。
软件中预定义物理场接口的迭代求解器设定很合理,出于鲁棒性的考虑,提供了一些缺省迭代求解器的建议。这些设定会自动完成,不需要用户进行任何操作,因此只要您使用了预定义物理场接口,就无需为这些设定担心。
对相同问题,迭代求解器所需的时间和内存远低于直接求解器,因此在适用情况下,应尽量使用这类求解器。随着问题规模变大,此类求解器的求解时间和内存需求变化之间成线性关系,而非直接求解器典型的二次方关系。
至今为止,迭代求解器应该用于有足够 RAM 来求解问题的计算机,所以若在使用迭代求解器时系统提示内存不足,就应升级计算机的RAM 量。
我们同样也可以在集群计算机上通过域分解法来使用迭代求解器。最近软件中新增了此类迭代方法,敬请关注未来将发布的更多相关细节信息。
预测内存需求
虽然上文中的数据提供了内存需求的上下限,但这些界限相当宽泛。我们已经发现对模型的细微调整,例如引入一个辐射传热类的非局部耦合,就会极大地改变内存需求。因此,我们将介绍一个通用的预测内存需求的方法。
首先建立一个典型模型,其中包含希望求解的物理场组合,且近似于真实几何的复杂程度。开始时将网格尽量粗化,然后逐渐细化网格。或者,从一个较小的典型模型开始,然后逐渐增加尺寸。
求解每个模型,并监测内存需求。观察正在使用的缺省求解器。对于直接求解器,在测试中选择核外选项,或考虑是否可以使用迭代求解器。根据数据拟合二阶多项式,使用该曲线并根据最终希望求解的大型问题尺寸判断所需内存。这是判断大型、复杂、三维多物理场模型所需内存的最可靠方法。
现在我们已经了解到,所需内存(至少)取决于几何、网格、单元类型、正在求解的物理场组合、物理场之间的耦合、以及任何非局部模型耦合的范围。我们也清楚了通常不可能预测所有情况中的内存需求。根据对模型进行的更改,可能需要将上述步骤重复几次。
公平地说,要最有效地建立和求解大型模型,不仅要深刻理解求解器设定,也要深刻理解普通有限元模拟。如果您对具体模拟问题有疑问,请随时联系您的 COMSOL 技术支持团队。
更多资讯请关注公众号!