基于多文件流的有限元两级分区两次缩聚并行方法
技术领域
本发明涉及一种并行有限元分析方法,具体是一种基于多文件流的有限元两级分区两次缩聚并行方法。
背景技术
有限元方法作为工程数值分析的一种有力工具,广泛应用于航空航天、造船、机械、建筑等部门,在工程设计和分析中得到了越来越广泛的重视,已经成为解决复杂工程计算问题的有效途径。然而对于大型复杂系统,由于计算规模巨大,求解复杂,采用传统串行有限元分析方法难以克服所需内存空间大,求解时间长的问题。利用并行计算机研究和开发相应的并行算法则为这类问题的解决提供了切实可行的方法。
在并行算法方面,区域分解方法在同时单独形成各子区域总体刚度矩阵和外部载荷向量的基础上,通过静态缩聚消去内部自由度以降低界面方程的阶数,求解界面方程后各子区域可同时回代求解内部自由度以及计算应力、应变。然而对于大规模有限元数值分析,随着子区域数目的增多,界面方程阶数和条件数也随之急剧增大,从而给其求解带来困难。另外在并行求解界面方程的过程中,传统区域分解方法往往面临全局通信过多的问题,由此各个进程在求解过程中产生的通信开销和同步开销的增加也会极大地降低并行计算效率。
从硬件上来说,目前大规模并行计算机采用分布式存储体系结构,其典型特征是:位于同一节点内的不同处理器之间通过局部总线相连,通信速率很高;而位于不同节点之间的处理器通过高性能网络相连,通信速率相对较低。故要提高大规模并行计算机的并行计算效率,就要尽量将通信限制在各节点内部,并尽可能减少不同节点之间的通信。如何构造合适的并行算法使之与目前大规模并行计算机的体系结构相适应以提高并行计算效率成为迫切需要解决的问题。
经对现有技术文献的检索发现:YangYS等在JournalofComputinginCivilEngineering,2012,26(4):457-464上发表文章“Improvingparallelsubstructuringefficiencybyusingamultilevelapproach”(“通过多级方法提高并行子结构化效率”,土木工程计算期刊,2012,26(4):457-464),该文通过构造多级子区域来减少界面方程的求解时间,进而提高系统整体的并行计算效率。但该方法在实际应用中受到很大的限制,一方面是由于多级子区域的构造相当复杂,并行程序设计比较困难;另一方面,最主要的原因是由于该方法没有充分考虑目前大规模并行计算机的体系结构特点,造成处于同一等级的不同子区域间以及相邻等级的不同子区域间通信比较频繁和复杂,最终得到的并行计算效率也不是太理想。
发明内容
本发明针对现有技术的不足,提出一种基于多文件流的有限元两级分区两次缩聚并行方法。该方法在实现分布式数据存储的基础上,通过最大限度地实现通信局部化,能够充分利用目前大规模并行计算机体系结构的特点提升大规模有限元并行计算效率。
本发明是通过以下技术方案实现的:
基于多文件流的有限元两级分区两次缩聚并行方法,包括如下步骤:
第一步,经分区软件将结构有限元模型剖分为N个初始子区域,并将每个初始子区域的单元、节点和载荷信息单独保存在一个文件中,其中N为单个节点机内处理器核数的整数倍;
所述初始子区域是指经分区软件对结构有限元网格直接剖分得到的所有子区域,这些子区域内的单元数目和节点数目大致相等,并且保持交界面上的节点数最少。
第二步,进行并行计算的各进程同时并行读取相应初始子区域文件信息,然后同时单独形成每个初始子区域的系统方程,并经过缩聚消去每个初始子区域内部自由度,得到仅与边界自由度相关的各初始子区域的界面方程;
所述内部自由度是指和子区域内部节点相关的自由度,仅从属于一个子区域独有的节点称为子区域的内部节点;边界自由度是指和子区域边界节点相关的自由度,同时从属于两个或多个子区域的节点称为子区域的边界节点。
所述系统方程对静力系统是指用子区域总体刚度矩阵和外部载荷向量表示的静力平衡方程;所述系统方程对动力系统是指用子区域广义总体刚度矩阵和广义外部载荷向量表示的等效静力平衡方程。
所述界面方程是指子区域通过缩聚消去内部自由度后得到的仅与边界自由度相关的方程,所述界面方程左端项为凝聚得到的子区域等效刚度矩阵,右端项为凝聚得到的子区域等效外部载荷向量。
第三步,每个节点机内的局部主进程通过组集位于同一节点机内的所有底层初始子区域界面方程形成各顶层组装子区域系统方程,再经过缩聚消去每个组装子区域内部自由度,得到仅与边界自由度相关的各顶层组装子区域的界面方程;
所述顶层组装子区域是指把位于同一节点机内的所有底层初始子区域组装在一起,并只保留初始子区域边界节点信息生成的新子区域。顶层组装子区域仅由底层初始子区域的边界节点组成,并且没有单元信息,其系统方程通过组集位于同一节点机内的所有初始子区域的界面方程形成。
第四步,各节点机内的局部主进程通过相互通信利用并行预条件共轭梯度算法求解组装子区域界面方程,得到各组装子区域边界自由度后,同时回代求解其内部自由度;
所述并行预条件共轭梯度算法的预条件子为各组装子区域的局部预条件子,并通过其局部schur补矩阵(舒尔补矩阵)构造。并行求解时不需组装形成组装子区域总体界面方程,各组装子区域的有效刚度矩阵和有效外部载荷向量仍分布式存储在各个节点机上,中间计算结果也以矩阵和向量积的形式分布式存储。局部通信只存在于相邻子区域间,只有少量的点积操作和整体迭代误差的计算需要全局通信。
第五步,每个节点机内的局部主进程将包括内部自由度和边界自由度值在内的所求顶层组装子区域的结果发送给位于同一节点机内的底层各初始子区域,底层各初始子区域从接收结果中提取自身边界自由度值,再回代求解内部自由度以及计算应力、应变;若迭代结束则输出结果,否则重新从第二步开始执行。
与现有技术相比,本发明具有以下优点:
(1)无论初始子区域还是组装子区域的数据信息均可通过多文件流的方式存储在相应的各个节点机上,从而利用大规模并行计算机分布式存储的特点实现存储局部化;
(2)两级分区两次缩聚并行方法在一级子区域的基础上通过二次缩聚进一步降低了界面方程的阶数,有利于减小方程的条件数,加快迭代收敛速度;
(3)由于组装和回代过程求解过程均在同一节点机内进行,可将大量局部通信集中在各节点机内部,充分发挥大规模并行处理机节点机内通信速率较高的优势;
(4)位于同一节点机内的所有底层初始子区域经组装后每个节点只生成一个顶层组装子区域,这样每个节点就只有一个进程参与全局通信求解最终生成的界面方程,从而尽可能减少了不同节点机之间的全局通信。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明多文件流两级分区两次缩聚并行计算流程图;
图2为本发明实施例中的结构有限元网格示意图;
图3为本发明实施例中的网格剖分示意图;
图4为本发明实施例中的两级分区构造示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
如图1所示,基于多文件流的有限元两级分区两次缩聚并行方法整体流程主要包括:首先经分区软件将结构有限元模型剖分为N个初始子区域,并将每个初始子区域的单元、节点和载荷信息单独保存在一个文件中;接着各进程同时并行读取初始子区域文件信息形成每个初始子区域的系统方程,并经过缩聚消去其内部自由度;然后通过组集初始子区域界面方程形成各组装子区域系统方程,再进行缩聚消去内部自由度;接着利用并行PCG算法求解组装子区域界面方程,然后回代求解其内部自由度;最后将所求结果包括组装子区域内部自由度和边界自由度发送给底层初始子区域,各初始子区域从接收结果中提取自身边界自由度值,再回代求解内部自由度以及计算应力、应变。
本实施例中的结构有限元网格示意图如图2所示,平板左端固定,右端受均布载荷作用。材料的弹性模量为2.1e5MPa,泊松比为0.3。并行计算的硬件条件为:启动2台节点机,每个节点机内具有2个处理器内核,节点机间通过高性能网络互联。
下面按照系统求解的先后顺序依次作详细介绍:
第一步,利用分区软件将图2中的结构有限元模型剖分为4个初始子区域,并将每个初始子区域的单元、节点和载荷信息单独保存在一个文件中。如图3所示剖分生成的4个初始子区域分别为:初始子区域0,初始子区域1,初始子区域2,初始子区域3。
第二步,将节点机内的4个处理器内核分别编号为:核0、核1、核2和核3,然后如图4所示将编号为0到3的4个初始子区域分别分配到与其编号相同的4个处理器内核上单独处理。各处理器内核同时并行读取相应初始子区域文件信息,形成每个初始子区域的系统方程,然后采用改进乔列斯基分解方法对子区域刚度矩阵进行分解实现缩聚过程以消去其内部自由度,得到仅与边界自由度相关的各初始子区域的界面方程;
采用改进乔列斯基分解实现缩聚的基本公式为:
对于每个子区域,其刚度矩阵可分解为:
式中:分块刚度矩阵K中下标I代表内部自由度,下标B代表边界自由度;L为单位下三角矩阵,R为矩形矩阵,I为单位矩阵,D为对角矩阵,K*为对称矩阵。
由矩阵乘法的基本定理得:
每个子区域仅与边界自由度UB相关的界面方程可表示为:
式中:为有效刚度矩阵,为有效载荷向量。
有效刚度矩阵和有效载荷向量可根据下式计算:
式中:PI为内部自由度对应的外部载荷向量,PB为边界自由度对应的外部载荷向量。
第三步,如图4所示组装子区域的处理器任务分配为:节点机1内的核0负责组装子区域0的组装和处理,节点机2内的核2负责组装子区域2的组装和处理。具体组装和处理过程如下:
核0将位于节点机1内的初始子区域0和初始子区域1组装在一起,并根据初始子区域0和初始子区域1的界面方程形成组装子区域0的系统方程,然后通过改进乔列斯基分解方法实现缩聚过程以消去其内部自由度,得到仅与边界自由度相关的组装子区域0的界面方程。
核2将位于节点机2内的初始子区域2和初始子区域3组装在一起,并根据初始子区域2和初始子区域3的界面方程形成组装子区域2的系统方程,然后通过改进乔列斯基分解方法实现缩聚过程以消去其内部自由度,得到仅与边界自由度相关的组装子区域2的界面方程。
第四步,核0和核2通过相互通信利用并行预条件共轭梯度算法联立求解组装子区域0和组装子区域2组成的界面方程,得到组装子区域0和组装子区域2的边界自由度后分别回代求解其内部自由度;
第五步,核0将组装子区域0所求结果包括其内部自由度和边界自由度值发送给节点机1内的初始子区域0和初始子区域1,初始子区域0和初始子区域1分别从接收结果中提取自身边界自由度值,然后回代求解其内部自由度以及计算应力、应变;核2将组装子区域2所求结果包括其内部自由度和边界自由度值发送给节点机2内的初始子区域2和初始子区域3,初始子区域2和初始子区域3分别从接收结果中提取自身边界自由度值,然后回代求解其内部自由度以及计算应力、应变。
上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。