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 技术支持团队。
更多资讯请关注公众号!

求解大型 COMSOL 模型需要多少内存?相关推荐

  1. 关于comsol“LU因式分解时内存不足“的一些解决建议

    关于comsol"LU因式分解时内存不足"的一些解决建议 前言 解决方法 其他方法 补充 前言 我在使用comsol的过程中也遇见过"LU因式分解时内存不足"的 ...

  2. 最大的ai计算机模型,Microsoft构建了世界排名前五的超级计算机,用于在Azure上训练大型AI模型...

    [TechWeb]据国外媒体报道,5月20日,微软在年度开发者大会Build 2020上宣布,它将建造世界排名前五的超级计算机. Microsoft 微软表示,它与非营利性人工智能组织OpenAI独家 ...

  3. 深入理解并发内存模型||JMM与内存屏障||多核并发缓存架构 ||JMM内存模型||volatile 关键字的作用 ||JMM 数据原子操作||JMM缓存不一致的问题

    深入理解并发内存模型||JMM与内存屏障 多核并发缓存架构 JMM内存模型 volatile 关键字的作用 JMM 数据原子操作 JMM缓存不一致的问题

  4. 【Matlab 控制】批量修改大型 Simulink 模型中模块的属性

    批量修改大型 Simulink 模型中模块的属性 一.通过Simulink自带的搜索 二.通过命令行进行搜索替换 三.使用Model Explorer编辑属性 在大型Simulink建模中,需要进行某 ...

  5. 【NLP】谷歌、伯克利联合研究:为5种大型NLP模型,彻底算算这笔账

    近年来,随着机器学习模型规模的不断增大,相应的计算需求也在迅速增长,由此引起了多种成本的增加.其中,估算能源成本有助于衡量其对环境的影响和探寻更环保的策略,但其局限性在于没有详细的信息,这无疑给研究带 ...

  6. JUC多线程:JMM内存模型与volatile内存语义

    一.JMM 内存模型: 1.什么是 JMM 内存模型: Java 内存模型是 Java 虚拟机定义的一种多线程访问 Java 内存各个变量的访问规范,主要围绕如何解决并发过程中的原子性.可见性.有序性 ...

  7. jvm内存模型_JVM|02内存模型

    JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...

  8. 使用Cplex求解均值方差模型

       在进行多目标进化算法求解投资组合问题时,由于多目标进化算法求得的是一组近似最优解,对于最大化收益和最小化风险的两目标M-V模型,需要找到一个基准,方便作为参考.这里利用Cplex工具求解均值-方 ...

  9. java ps old gen perm gen_Java 内存模型之堆内存管理

    Java 内存模型之堆内存(Heap) 一.背景知识:内存类型介绍 1.什么是 Perm Gen? Perm Gen : Permanent Generation Perm Gen 区是一个特殊的JV ...

最新文章

  1. 第二讲:Android系统构架分析和应用程序目录结构分析
  2. 朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则
  3. 将字符串中的空格用%20替换
  4. 论文页眉奇偶页不同怎么设置_还在愁毕业论文的页眉页脚吗?
  5. ‘map’ does not name a type
  6. 纯干货 | UI界面中按钮设计可临摹编辑素材!
  7. python3基础学习(XML文件解析)
  8. php server 不支持,SQL server不支持utf8 php却用utf8的矛盾问题解决方法
  9. oracle数据库报错09275,项目连接Oracle数据库报错
  10. 排行榜或颁奖界面有时出现名字等项目上下错位,为什么?
  11. android进阶(一)Activity加载模式
  12. 【Python】指定【微信】好友自动发送消息
  13. html:optionscollection 默认值,关于html:options collection= /的使用
  14. 康佳电视手机遥控器android版,康佳电视遥控器
  15. Excel查询A列中的数据是否在B中存在
  16. 网站怎么样对接微信公众号,看以下操作
  17. 3大奇葩排序之猴子算法
  18. 交友结婚的原则[转贴]
  19. Python之数据采集与文档读取练习
  20. linux 创建dat文件‘,DAT 文件是什么

热门文章

  1. android模拟器跑的时候卡,安卓模拟器运行卡顿原因,和七大解决方法
  2. 后台管理系统项目流程及逻辑处理(一)
  3. 微型计算机最核心的补件,春季高考试卷-天津市2016年春季高考计算机模拟试卷B【精】.doc...
  4. php chrome.crx,从PHP生成Chrome .crx
  5. iphone开发相关的网站
  6. C盘爆满清理方法和不借助第三方工具完成C盘扩容(详细教程)
  7. 详解ISO 13400文档(DoIP协议)-1
  8. 天龙源码框架分析_天龙源码分析 - 客户端 包
  9. Pytorch中使用Bert预训练模型,并给定句子得到对应的向量
  10. 人生不是注定的--《千钧一发》观后感