英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料
关于有限元问题几何多重网格求解器的高级实现:大气建模中的应用
摘要
由于生成的算法和相应的计算机代码的复杂性,椭圆型偏微分方程(PDEs)的高效多网格预处理器的实现是一个挑战。对于非结构化网格上的复杂(混合)有限元离散,有效的实现可能非常耗时,并且需要程序员深入了解数据处理器上的数学理论、并行计算和优化技术。在本文中,我们展示了如何通过使用允许将算法的每个组件表达在正确的抽象级别的框架来大大简化定制多网格预处理器的开发。我们的方法:(1)允许以接近问题的数学公式的语言去表达有限元问题;(2)能够保证并行优化的低级计算机代码的自动生成和高效执行;(3)是灵活的,足以支持不同的抽象级别,并使程序员对预处理器的细节进行控制。我们使用Firedrake/PyOP2包的可组合抽象来演示这种方法在大气建模中解决强各向异性PDE的效率。PDE的弱公式以统一形式语言(UFL)表示,较低的PyOP2抽象层可以允许为定制的几何多网格预处理器手动设计计算内核。我们将此预处理器的性能与单级方法和hypre的BoomerAMG算法进行比较。Firedrake/PyOP2代码本质上是并行的,我们为ARCHER超级计算机上的单个节点(24核)提供了详细的性能分析。我们的实现使用了可用内存带宽的很大一部分,并且在高达6144个计算机内核上显示出非常好的弱缩放。
1 介绍
在科学和工程的所有领域都需要有效求解偏微分方程(PDEs)。这些求解器的设计和实施需要广泛的技能,包括但不限于:正在模拟系统的知识,制定和实施适当的数值计划,分析得到的线性和非线性算子,有效的低层次实施所选择的方案。因此,单个个体拥有全面的技能,很少能成功地提供算法和计算上有效的求解器。
为了解决这个多学科问题,需要软件框架,使科学家具有互补的技能和专长,以便与其他人员进行协作,需要对系统的全面了解。这可以通过仔细设计可以捕获模拟堆栈每个级别的自然抽象的可组合接口来实现。
一个重要的应用是由Navier Stokes方程描述的流体系统的模拟。与其他混合有限元法相比,比如泰勒-胡德(Taylor-Hood)元素,基于模拟有限元法的离散精确保留了正在研究的系统的某些物理性质。特别地,散度定理恰好适用于离散化算子;对于一些其他混合方法,如泰勒-胡德(Taylor-Hood)元素,情况并非如此。模拟方法重现了C-网格交错的有利特性,但允许使用高阶离散和非正交网格。这在全球大气建模应用中尤为重要,其中标准经度-纬度网格的“极点问题”在极点附近引入人工时间步长限制,并限制了代码的并行可扩展性。虽然模拟有限元方案在诸如数字气候和天气预报等应用中非常受欢迎,但其有效实施带来了重大挑战。为了在紧凑的操作时间尺度下提供预测,求解器必须具有算法稳健性,最佳地利用现代的多核芯片架构,并扩展到分布式存储器集群上的大型节点数量。
椭圆型偏微分方程(PDEs)出现在大气运动方程的隐式时间步长方法中,它们的解决方案经常形成完整型号代码的瓶颈。由于地球的大气层由薄的球壳所代表,因此得到的离散系统是高度各向异性的。这需要使用定制预处理器,特别是[5]中的张量乘法多网格方法已经证明算法有效。在结构化网格上实现低阶有限差分离散的多网格算法是简单的,但是对于复杂的几何形状,复杂的有限元离散不是这种情况,原因如下:由于HDiv(速度)质量矩阵不是对角的,迭代求解算法比相应的有限差分版本明显更多地涉及到。在有限元情况下,最内层的计算内核不能表示为简单的模板应用程序,并且为了在特定架构上实现最佳性能,必须优化循环嵌套,同时考虑硬件特定属性(如高速缓存布局)。在分布式存储器设置中,计算和通信的光圈交换和重叠需要仔细划分网格。Firedrake/PyOP2框架允许有限元运算符从它们的弱公式和高抽象级别的算法表达式自动组装。依赖于架构的优化的低级别C-代码自动生成并使用即时编译技术执行。
在本文中,我们讨论了Firedrake框架的扩展,以支持有限元问题的几何多参数求解器的开发。我们说明其用途,并研究所得方法的性能,用于开发用于大气运动方程的模拟有限元离散的几何多重网格求解器。这是一个具有挑战性的问题,也是开发抽象的一个很好的测试案例,因为实施有限元方案和设计高效多网格方法既不平凡。我们通过干净地分离模型的不同方面来展示我们的方法如何简化求解器的实现。特别地,我们演示了所选抽象如何允许容易地实现对于块-雅可比平滑器而言至关重要的列-局部矩阵表示。对于强各向异性问题,这种更平滑的算法是最优的,[5]中的张量乘积多重算法的关键成分。细致的性能分析证实,我们的实现是有效的,因为它在带宽绑定应用程序中使用了很大一部分系统的峰值性能。
实现有限元求解器的另一种非常成功的方法是使用模板化的C 代码[11-13]。这允许用户完全控制算法的所有组件,并且已经在DUNE[14]和deal.II [15]中实现了用于有限元分离的多网格解算器。然而,关键的计算内核(如操作员的弱本地应用程序)必须手动编写,任何优化都受可用编译器的功能限制。相比之下,使用特定领域的编译器来进行优化的一些框架,比如FEniCS[16]和Firedrake这样的框架,这些框架的优化对于通用编译器来说不能执行相同算法的低级表示[17]。与FEniCS相比,在表达非有限元运算的情况下,程序员需要明确管理所有的并行和网格迭代,我们的方法之一就是在PyOP2 [9]中直接地实现作为计算内核的任何局部操作。这对于这项工作中考虑的预处理者至关重要。
本文的结构如下:在第2节中,我们简要介绍了Firedrake软件框架。 第3节阐述了多网格方法的数学抽象,以及我们如何组织它们周围的软件抽象。 我们的模型问题的多网格方法,大气重力波在第4节中讨论。我们在第5节描述所得到的方案的性能,并在第6节中得出结论。
主要成果 我们演示ARCHER超级计算机上求解器的性能和并行可扩展性,并将我们的几何多网格实现与基于PETSc库的矩阵显式实现进行比较。在后一种情况下,我们使用来自套件的BoomerAMG预处理器来解决DG-压力系统。 我们展示了本文中处理的低阶离散解的求解器的性能是记忆限制,并通过对存储器流量的详细分析来量化我们的求解算法中最多计算密集型内核的绝对性能。我们发现计算上最昂贵的内核使用了峰值存储器带宽的很大一部分。
2 Firedrake/PyOP2:有限元方法的抽象
Firedrake是通过有限元方法解决偏微分方程的Python系统。它基于FEniCS项目中引入的抽象,提出了一个高级,自动化的问题解决环境。Firedrake强制使用有限元方法,实现数学运算符的局部离散化以及它们在网格上的并行执行之间的重要分离。使用迭代抽象层PyOP2执行网格上的内核执行。该图层显式地暴露给模型开发人员,并允许它们在网格上编写和执行自定义内核。关键的观察是,大多数仅在有限元素抽象之外的操作仍然可以被表达为在某些网格实体集合上执行局部操作,这些操作可以表示为PyOP2并行循环。这个单独的抽象层可以允许用户担心本地操作:PyOP2自动执行并行化,就像Firedrake本身中的有限元素内核一样。Firedrake和PyOP2之间的相互作用的更多细节可以在[10]第4节中找到。
3 Fredrake中的多网格
多网格方法[23]是解决许多PDEs的算法最佳方法,特别是涉及椭圆型运算符的方法。他们依靠尺度的层次来以适当的尺度廉价和高效地计算系统的属性:可以仅使用几个自由度来精确地表示在空间上变化缓慢的模式,并且因此最好在粗网格上求解,而快速模式需要较高的空间精度。在这里,我们简要地提供一个关于双栅格设置的数学运算的概述,然后描述我们在Firedrake中的实现。
令为“粗”网格上的近似空间,并且为精细网格上的空间,这些不一定必须嵌套,尽管实现方式如果是简化的。完整的多网格循环由几个基本操作员构建。在算法1中,给出了线性系统,在两个层次上显示了校正方案多网格(因此在粗网格上求解精细网格方程)的形式。递归到多个级别递归地应用这个两级循环来计算。这个设置表明我们需要提供计算限制和延长的设施。我们还需要计算粗网格运算符的能力,我们需要能够应用更平滑(有效的某种形式的线性求解器)。在清单1中,我们展示了这个抽象框架如何在Firedrake中实现一个简单的二维示例。我们能够利用现有的设施进行绝大多数的实施,我们只需要一些扩展来处理网格层次结构和转移,我们在下面讨论。
3.1 网格层次结构
很明显,我们需要的第一个对象是网格(或网格,按照Firedrake的说法)的层次结构。这将封装细化网格之间的关系(提供与粗网格单元相对应的细网格单元的信息)。这些由解空间Firedrake的对象MeshHierarchy提供。类似地,我们将需要表示离散的解空间Firedrake,为此将使用对象FunctionSpace,我们用FunctionSpaceHierarchy来扩展它们。与MeshHierarchy一样,它封装了相关网格上的函数空间之间的关系(允许我们确定细网格中与粗网格单元相关的自由度)。我们注意到,在这项工作中,我们只处理分级细化的网格。这并不影响我们讨论的抽象,尽管它简化了一些实现。
3.2 限制和延长
嵌套有限元空间特别简单地实现了限制和延续。为了计算限制运算符,我们使用FIAT来评估细网格上的节点上的粗基。这允许我们以细胞基函数的线性组合来表达粗细胞基函数。由于网格被定期地改进,我们只需要这样做一次,并且可以对所有单元使用相同的加权。然后可以简单地通过使用PyOP2并行循环(在Firedrake接口中暴露为限制)将该组合内核应用于给定的剩余来简化限制操作符。以相同的方式,我们计算从到的内插,这只是使用FIAT的自然嵌入,并且使用PyOP2在网格上应用内核。
3.3 粗网格运算符
使用Firedrake和UFL的现有设施,形成粗网格运营商是直接的。通过将UFL表达式用于精细网格运算符并将其组装在粗网格上(这一步通过使用在清单1中coarsen_form的操作来实现),我们可以轻松获得重新扫描的运算符。这些重新操作的操作员具有最小的模板。此外,通过在适当的粗略级别上以符号方式显式地定义操作符并在平滑器中使用它们,也可以简单地提供更简单的操作者(可能抛出不对粗网格贡献的耦合)。
3.4 滤波器
Firedrake使用PETSc为线性系统提供求解器。因此,对于组装的矩阵,我们可以使用PETSc所提供的任何线性求解器作为一个滤波器。在清单1中,例如,我们使用两个预处理的雅克比Richardson迭代作为前平滑器,用完全解决粗略问题,然后使用三个预处理的Richardson迭代作为后平滑器。当然,我们可以自由地实现自己的平滑,也许我们没有组装的矩阵,因此不能使用“黑箱”更平滑。事实上,实现最佳性能的关键因素是使用正确的更平滑。这在我们在本文的其余部分讨论的张量产品多网格方案中是特别重要的,因为组合的运算符不是可利用的,并且我们希望在更平滑的问题中存在问题的结构(强垂直各向异性)。
4 (模拟)混合有限元的张量产品多网格
为了说明这些抽象的力量,我们认为气象应用的重要模型系统:全球大气中线性重力波传播方程。PDEs的相应系统用混合有限元离散化离散化。这个问题解决了一个代表地球大气层的薄球壳。大气的厚度比地球的半径小几个数量级。该领域的平坦度对于大气建模中的应用是典型的,并且引入强的栅格排列各向异性。我们将看到,对于混合有限元离散化,这个问题比清单1所示的简单示例要复杂得多。因此,我们将使用它来表征我们的多网格实现的性能,并验证我们已经公开了正确的抽象。为了使线性求解器快速收敛,必须在预处理器中正确处理各向异性,主要挑战是实现最佳平滑。PyOP2抽象级别允许在定制的数据结构和低级内核方面表达更平滑,实现线剥离方法是利用垂直各向异性的关键。
由于我们解决的PDEs是椭圆型的,所以一个选择是使用代数多网格(AMG)预处理器。在高度各向异性的领域,必须特别注意构建粗网格运算符和平滑器,以实现网格独立性。参见示例[26],其中作者使用平滑聚合AMG来在冰盖动力学背景下求解非线性斯托克斯方程时对速度块进行预处理。为了考虑强各向异性,聚合策略适应于维持自由度的柱结构,并且使用基于不完全因子分解的更平滑。 AMG方法可能并不总是令人满意的原因有很多。AMG预处理器只能使用Galerkin粗网格操作符,因此粗网格模板会很大。更重要的是,除非特别注意,否则粗化操作不一定会遵守问题固有的各向异性,这可能导致次优算法性能。最后,我们在[6]中发现,如果将其应用于使用有限体积法离散化的简化模型方程,则基于[5]的张量乘积多网格的定制预处理器优于基于AMG的方法;实际上,几何多重网格方法要比DUNE和hypre库中的黑盒子AMG的实现快上10倍。
此外,张量产物预处理器可以显示为栅格对齐各向异性的最佳选择。在最近的一篇文章[8]中,我们还在数值上表明,该方法在较一般情况下适用于大气应用。这些令人鼓舞的成果激励着我们研究这项工作中报道的几何多网格实施。
4.1 数学公式和混合有限元离散化
接下来的压力为,速度为,浮力为的线性重力波问题可以通过对大范围大气流动的全Navier-Stokes方程进行线性化来获得:
(1)
为了简单起见,我们假设声速和浮力频率是常数,并且在大气的上下界强制为(强)边界条件
(2)
区域可以表示为张量积,其中是具有半径的球体的二维表面。如上所述,区域非常平坦,比如,。 为了构建模拟有限元分离的函数空间,考虑以下一维,二维和三维的以下德拉姆(de Rham)复合体:
(3)
我们用下列式子寻求方程(1)的解
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[136736],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。