首页 理论教育 程序结构简介:层次分明、清晰明了的编程架构

程序结构简介:层次分明、清晰明了的编程架构

时间:2023-06-29 理论教育 版权反馈
【摘要】:前处理分区模块又由partition、getpart、spart、sgetpart 4个元件程序组成。图14.6PEEPG系统中非线性动态问题求解流程框图bft元件由bftm和bfts两个程序组成。E元件程序用于单元计算,包括单元刚度矩阵,单元质量矩阵和单元载荷计算,并把它们由结点自由度表示转换成代数方程组的变量表示,同时处理边界约束条件,并形成代数方程组的系数矩阵和右端项。

程序结构简介:层次分明、清晰明了的编程架构

并行程序与串行程序在运行过程中具有本质上的不同,串行程序的代码只有一份,运行过程中也只启动一个进程来运行这份程序代码;并行程序同样只有一份代码,但是在运行过程中根据用户的需要,系统启动多个进程来运行这份代码的多个副本,程序代码根据进程号的不同而执行不同的程序功能,一般称零号进程为主进程,其他进程为从进程(或子进程),主进程和从进程执行不同的程序功能。

根据区域分解法的特点,图14.6给出PFEPG系统中一般非线性动态问题求解程序的流程框图。从以上流程图可以看出,PFEPG系统生成的程序,除solv元件程序外,在从进程之间没有通信,信息交换只发生在主进程和从进程之间。

前处理分区模块又由partition、getpart、spart、sgetpart 4个元件程序组成。该模块的功能是根据用户提供的前处理数据将整个求解区域根据用户的要求合理划分成若干个子区域,其中partition元件由主进程运行,负责将整个区域内的结点进行分区,给出各子区域所包含的整体结点号,局部结点编号和整体结点编号的对应关系,并将各子区域的一些前处理信息,包括结点数、时间信息等,以及各区域所含结点的坐标值分块发送给与各子区域对应的从进程,而从进程运行spart元件接收来自主进程partition元件的坐标值;getpart元件也是由主进程来运行,它的主要功能是根据partition元件提供的各子区域所含结点信息得到各自的局部单元信息、初边值信息、结点ID信息以及各子区域结点的各自由度对应的整体方程号等,并发送到相应的从进程,而从进程将运行与之对应的sgetpart元件进行接收。

在经过前处理分区模块之后,已经得到了各子区域相应的前处理数据,开始执行各子区域各自的计算模块。首先执行的是start元件程序,该元件给出每个结点的各个自由度与将来要形成的代数方程组的变量(即方程号)的对应关系(即哪个结点哪个自由度将要对应方程组的哪个变量),并得到整体刚度矩阵的存储格式,该元件程序只在从进程执行。

图14.6 PEEPG系统中非线性动态问题求解流程框图(www.xing528.com)

bft元件由bftm和bfts两个程序组成。bftm由主进程执行,主要是给出每一时刻解的边值,对时间进行更新,进行结束与否的判断,并将判断结果和新的时间和各区域解的边值发送给从进程;bfts由从进程执行,接收由主进程发送的新的时间和解的边值。

solv元件为求解器元件,由两个程序组成:solv和msolv,其中solv由从进程执行,对子区域经过E元件后形成的代数方程组系数矩阵和右端项进行整理,以满足相应并行求解器所需的数据格式,然后调用相应的并行求解器,得到各子区域各自的解,由区域分解法知,各子区域的方程组的求解计算依赖于相邻子区域公共边界上解的值,而为了使程序结构清晰,各从进程之间在solv元件程序内部相互通信,不需要用户参与。msolv元件即主进程求解器,管理通信的协调工作。

E元件程序用于单元计算,包括单元刚度矩阵,单元质量矩阵和单元载荷计算,并把它们由结点自由度表示转换成代数方程组的变量表示,同时处理边界约束条件,并形成代数方程组的系数矩阵和右端项。

U元件用于把求解器求出的方程组变量解转换回结点各自由度的位移值,并进行其他后处理计算,最后将各结点位移发送到主进程,转换为整体区域上各结点各自由度的位移,该元件程序由从进程执行;主进程有相应于该元件的接收整理元件:recv元件程序,该元件接收来自于各从进程的子区域上的解,根据局部结点与整体结点的对应关系整理得到整体区域上的解,并进行存盘处理。

这些元件程序的调用是分别由从进程主程序和主进程主程序来完成的,这两个主程序根据用户填写的gcn文件自动生成,这两个主程序又由一个名为mainmpi的总调用程序根据进程号分别调用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈