没有合适的资源?快使用搜索试试~ 我知道了~
≥≥≥ ≥≥软件X 20(2022)101252原始软件出版物lifex:一个灵活的、高性能的库,用于复杂有限元问题的数值求解Pasquale Claudio非洲MOX,数学系,米兰理工大学,达芬奇广场,32,20133,米兰,意大利ar t i cl e i nf o文章历史记录:2022年8月22日收到收到修订版2022年10月14日接受2022年MSC:35-0465-0465Y0565Y2068-0468N30保留字:高性能计算有限元数值模拟多物理场问题a b st ra ct数值模拟在数学和计算科学中无处不在。一些工业和临床应用需要对复杂的多物理场系统进行建模,这些系统在各种环境中演化。空间和时间尺度。本研究介绍了设计和功能的生活x,一个开源的C++库的高性能有限元模拟多物理场,多尺度,多域的问题。lifex满足了用户和开发人员对多功能,高效计算工具的新兴需求。我们展示了它的灵活性和有效性的一些说明性的例子和先进的应用程序的使用,并展示其并行性能高达数千个核心。©2022作者(S)。由爱思唯尔公司出版这是CC BY-NC-ND下的开放获取文章许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。代码元数据当前代码版本v1.5.0永久链接到用于此代码版本的代码/存储库https://github。Com/ElsevierrSoftwareX/SOFTX-D-22-00254Code Ocean计算舱N/A法律代码许可证LGPLv3使用git的代码版本控制系统软件代码语言,工具和服务使用C++(标准 17),MPI,CMake3。12个。0编译要求、操作环境和依赖关系处理。II 9. 3 .第三章。0,VTK9. 0的情况。0,升压1。76岁。0链接到开发人员文档/手册 https://lifex. gitlab. io/lifex/支持电子邮件的问题pasqualeclaudio。africa@pollimi. It1. 动机和意义在生物学、医学、物理学、工程学、天文学、能源、环境和材料科学中的广泛应用可以通过在不同空间和时间尺度上相互作用的多个物理过程来描述[1]。从数学建模的角度来看,这样的系统可以被视为pasqualeclaudio.africa @ polimi.it。https://doi.org/10.1016/j.softx.2022.101252被称为核心模型的明确定义的物理学的聚集体。这就解释了为多物理场、多尺度和多领域问题的数值模拟开发新的通用计算框架这样的工具应该能够轻松实现计算机实验,并提供一个稳定和直观的开发环境,而不会影响计算精度和效率。这种工具的开发在将软件开发阶段从执行不同分析的耗时过程中分离出来方面起着核心作用2352-7110/©2022作者。由爱思唯尔公司出版。这是一篇开放获取的文章,使用CC BY-NC-ND许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxPasquale Claudio非洲软件X 20(2022)1012522图1.一、 LifeX官方LOGO 此图像是根据CreativeCommonsAtribution-ShareAlike4许可的。0IternationalLicense.正向模拟到灵敏度分析、优化和不确定性量化-我们介绍生活x(发音/Eklaif“Eks/,图中所示的官方标志。1),一个开源的数字解决方案库-偏微分方程(PDE)和相关耦合问题的解,根据LGPLv3许可条款发布。 它使用C++17标准中可用的现代编程技术用C++编写,并建立在交易上。II[3]有限元(FE)核心lifex旨在提供一个灵活、直观但健壮的和高性能工具,简化了复杂的物理模型及其参数、耦合方案和后处理。lifex使其用户能够将关注点从技术数值和实现细节转移到感兴趣的问题的简单离散数学公式图书馆附带了大量的文档和几个示例和测试用例,涵盖了广泛的应用和数值策略。虽 然 与 开 源 社 区 中 现 有 的 多 物 理 场 库 ( 如 FeNiCS[4 , 5] ,MFEM[6],MOOSE[7]和preCICE[8])的用途相似,但lifex提供了几个独特的功能,包括以下内容:一个直观的用户编程界面,非常容易使用;通过设计实现现代编程范式,利用C++17标准,以及第三方依赖的最新版本;并行可扩展性高达数千个核心;互操作性;也就是说,导入和导出数据的可能性和网格与共同的文件格式,特别是参考VTK;支持任意FE,其中包括deal.IIbackend [9];导入六面体或四面体单元网格的可能性[3,10];• 一个干净的和精心记录的代码库。下文概述了这些功能中的每一个2. 软件描述lifex于2019年被设想为米兰理工大学iHEART项目框架内的一个学术研究机构(见心脏功能综合模拟的数学模型和数值方案。自最初设计以来,已在代码库中添加了许多用于模拟不同核心模型的模块。lifex的开发建立在严格的编码约定和实践之上[11]。开发人员和用户数量的快速增长证明了其内核的学习曲线很浅;它足够快速和通用,可以用于各种应用程序,并且作为独立库发布。life x的第三方依赖关系包括以下内容:deal。II(配置为支持PETSc[12]和Trilinos[13]),VTK和BOOST。默认情况下,life x可以配置为使用PETSc、Trilinos(通过deal.II公开的接口或直接)或deal.II本身的线性代数数据结构和算法;在需要的情况下,由三个后端之一提供的特定数据类型或求解器也可以被硬编码,而不考虑配置LifeX的默认类型。所有代码都通过消息传递接口(MPI)原生并行;遵循分布式内存范式,全局网格被分区,以便每个MPI进程仅拥有和存储单元的子集。该库追求最大的可移植性,已成功部署在Linux,Windows和macOS操作系统上。这促使了高级部署技术的使用,更具体地说,mk[14](一组用于x86-64 Linux系统的可移植的、预编译的科学软件包)、lifex-env[15](一组明确受candi启发的从源代码构建的shell脚本)和Spack。预构建的Docker图像,已安装的依赖项也可供下载和使用。 更多细节可以在life x文档中找到。2.1. 软件构架从结构上讲,lifex的主要功能可以分为三个主要组成部分:1. 建立在deal.IIFE库之上的抽象层,将抽象数值助手作为基本构建块,促进高级数据结构和数值方案的开发,用于时间积分、线性化、求解和预处理线性系统、施加边界条件和网格处理。2. 多物理场耦合的框架,其功能使解场和数据从一个核心模型转移到另一个核心模型,无论是在同一域还是跨多个域。3. 通过几种先进的输入/输出(I/O)功能实现无缝用户界面,重点是导入来自实验结果后处理、成像技术或其他数值模拟的数据,例如借助VTK库。主要的代码组件分为这三个类别,它们的类,以及它们之间的相互作用在图中示意。 二、2.2. 软件功能所有lifex可执行文件分类如下:apps:非模型特定的通用应用程序,例如用于打印网格统计数据或在兼容文件格式之间进行转换的工具。示例:定义特定模型或几何参数(如边界条件、初始条件、域等)的问题和求解器。tests:用于自动测试的可执行文件(通过CTest运行),在GitLabremote 上 的 每 次 gitpush 时 自 动 在 持 续 集 成(CI)服务上运行测试还包括······Pasquale Claudio非洲软件X 20(2022)1012523图二. 主要寿命x部件概述。显示了主要的类和它们的交互,分为三类:抽象数值助手(蓝色),多物理场耦合(红色)和用户界面(黄色)。(For对本图图例中所指颜色的解释,读者可参考本文的网络版。)许多教程,可用作构建新应用程序的原型。所有测试和教程都用于确定总体代码覆盖率;也就是说,确定测试过程成功验证每个lifex可执行文件通常与一组公共属性相关联,例如用户指定的命令行标志、参数文件的名称(即,包含用于运行可执行文件的所有配置、参数和设置的文件,以树状分段结构组织)、指定是否生成新参数文件或实际执行应用程序的执行模式标志、包含所有输出文件的输出目录、用于并行计算的MPI等级和大小在运行时,这些属性在所有类的实例之间共享此外,所有主类都被设计为从参数文件中公开它们自己的特定参数,例如几何形状、物理参数、离散化方案、数值设置和I/O选项,每个参数都在其自己的子部分路径中。以下三个主要类定义了所有lifex模块和可执行文件通用的最小内核接口Core:一个遵循单例设计模式实现的类,它存储全局属性,并且对所有其他类都是公共的,例如上面直接列出的那些CoreModel:一个抽象类,继承Core并使用纯虚方法对其进行扩展,这些方法定义了每个核心模型或数值求解器在整个生命周期中所暴露的接口。CoreModel层次结构中的类公开了一组配置其行为的参数。此类参数通过参数文件向用户公开(参见第2.2.3节)。在2.3节中提供并讨论了一个示例代码片段。lifex_init:一个寿命处理程序,负责正确初始化每次运行所需的所有属性和依赖项,例如单例Core和MPI的实例;该类的实例通常在main()函数的最开始下面介绍更具体的高级数据结构2.2.1. 抽象数字助手lifex的很大一部分由抽象包装器和帮助器组成:这些类中的大多数显式地调用或引用deal.II设计和功能[9],目的是向它们公开更高级别的接口,并促进给定问题的高级数值方案的实现。主要类别如下所述。网格:一个围绕交易的包装器。II分布式网格。用户可以选择是否导入带有六面体或四面体元素的网格;根据该选择,此类拥有来自deal.II的分布式或全分布式三角剖分的实例;后者是最近的介绍,增加了支持四面体网格[3],其功能在编写时仍有待巩固。MeshInfo类与MeshInfo密切交互,MeshInfo解析来自输入网格的信息,如要使用的体积和表面标记,例如,施加不同的边界条件。在边界的不同部分上进行选择,或者在不同的子区域中验证材料属性在geometry/mesh_info和geometry/finders模块中实现的辅助函数允许计算(子)域体积和边界表面或定位,例如最接近给定输入点的自由度(DoF)、网格顶点或边界面BCHandler:一个辅助类,用于施加不同类型的边界条件。狄利克雷边界条件既可以直接应用于有限元向量,也可以作为线性约束施加于有限元离散化产生的线性系统。对于矢量问题,也可以施加法向或切向通量。还提供了一种帮助方法来将Neumann和Robin类贡献组装到本地系统线性求解器:对于稀疏的分布式线性系统,此类提供了一个简单的接口,使用户能够在运行时选择要使用的线性求解器及其所有选项(例如,最大迭代次数、容差、停止条件和历史记录),如从Pasquale Claudio非洲软件X 20(2022)1012524+=∇∇参数文件。包括许多常见的求解器,如CG,GMRES,BiCGStab ,MinRes,FGMRES,但原则上支持deal.II(包括PETSc和Trilinos)公开的任何求解器。此外,PETSc的完整求解器套件仍然可以通过-options_file命令行标志访问,从lifex转发到PETSc。PreconditionerObject:类似于LinearSolverHandler,该类公开用于线性系统预处理的参数.它支持许多预处理器类型,如代数多重网格(AMG),块Jacobi,加法Schwarz(SOR,SSOR,block SOR,blockSSOR,ILU,ILUT),并且可以很容易地扩展以支持更多。BDF格式:对于时间相关问题,在该类中实现了半隐式向后差分公式(BDF)时间离散化方案[17],其处理存储信息以将问题从一个时间步推进到下一个时间步。这个类存储和公开BDF解及其外推,并且可以很容易地扩展到不同的时间推进方案。非线性求解器:为解决非线性问题,提供了一族牛顿方法。一个抽象的实现需要用户指定一个汇编函数,它汇编雅可比矩阵和残差向量,以及一个求解函数,它汇编预条件子并求解与每个非线性迭代相关的线性系统;这两个函数必须返回残差、解和牛顿增量的范数,以用作可能的停止准则。冻结雅可比(或雅可比滞后)方法[18],包括每n个时间步重组雅可比一次,可以切换以提高计算效率。还提供了具有通过有限差分近似的雅可比矩阵的拟牛顿法[19]和不精确牛顿法[20]的两个专门化。此外,每个非线性解决方案都可以配备适当的加速策略(静态松弛、Aitken插值[21]和Anderson加速[22])以加速收敛。除了非线性求解器处理程序之外,用户还可以从使用自动微分(支持Sacado和ADOL-C)中II),在Tutorial04_AD和Tutorial07_AD上进行了演示,它可以非常容易地实现复杂函数的精确导数(达到机器精度)的计算。2.2.2. 多物理场耦合多物理场、多尺度和多域问题的复杂性可以在三个层次的类的帮助下得到缓解,这些层次的类都用于将解决方案字段和数据从一个核心模型传输到另一个核心模型或跨内部接口传输。为了使代码尽可能通用,我们假设不同的核心模型可以使用任意独立的离散化方案来求解,例如不同的FE度或网格分辨率。这提高了对所有相关物理现象的捕获,即使它们的动态可以通过非常不同的空间和时间尺度来表征。我们注意到,涉及多个物理模型的问题(可能在多个域共享一个共同的界面,如在流体-结构相互作用的情况下),一般使用单片或分区算法[23]来解决,如图3所示。在前一种情况下,包含所有问题的所有未知数的系统在每个时间步被组装和求解;在后者中,每个子问题被独立地求解,并且施加耦合条件,例如通过使用显式方案或用定点方案进行子迭代,直到达到耦合条件的收敛。这两种选择在生活中都是可能的,并通过一些例子和测试来说明。QuadratureEvaluation:这个类提供了一个高级接口,用于在给定的正交点上评估任意分析函数或更复杂的数据结构。用户定义 类 导出 关于QuadratureE-可以容易地对标量场、向量场或张量场实现赋值。 此外,QuadratureEvalua-实现类的FEM层次结构,以实现在同一个do中求解的多个FE模型的耦合main. 不同的问题可以用不同的有限元次数离散,由弱公式产生的积分可以用不同类型和精度的求积公式Quadra-tureEvaluationFEM类提供了一个类似于来自deal.II的FEValues的接口:此类对象使用与FE关联的DoF来场进行评估和求积规则用于目标问题。通过在每个网格单元上重新初始化这些对象,可以在相应的正交点处评估输入场。lifex提供了自动评估给定解向量的FE解、ProjectionL2:可以考虑平滑的L2投影,而不是QuadratureEvaluation类所允许的精确数值计算。给定一个函数f(x),这类计算一个FE解fh(x),满足(εfh,<$i)<$(fh,<$i)<$(f,<$i)<$(对于所选FE空间中的每个基函数<$i这个问题的数值解显然涉及质量矩阵:它的集总可以切换,正则化参数ε可以调整以防止数值振荡,例如在粗网格的情况下[25]。因此,所获得的解fh可以容易地在与目标问题。界面函数:考虑两个子域U1和U2共享一个具有一致离散化的公共界面函数,设u1和u2是定义在这两个子域上的有限元函数,通常表示定义在这两个子域上的微分问题的解。 假设定义在u1(u2)上的问题涉及依赖于u2(u1)的条件[23,26]。InterfaceMap构建接口映射;也就是说,本地接口Map与全局域Map1和Map2之间的DoF的两个映射。 这在并行模拟中至关重要,其中两个域上的并行划分可以不同,如图1中的示例。 四、最后,对于每个子域,该类管理从其他子域提取的接口数据,并将其作为边界条件应用于XML。此类仅处理协调网格;非协调离散化的扩展,如INTERNODES技术[27],仍在开发中。需要考虑的最后一种情况是在使用相同FE离散化但具有不同网格分辨率的多个核心模型对于嵌套的六面体网格,deal.II的VectorTools名称空间已经提供了精确执行所需插值这一程序很难推广,因为它在很大程度上取决于如何Pasquale Claudio非洲软件X 20(2022)1012525图三. 几何耦合问题的可能解决方案:整体(左)与分区(右)解决方案。 转载自[24]。 原始图像在CCBY3下授权。0License.见图4。使用一致性网格离散化处理共享公共界面的两个域E1(左)和E2(右)示例。Interfacetric能够正确处理不一致的并行划分。不同的网格已经生成,并且取决于网格元素类型。例如,建立在径向基函数(RBF)插值器上的传递算子可用于非一致离散化的情况[28,29],但尚未实现。显然,这两种方法可以结合起来,耦合不同的模型解决了不同的有限元近似和网格分辨率。2.2.3. 用户界面CommandLineParser:lifex使用轻量级解析器clipp来解析命令行参数。所有可执行程序都公开了一组命令行选项,可以使用-h(或--help)标志打印这些选项:根据用户下面是一个prm文件. /executable_name-h参数:每个lifex可执行文件定义了一组运行所需的参数。它们包括特定于问题的参数(如系数、几何形状、时间间隔和边界条件)、数值参数(如线性/非线性求解器的类型、容差和最大迭代次数)、I/O选项等。依赖项(如线性求解器),相关参数也包括在内,通常在适当的分段路径中。 功能 暴露 通过 参联会类从交易。二。 在运行任何可执行文件是通过-g(或--generate-params)标志生成默认参数文件. /e执行一个ble_name-g-filename。ext清单1:prm格式的参数文件示例。强调了树型分段结构一个参数文件可以很容易地设置使用任何文本编辑器,而不需要重新编译源代码。最后,产品介绍SubsectionMeshandspacediscretion#Parameterdescriptiongoeshere。setElementty pe=Hex#.端- 你好subsectionLinearsolversetType = GMRES款GMRESsetMax.numberoftempraryvectors=100#.结束结束- 你好subsectionPrectionersetType =AMGAMG分段setW-cycle=true#.端端Pasquale Claudio非洲软件X 20(2022)1012526省略上面命令中的-g标志,读取现有的参数文件并随后运行模拟生命x的Paramentary类扩展了交易。II按两个主要功能分类:verbosity control:默认情况下,只打印声明为具有标准详细度的参数。以便定制 用户体验,每个参数的详细程度可以从源代码中减少(最小)或增加(全部)。通过将可选标志minimal(full)传递给-g标志,可以生成包含最小(完整)参数集的参数文件:. /executable_name-g[minimal,full]\-filename. ext如果提供-g而没有任何进一步的说明,则假定为中等级别的详细程度。多个默认值:原则上,每个应用程序都可以运行以模拟不同的场景,或者只是使用不同的预定义参数集; life x提供了开箱即用的多个默认参数文件的可能性。通过指定一个参数名及其(新的)默认值的列表,Paramentary类可以读取用户提供的json格式的文件,这些参数名及其默认值将附加到完整的参数集,并写入一个随时可用的文件(例如,请参阅time_interpolation测试)。为了使用方便,param_handler_helpers模块中还提供了用于解析值列表的实用程序。(反)序列化:lifex包括一个检查点系统,允许将模拟的所有方面序列化到文件中。这允许在意外故障后恢复模拟状态,在达到最大计算壁时间后重新启动,或简单地使用自定义输入数据初始化模拟。方便的工具(de-在io/serialization模块中提供了串行化分布式网格和解向量,并提供了一个接口来处理.II兼容的二进制文件,并在串行化测试中演示了它们的使用。CSV读取器和写入器:逗号分隔值(CSV)文件的简单使用使其成为广泛的选择来处理按字段组织的数据。lifex中有许多实用程序函数和类来读写CSV文件通过将数字和文本值转换为STLContainers或deal.II数据结构(向量、矩阵等)。 这可以轻松地对仿真结果进行后处理,例如在每个时间步导出逐点变量。时间内插:许多应用程序需要在任意点重新存储离散数据集,例如需要根据数值模拟执行的时间步长进行内插的时间相关变量。TimeInterpolation类提供基于线性插值、三次样条、平滑三次样条、三角插值(离散傅立叶变换)以及输入数据导数的线性和样条插值的方法。VTK函数和VTK预处理:许多物理问题的特征在于来自实验数据或成像技术的系数,例如来自磁共振成像(MRI)或计算机断层摄影(CT)扫描[30,31],或来自其他数值模拟步骤的后处理[32]。 VTK工具包定义了一些最常见的数据格式,以处理在体积(vtkUnstructuredGrids)或表面(vtkPolyData)上定义的数据。此外,它还用于复杂的管道,用于表面处理和网格生成[33]。LifeX提供一个名为VTKFunction的类,继承自dealii::函数,用于导入包含单元格或点数据字段的VTK文件,并在任意位置对其进行计算trary点,可能与计算网格相关联有三种可能的评估方法可用:最近点、线性投影和带符号距离。最后VTKPreprocess类利用VTKFunction将输入VTK数据插入到FE向量中,FE向量被序列化为文件,以便稍后导入并在数值模拟中重用2.3. 示例代码段下面的代码演示了一个带注释的示例代码片段,其中包含绝大多数lifex类(即从CoreModel继承的类)公开的最小接口。特别是,declare_parameters和parse_parameters方法是纯虚的,必须被重写,而run方法是虚的,具有空默认定义如何在本地调整还示出了一些参数的冗长性。最后,这个示例类使用了一个LinearSolvertool,我们还声明和解析了它的相关参数。namespacelifex{clasPro blem:PUBLicCoreModel{公共场所://S执行子块的选择,然后返回//declarecurentparameters.Pr oblem(conststd::string&subsecttion_path):CoreModel(subsection_path)//Specifya“relative“subsection.//由“/“替换。,linear_solver(prm_subsection_path+“/Linearsolver“,/**......我的天!*/){}virtual voiddeclare_parameters(ParamHandlerparams)const覆盖{ //N个有效的子空间选择和直接的复制。params. 电子元器件_电子元器件);{//Problem-depentparameters.//我想...params. set_verbosity(VerbosityParam::Full);{//如果-g full * 未指定,//这一页的内容将被删除//behiddenfromtheparameterfile.//我想...}params. return_new();}params. leave_subsection_path();我是一个很好的朋友。declare_parameters(params);}virtual voidparse_parameters(ParamHandlerparams)overerridePasquale Claudio非洲软件X 20(2022)1012527⎧⎪− += ×]=− ×]⎪⎩阿⎪≈阿=-吉夫⎪03⎩教程07:Cahn-Hilliard方程:⎧⎪(0,1)1,2,3 ×(0,T],df t−3. 说明性实例lifex能够解决复杂的多物理场问题。上一节中描述的功能在源代码中的一系列教程中指出作为测试。这些教程按复杂性的增加进行排序,涉及不同类型的标量或向量方程以及耦合问题,可以整体解决或分区解决。在这里,我们提供了可用教程的摘要和相应的偏微分方程求解。教程01: 线性椭圆方程:−u=f,in(-1,1)3.教程02: 线性抛物方程:µ−d c(c)+λc = 0,in(0,1)3×(0,T]。有关所有这些问题的数学和数值公式的更多详细信息,如边界和初始条件,请参阅lifex文档。我们在下面展示了三个例子,展示了life x的主要功能。所有的结果都是新的,原始的贡献。首先,我们证明了第2节中描述的高级数值格式的抽象助手不影响并行性能,因为加速几乎是近似线性高达数千个核心,然后,我们提出了一个多域问题,其中两个斯托克斯问题解决了两个立方体共享一个共同的面对适当的接口条件,证明单片和分区方案的区域分解问题可以很容易地实现与一个可以忽略不计的计算开销,由于并行传输的解决方案在整个接口;最后,一个先进的,全隐式数值求解器的3.1. 可扩展性研究我们在Tutorial06上执行了一个强缩放测试,其中求解了以下方程:u阿勒特v−u=uex,在[0, T]上 ,v=vex , 在 [0 , T] 上 ,u=u0,在[0,T]上,v=v,在第3章其中,选择f、g、u0和v0,使得精确解为t−uex(x,t)=tcos(πx0)cos(πx1)cos(πx2),vex(x,t)=e t<$x<$2.教程03: 非线性椭圆方程:−u+u2=f,in(−1,1)3.教程04: 非线性抛物方程:这 两 个 方 程 在 时 间 上 离 散 化 , 使 用 1 阶 u 和 3 阶 v 的BDFturbine,使用显式分区方案解耦,并使用非线性求解器类线性化。最后,对有限元空间离散化进行了讨论。拉乌−u+u2=f,in(−1,1)3×(0,T)。u(v)的线性(二次)元素的集合。 解决方案使用出现在第二个方程中使用QuadratureEvaluationFEM的能力进行评估。 网格尺寸包括Tutorial04_AD:与Tutorial04相同,通过自动微分组装雅可比矩阵。Tutorial05抛物方程组,整体求解:⎧⎪⎨∂u−∆u+u2=f,in(−1,1)3×(0,T],2,097,152个细胞(平均细胞直径:h0的情况。027)和19,121,282DoF(u为2,146,689,v为16,974,593),选择的时间步长等于Δt 0。1,并且模拟运行直到T1。可扩 展性测试 在CINECA( Intel CascadeLake 8260 ,2.40GHz)可获得的GALILEO100超级计算机上运行我们记录了总的模拟时间和在装配和线性求解阶段花费的部分时间;图3中显示了三个量的加速比。 5证实,在这样的基准上,⎪∂t−∆v+ uv= g,in (−1, 1) × (0, T].Tutorial06:与Tutorial05相同,使用显式分区方案并利用QuadratureEvaluationFEM功能求解。在这个问题中,主寿命x数据结构近似线性地扩展到4096个核。线性求解器的性能从大约512个核心开始缓慢下降,这可能是由于有限的问题大小。 表1报告了在1024个内核上运行Tutorial06的不同阶段的计算成本汇总。{ //Actullyparseparameterfile.params. intn=nums();//一个简单的方法来检测一个文件,//在一个虚拟的子空间中,读取文件,//和可能的方法来重新设置最小值,以处理最小值。//我想...我是一个很好的朋友。parse_parameters(params);}virtual voidrun()override{//Createmesh.//setupsystem.//Assemblesystem.//solvesytem.//Outputsolution.}私人:LinearSolverH和LerLinearSolver;//我想...};}{⎪⎨⎪Pasquale Claudio非洲软件X 20(2022)101252表88⎩0为0⎧⎪−µ∆u+∇p=0,inΩ,=在1024个内核上运行Tutorial06的计算成本总结片区第调用Wall Time占总数u的解算器:解算时间步1131.515秒百分之三点零五u的求解器:非线性求解器1129.460秒百分之二点八五u的求解器:预处理器组件+线性求解器3325.907秒2.51%u的求解器:系统装配443.365秒百分之零点三三u的解算器:线性解算器331.799秒0.17%v的求解器:求解时间步长11988.561秒百分之九十五点七九v:系统装配的求解器11956.339秒百分之九十二点六七v的求解器:正交求值FEM初始化110.000秒0.000%v的求解器:正交求值FEM重新初始化22,5280.020秒0.000%v的求解器:正交求值FEM求值443,418,624278.760秒27.32%v的求解器:预处理程序集+线性求解器1123.601秒2.29%v的解算器:线性解算器1113.897秒百分之一点三五总挂钟时间1031.991秒百分百3.2. 多域问题运行multidomain_stokes示例是为了演示lifex的多域功能的并行性能,特别是InterfaceMonitor类。解决的问题是Stokes模型:·u=0,单位为u= [1,0,0]T,在Γin上,u= [0,0,0]T,在r侧,µu·ν−pn=0,在Γout上,哪里=(− 0. 五,一。5)×(− 0. 五,零。5)×(− 0. 五,零。5),rin= {x= −0. 5},rout={x = 1. 5},Γ边 =(\(Γin 'out))o,并且ν表示向外的单位法线。通过定义为的接口,VLAN被分为两个子域VLAN0和VLAN1 作为图五、Life x的并行加速,在Tutorial06上演示。 的加速根 据 总 时 间 ( 红 色 ) 、 在 每 个 时 间 步 组 装 线 性 系 统 ( 包 括QuadratureEvaluationFEM字段的评估)所花费的时间(绿色)以及在每个时间步通过LinearSolvertool以及PreconditionerHandler包装器求解线性系统所花费的时间(蓝色)计算。(关于此图例中颜色的参考解释,请读者参考本文的网络版本。可以得出一些有趣的结论。首先,在用于分布的FE空间的正交节点处的u0=(−0. 五,零。5)×(−0. 五,零。5)×(−0. 五,零。5),0. 五,一。5)×(−0. 五,零。5)×(−0. 五,零。5),x= 0. 5}。用ui,pi表示子域上的解,,1,问题的多域公式如下:−µ⎪v的公式的cretization被调用了4.43亿次,u0=[1,0,0]T,关于Γin,这对组装阶段有很大的贡献(约占总时间的27%):尽管如此,如图所示。5显示,组装阶段仍然几乎完美地线性扩展,这证明类的QuadratureEvaluation层次结构的实现引入了几乎理想地并行扩展的计算开销。 此外,额外的开销从应用BDFBACK,非线性求解器,线性求解器,和预处理器包装器是可以忽略的,并不影响求解器这表明,生命x可以达到理想的并行加速,而抽象的数值助手和多物理场耦合接口使总的显着减少与只基于deal.II的简单实现相比,它的代码行数少得多,从而使用户可以专注于感兴趣的问题的简单离散公式,而不是技术数字和实现细节。ui= [0,0,0]T,在r侧上,u i=[0,0,0]T,μu1ν−pν=0,在Γout上,u0=u1,在n上,−µu0ν0−p0ν0,=µu1ν1+p1ν1,其中,关于速度的两个条件表示速度和应力在界面上的连续性。这个问题可以通过使用定点或单片方案来解决。本节的目的是演示Interfacetable类的性能。我们这样跑在每个子域上使用6,714,692个 DoF进行模拟,i0, 1(速度为6,440,067,压力块为274,625),导致界面处的DoF总数等于49,923。模拟需要40次定点迭代以满足增量规范上规定的公差10−6接口数据U1|- 是的⎨⎪·ui=0,在⎪⎩Pasquale Claudio非洲软件X 20(2022)1012529+不⎧⎪−=×]=×]⎪⎪⎨−+=×]=++=−表2在1 0 2 4 个 内 核 上 运行示例multidomain_stokes的 计 算 成 本 总 结 。42.2秒Problem inEQUIPMENT1:preconditioner assembly + linear solver 40 7.05e 03 s51%ProbleminEQUIPMENT1:system assembly 40 41.2 s0.3%总挂钟时间1.39e+ 04 s 100%表2报告了在1024个核心上运行multidomain_stokes示例的不同阶段的计算成本汇总。由于界面DoF的数量远小于体积DoF的总数,因此相对于组装和求解相关联的线性系统的阶段,在两个子域之间建立界面映射和传输解所花费的时间可以忽略不计这表明,与多域模拟相关的总体计算成本,例如在流体-结构相互作用(FSI)框架中因此,3.1节中所示的加速结果仍然适用于多域问题,无论是单片解决还是分区解决,只要并行分区的E10和E11是相当负载平衡的。3.3. 用户界面灵活性最后,为了证明利用life x中,我们使用对流Cahn-Hilliard方程(一种以存在四阶空间导数为特征的刚性、非线性、抛物型方程)提出了经历剪切流的二元流体的旋节分解模型[ 34 ]。Spinodal分解由分离的-两种或两种以上成分的混合物向两种成分的主体区域的扩散,例如,当两种或两种以上合金的高温混合物被快速冷却时发生这种情况。通过使用混合形式的FE对方程进行离散化,从而将其分裂成两个抛物-椭圆方程的系统c∂µdf(c)λ <$c0,in<$(0,T,Dc当τ_c·ν=0时,在τ_c×(0,T]上,当πμ·ν=0时,在π μ×(0,T]上,c=c0(x),在x× {0}中,其中f(c)100c2(1c)2,初始条件为:c0 ( x )0 的 情 况 。 630 的 情 况 。 01 sin( 2000πx1x2x3)。该问题在时间上使用全隐式格式通过BDFturbine进行离散化,并使用非线性求解器类进行线性化;在每个时间步长,利用自动微分计算雅可比矩阵,并使用带有AMG的GMRES求解相关的线性系统预条件子图图6示出了计算域上的稳态解。尽管上述问题的FE公式化的复杂性和用于其离散化的复杂的数值方案,但是在lifex中从头开始实现这样的新求解器所涉及的努力需要编写大约350见图6。 Tutorial 07中实现的Cahn-Hilliard方程的解。等值面对应于溶液c的值等于0.35(红色),0.5(绿色)和0.65(蓝色)。(For对本图图例中所指颜色的解释,读者可参考本文的网络版行C++代码(不包括注释和空白行)。这是一个非常小的数字,特别是考虑到用户在选择许多建模和数值特征方面具有巨大的灵活性,例如选择FE程度,设置计算域和物理参数,改变时间离散参数(包括BDF阶数),选择线性求解器和预处理器的类型以及相关参数等。4. 影响lifex的影响力和广泛适用性已经被大量引用它的期刊文章、预印本、会议摘要和博士论文所证明。使用lifex进行的计算研究已出现在多个领域,主要源于但不限于心血管建模:心脏电生理学
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功