ParMooN–基于映射有限元的现代化程序包外文翻译资料

 2022-08-09 20:28:32

英语原文共 15 页,剩余内容已隐藏,支付完成后下载完整资料


ParMooN--基于映射有限元的现代化程序包

摘要:

ParMooN是求解椭圆和抛物线型偏微分方程数值解的程序包。它继承了其前身MooNMD的显著特征(John和Matthies,2004):几何空间和有限元空间的严格解耦,在教科书中可以找到的定义的映射有限元的实现,以及一个几何多重网格预处理程序,其可以在多重网格层次结构的不同层次上使用不同的有限元空间。在对内部研究代码进行了一些思考之后,本文着重讨论了分布式内存环境的并行化问题,这是ParMooN的主要创新之处。通过在计算服务器上进行的数值研究,评估了并行几何多重网格预处理程序的效率,并与PETSc库中提供的一些并行求解程序进行了比较。这些研究结果首次显示并行几何多重网格方法繁琐实现的价值。

01 简介

MooNMD是一个基于映射有限元的椭圆和抛物线型偏微分方程数值解的C 程序包,详情可见于[1 ]。这个软件包的一个现代化版本,叫做ParMooN,最近被开发出来作为将来的研究代码使用。

MooNMD的核心代码设计距今已经超过15年了,这个代码已经成功地应用于许多科学研究中。已经有近90篇研究文章通过[1]引用了MooNMD,见[2]。硬件和语言标准的新发展要求重新设计和实现一些核心程序。而因为有了新的核心代码和新的特性,该程序被重命名为ParMooN(并行的数学和面向对象的数值计算软件)。

本文的总体目标是报告,以实现将在第2节中阐述的内部研究代码的预期功能为目的的新软件包ParMooN的现有研究代码的开发情况,并通过将其与外部库中可用的求解器进行比较来评估并行化的几何多重网格方法。前一版本的代码具有一些应被ParMooN的所继承的独特功能,例如,几何空间和有限元空间的严格解耦,在教科书中可以找到的定义的映射有限元的实现,以及一个几何多重网格预处理程序,以及多重离散化多级(MDML)预处理器。本文重点介绍与ParMooN的开发最相关的方面,即分布式内存并行化。特别的,讨论了技术上最繁琐的部分,也就是几何多重网格的并行化。

本文的主要贡献是,对并行几何多重网格方法进行了首次评估,并与可以从PETSc库进行中调用的线性方程组并行求解器进行了比较。该数值计算的研究是在计算机服务器上可用的内部硬件中进行的。我们认为,此评估对于其他开发了自己的代码的研究课题组也很有意义,有利于他们评估是否值得使用并行化几何多重网格方法。数值研究中考虑了ParMooN支持的两类主要问题:标量对流扩散反应方程和不可压缩Navier-Stokes方程。

论文的结构如下:第2节包含我们对内部研究代码的思想的阐述,特别是关于其优势和目标的思想。在MooNMD / ParMooN中使用的映射有限元是在第3节中介绍。第4节介绍了并行化的主要方面。几何多网格方法的并行化将在第5节中简要讨论。第6节介绍了将这种方法与PETSc中可用的求解器进行比较的数值计算研究。论文以总述来收尾。

02 有关内部研究代码的一些注意事项

如今,研究界中存在几种用于求解偏微分方程的学术软件包。它们通常由研究小组开发和支持,对于这些研究小组来说,软件开发是主要的科学任务之一。这样的软件包包括Deal.II [3],FEniCS [4],DUNE [5,6],OpenFOAM [7]或FreeFem [8]。

这些程序包具有高级功能和支持功能,例如自适应网格细化,并行化计算等等。自然,内部开发的研究代码所具有的功能少于这些大型程序包。在思考了其可用性以后,就产生了以下的问题:为什么值得开发自己的研究代码?特别是,是否有必要在主要致力于数值计算的研究小组内开发代码?下面,主要根据我们自己的经验,来就相关问题提出一些论点。

要深入了解软件细节。使用研究小组其内部开发和维护的代码,第一个关键方面是,能掌握该软件结构的详细知识。实际上,应用数学家经常致力于数值计算方法的发展。而必须要先实现这些方法,才能够评估这些方法,并进一步将其与现在流行的方法,在相同的问题中进行比较。有意义的评估,要求在同一代码中使用这些方法。在这方面,重要的是可以接触自身熟知的代码,并控制代码的每个细节。

为简便起见,仅举一个例子,来说明了解软件包详细信息的重要性。该例子涉及对Stokes-Darcy问题的子域迭代中适当接口条件的解释,请参见[9]。标准Neumann界面条件只能用于不切实际的大粘度和渗透系数。对于实际系数,必须使用适当的Robin边界条件。Robin接口条件的实现是以直接方式在MooNMD / ParMooN中完成的。

灵活性。 自己的研究代码的进一步的优点是可以控制其核心部分代码和使用上的灵活性。特别地,对于我们的研究而言,代码能够支持使用不同的离散化策略非常重要。例如,MooNMD被设计用于有限元方法。 但是,为了研究[10]中随时间变化的对流扩散方程的离散化,也采用了有限差分法。由于这些方法的效果非常好,因此之后它们又被使用在模拟定义于张量积域的人口平衡系统的前后关系,例如[11]。

数值方法测试。 在[12]中,MooNMD用于定义基准问题。示例的列表可以被进一步扩展。此外,在我们的研究代码中已经发展并实现了许多其他数值计算方法,结果证明这些方法并不具备竞争性,例如SUPG方法中稳定参数的优化,在[13]中。拥有已知的、灵活的研究代码用来随机应变,就可以测试和支持在实现中的、尚未详细进行基准测试的方法。

当然,上面提到的大型程序包也允许实现不同的方法和离散化策略。但是,我们认为成功的实现,通常需要与软件包的核心开发人员进行非常密切的互动。对于用户和开发人员而言,这都不太可能。 因此,使用自己的代码可能会减少从开发到评估数值方法的时间。

对学生的好处。 与核心开发团队的互动有关的另一个方面涉及参与代码开发和使用的学生和研究组内的在读博士生。由于自己的研究代码的核心开发人员随时可用,并且他们是该小组所从事的研究内容方面的专家,因此可以有效地为这些学生提供支持。此外,从事代码工作的学生还说出了一些其他的积极的效果:在实现细节上的工作有助于深入了解该数值方法和算法,这对于分析其属性非常重要,并且可以提高软件设计和管理的技能。

当然,将学生纳入代码开发中,需要使得代码能够简单地被使用,并易于访问基本程序,例如在有限元求解器中整合矩阵的组装和线性方程组的求解。这个问题已经触及了下一个问题:对于自己的研究代码应该有什么期望?

易于使用。 为了支持学生开始使用该代码,简单的安装和基本的测试设置至关重要。甚至有一些成功的设计复杂代码的尝试,其中的这些代码可用于在基础课程中辅助教授偏微分方程数值方法,例如使用Matlab所谓的研究不可压缩流动问题的计算机实验室(IFISS),参见[14]。还有开源软件FreeFem [8],该软件基于自己的语言。

模块化。 该代码应该是模块化的。 特别是应该有一个通用核心,从而能够将各个项目都依附到该核心上。当然,项目使用核心程序。 但是,使用自己的代码似乎比使用在其他地方开发的大型程序包要容易得多,并可以将项目的贡献整合到通用核心中。

稳定性。 关于代码所需的稳定性,我们认为自己的研究代码与大型软件包之间没有根本区别。

效率。 但是,人们对效率有不同的期望。 研究代码应在许多方面保持灵活性,因为它的主要任务包括支持数值方法的发展和获得数值分析的结果。例如,在代码MooNMD / ParMooN中,实现了映射有限元的概念,请参见第3节。这样,代码目前支持约170个二维有限元模型和75个三维有限元模型。当然,所有程序是针对常规情况来实现的。 对于某些有限元模型,这可能不如为其量身定制的程序有效。但是,对于研究代码而言,效率也是不容忽视的关键属性。 例如,对不可压缩湍流的标准学术基准问题的模拟需要计算较大的时间间隔,以收集我们感兴趣的统计信息的平均值。我们认为,自己的研究代码在可用的内部硬件上应该是相当有效的,在我们的情况下,内部硬件通常是笔记本电脑,计算服务器或小型集群。

03 映射有限元空间

MooNMD / ParMooN中有限元方法的实现是一个基于相当抽象的有限元空间的定义,以及每个网格单元到参考单元的映射。

设Omega;sub;,disin;{2,3}为有界域,设为Omega;的可容许三角剖分,其中Omega;由紧凑的、简单连接的网格单元组成。对于每个网格单元K,局部有限元空间P(K)sub;(K),sge;0,由基为的函数的有限维空间张成。此外,给出了一组局部线性泛函。空间P(K)对泛函是不可解的。通常,选择所谓的局部基,即满足() = ,其中i, j = 1, . . . , 。局部线性泛函可以是函数或它们的导数在某些点,K上或K面上的积分的值。假定, . . . , : {v isin; (Ω) : v isin; P(K)} → R为连续线性函数,其中v isin; P(K)必须以v为K内部的多项式并将其连续扩展到K的边界的方式来理解。每个函数对(K)的限制定义了一组局部函数。所有网格单元的并集,其中pisin;p()与(p)0,将用表示。现在,全局有限元空间定义如下。如果对于所有K1, K2 isin; ,有(v )=(v ),那么,用v isin;P(K)定义在Omega;上的函数v(x),对于所有Kisin;,被称为关于函数的连续函数。这个空间 S = 被称为有限元空间。S的全局基是由条件 isin; S , () = 其中 i, j = 1, . . . , N.定义的。

使用此定义实现有限元空间需要:

(1)每个K的局部基和线性泛函的定义。

(2)一种方法的实现,该方法可确保有关S定义中所述功能的连续性。

可以通过映射或未映射这两种不同的方式实现第一个要求。在无映射方法中,局部基和线性泛函直接在K上定义。相反,映射的有限元与分析有限元离散化的标准方法紧密相关。 该分析包括三个步骤:

bull;将任意网格单元K映射到紧凑的参考网格单元Kcirc;。

bull;在Kcirc;上证明所需的属性,这是分析的核心。

bull;将参考网格单元Kcirc;映射回K,以获得最终结果。

因此,此方法具有两个主要功能:

bull;所有注意事项仅需在Kcirc;上完成。

bull;关于K的相邻网格单元的信息既不可用,也不是必需的。

如果等参变换:Kcirc;→K对于给定三角剖分的每个网格K都是仿射的,则映射和未映射的有限元方法具有相同的分析属性,例如,比较[15,第一章。 2.3]。在非仿射映射的情况下,例如,对于由任意四边形或六面体网格单元组成的三角剖分,映射和未映射的有限元空间可能会有所不同。在MooNMD / ParMooN中,映射有限元的概念是通过以下方式实现的。参考网格是单位体,例如在二维中具有顶点(0,0),(1,0),(0,1),单位立方体Kcirc; = [-1,1。 仿射变换可用于所有参考网格。考虑到任意四边形和六面体的情况,还为单位立方体实现了d线性映射。根据不同的参考单元,Kcirc;上的局部空间,线性函数和等参变换,MooNMD / ParMooN当前支持170个二维有限元和75个三维有限元。

映射有限元空间的使用本质上要求在等参元上实现有限元。由于物理单元上的积分会转换为参考单元上的积分,因此必须仅在这些单元上执行用于数字积分的正交规则。注意,相同的策略也适用于处理单元格面,这些单元格面通过相应的等参变换映射到低维参考单元上。

关于上述(2),有限元空间S由称为d.f.-manager的映射F表示,该映射F将局部(即,单元内)的自由度(d.o.f.)索引映射为全局索引。为此,将M(K)定义为在单元格K上由(K,i)表示的局部d.o.f.的集合。然后定义所有局部自由度的集合。

M := M(K).

每当局部自由度(K,i)和(Krsquo;,j)属于相同的全局自由度的时候,局部到全局图的F映射将M映射到{1,...。 。 。 ,N},其中F ((K, i)) = F ((K ′ , j))。Nle;| M |是全局自由度的数量。 换句话说,F描述了集合M的分区P(即等价关系)以及全局编号。 通过ParMooN中的算法1完成这种映射F的计算。

算法1:将局部自由度映射到全局自由度的F的计算。 输入是网格,其网格K通过不断增加的整数id(K)来进行排序。(以下是伪代码翻译)

1 Plarr;M的最细分区

2 for 所有网格单元 K isin;

3 确定M(K)

4 for id(K)lt;id(K)的K的所有邻居K

5确定M(K)

6找出M(K)cup;M(K)的局部分区

7 Plarr;比P和更粗糙的最细分区

8为分区P中的每个子集分配递增的整数

最初,该分区被设置为集合M的最细分区,即,它由不相交的单元素子集组成,因此尚未识别M中的两个自由度。算法1中的步骤6包括在两个相邻小区K和K中找到相同的自由度,即,M(K)cup;M(K)的局部分区。使用等参单元中的自由度位置信息和定制的映射器类来完成此步骤。步骤7更新分区P,以使先前集合P和中的所有集合都包含在更新的分区P中的一个集合中。最后,对M的每个分区的每个集合,分配一个唯一的整数,该整数将用作全局自由度(的索引)。在下面的示例中将详细说明步骤6和7。

Example 1.略

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[238601],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。