基于MPI+FreeFem++的有限元并行计算.docx

上传人:b****8 文档编号:29218280 上传时间:2023-07-21 格式:DOCX 页数:7 大小:19.29KB
下载 相关 举报
基于MPI+FreeFem++的有限元并行计算.docx_第1页
第1页 / 共7页
基于MPI+FreeFem++的有限元并行计算.docx_第2页
第2页 / 共7页
基于MPI+FreeFem++的有限元并行计算.docx_第3页
第3页 / 共7页
基于MPI+FreeFem++的有限元并行计算.docx_第4页
第4页 / 共7页
基于MPI+FreeFem++的有限元并行计算.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

基于MPI+FreeFem++的有限元并行计算.docx

《基于MPI+FreeFem++的有限元并行计算.docx》由会员分享,可在线阅读,更多相关《基于MPI+FreeFem++的有限元并行计算.docx(7页珍藏版)》请在冰豆网上搜索。

基于MPI+FreeFem++的有限元并行计算.docx

基于MPI+FreeFem++的有限元并行计算

基于MPI+FreeFem++的有限元并行计算

摘要:

有限元方法是一种灵活而高效的数值求解偏微分方程的计算方法,是工程分析和计算中不可缺少的重要工具之一。

在计算机技术的快速发展使得并行机的价格日益下降的今天,并行有限元计算方法受到了学术界和工程界的普遍关注。

讨论了基于MPI+FreeFem++的有限元并行计算环境的构建,阐述了在该环境下有限元并行程序的编写、编译及运行等过程,并通过具体编程实例,说明了MPI+FreeFem++环境下的有限元并行编程的简单和高效。

  关键词:

有限元方法;并行计算;MPI;FreeFem++

  0引言

  有限元方法是20世纪50年代伴随电子计算机的诞生,在计算数学和计算工程领域里诞生的一种高效而灵活的计算方法,它将古典变分法与分片多项式插值相结合,易于处理复杂的边值问题,具有有限差分法无可比拟的优越性,广泛应用于求解热传导、电磁场、流体力学等相关问题,已成为当今工程分析和计算中不可缺少的最重要的工具之一。

有限元方法的“化整为零、积零为整”的基本思想与并行处理技术的基本原则“分而治之”基本一致,因而具有高度的内在并行性。

在计算机技术快速发展使得并行机的价格日益下降的今天,有限元并行计算引起了学术界和工程界的普遍关注,吸引了众多科研与工程技术人员。

但要实现有限元并行编程,并不是一件容易的事,特别是对于复杂区域问题,若从网格生成、任务的划分、单元刚度矩阵的计算、总刚度矩阵的组装,到有限元方程组的求解以及后处理,都需要程序员自己编写代码的话,将是一件十分繁琐的事情。

本文探讨了构建基于MPI+FreeFem++的有限元并行计算环境,在该环境下,程序员可避免冗长代码的编写,进而轻松、快速、高效地实现复杂问题的有限元并行计算。

  1FreeFem++简介

  FreeFem++是一款免费的偏微分方程有限元计算软件,它集成网格生成器、线性方程组的求解器、后处理及计算结果可视化于一体,能快速而高效地实现复杂区域问题的有限元数值计算。

它采用Delaunay算法生成离散偏微分方程所需的网格,具有网格自适应和移动网格生成的功能;提供了协调与非协调多种有限元离散方法,以及诸如LU分解、CG迭代法、GMRES迭代法等多种线性方程组的求解器,还提供了特征值问题的求解器等;采用稀疏矩阵存储格式,内存需求少,计算速度快;其编程的语义环境类似于C++,轻松易学,使用十分方便;同时还提供了多种计算结果的输出格式,可供可视化软件如Tecplot、Matlab等调用,受到了广大研究者与工程计算人员的青睐。

  2MPI+FreeFem++有限元并行计算环境的构建

  本文主要讨论Linux系统下基于MPI+FreeFem++的有限元并行计算环境的构建。

首先应安装MPI消息传递库,由于已有大量文献讨论Linux系统下MPI的安装与配置,这里不再赘述,而着重讨论在MPI并行环境已配置好的情况下,FreeFem++的安装与配置:

①从网站http:

//www.freefem.org下载FreeFEM++源代码,将其放入一目录下;②进入该目录,将源代码解包;③进入刚解包的源代码文件夹,执行“./configure”;④执行“./make”;⑤执行“./makeinstall”。

  上述过程默认的安装目录是“…/local/bin”。

若要安装在你个人喜好的目录下,可在第(3)步执行“./configure”时使用参数“--prefix=PATH”来指定安装目录。

安装过程中FreeFem++会自动检测所需软件是否已安装(如:

MPI是否已安装和正确配置)。

FreeFem++安装成功后,在所安装目录下会生成名为FreeFem++,FreeFem++-nw,FreeFem++-mpi等可执行文件,其中FreeFem++-mpi就是编译运行MPI+FreeFem++有限元并行程序的执行文件。

  3MPI+FreeFem++有限元并行程序的编写、编译与运行

  MPI+FreeFem++有限元并行程序是在FreeFem++标准有限元程序中加入相关通信语句而成。

它使用区别于标准MPI的变量名表示相关变量,如:

mpiComm表通信域,mpiGroup为进程组,mpisize为进程总数,mpirank为进程序号等。

以下是FreeFem++-mpi的3条基本通信语句:

  processor(i)<

向进程i发送数据a;

  processor(i)>>a:

接收从进程i发来的数据a;

  broadcast(processor(i),a):

进程i向通信域内的其它进程广播数据a。

  更多通信语句,可参考FreeFem++的使用手册。

程序员也可根据自己的需要,定义和增加相关通信语句。

  FreeFem++程序的编译与运行是合二为一的,即首先编译,若编译通过则立即执行,否则,输出错误信息并定位错误所在行。

编译和运行命令为:

  $./mpirun-npN./FreeFem++-mpiXXX.edp

  其中N为进程数,XXX.edp为并行程序名,edp为FreeFem++程序的后缀名。

  4MPI+FreeFem++编程实例

  我们考虑二维不可压缩Stokes方程方腔驱动流问题:

  [JB({]-v△u+p=0在Ω

  Divu=0在Ω内[JB)]

  其中Ω=[0,1]×[0,1],u=(u-1,u-2)+T,为流体速度场,p为压力,v为流体的粘性系数,△是拉普拉斯算子,是梯度算子,div是散度算子,其边界条件如图1所示。

上述方程描述了施加于方腔盖子水平方向一单位速度时,方腔内流体的运动情况。

  

  我们使用重叠型标准加性Schwarz区域分解算法并行求解上述问题,其中子区域数为2,取为1。

MPI+FreeFem++有限元并行程序源代码如下:

  //Stokes-Schwarz.edp//并行程序名

  if(mpisize!

=2){//检查进程(任务)是否派生成功

  cout<<"sorry,numberofprocesseor!

=2"<

  exit

(1);

  }

  intit=0,hk=20,k=hk/2,ext=1;//相关变量的声明和初始化

  realx0,y0,x1,y1,Unorm,errU,nu=1,h=1.0/hk,extension=ext*h,itu=1.0;

  real[int]relerrU

(2);

  mesh[int]Th(mpisize);//子区域网格

  if(mpirank==0){

  x0=0;x1=1;y0=0;y1=0.5+extension;//定义子区域1

Th[0]=square(hk,k+ext,[x0+(x1-x0)*x,y0+(y1-y0)*y]);//生成子区域1的网格

  }

  else{

  x0=0;x1=1;y0=0.5-extension;y1=1.0;//定义子区域2

  Th[1]=square(hk,k+ext,[x0+(x1-x0)*x,y0+(y1-y0)*y]);//生成子区域2的网格

  }

  broadcast(processor(0),Th[0]);//广播网格

  broadcast(processor

(1),Th[1]);

  fespaceUh01(Th[0],P2);Uh01uh11,uh12,vh11,vh12,olduh11,olduh12;//有限元空间

  fespacePh01(Th[0],P1);Ph01ph1,qh1,oldph1;

  fespaceUh02(Th[1],P2);Uh02uh21,uh22,vh21,vh22,olduh21,olduh22;

  fespacePh02(Th[1],P1);Ph02ph2,qh2,oldph2;

  problemstokes1([uh11,uh12,ph1],[vh11,vh12,qh1],init=it)=//定义子区域1的问题

  int2d(Th[0])(nu*(dx(uh11)*dx(vh11)+dy(uh11)*dy(vh11)

  +dx(uh12)*dx(vh12)+dy(uh12)*dy(vh12))

  -ph1*(dx(vh11)+dy(vh12))+qh1*(dx(uh11)+dy(uh12)))

  +on(1,2,4,uh11=0,uh12=0)+on(3,uh11=olduh21,uh12=olduh22,ph1=oldph2);

  problemstokes2([uh21,uh22,ph2],[vh21,vh22,qh2],init=it)=//定义子区域2的问题

  int2d(Th[1])(nu*(dx(uh21)*dx(vh21)+dy(uh21)*dy(vh21)

  +dx(uh22)*dx(vh22)+dy(uh22)*dy(vh22))

  -ph2*(dx(vh21)+dy(vh22))+qh2*(dx(uh21)+dy(uh22)))

  +on(2,4,uh21=0,uh22=0)+on(3,uh21=1,uh22=0)

  +on(1,uh21=olduh11,uh22=olduh12,ph2=oldph1);

  uh11=0;uh12=0;ph1=0;uh21=0;uh22=0;ph2=0;//迭代初值

  while(it<100&&itu>=1.0e-3){//Schwarz迭代

  it++;

  if(mpirank==0){olduh11=uh11;olduh12=uh12;oldph1=ph1;}//进程0存储计算结果

  if(mpirank==1){olduh21=uh21;olduh22=uh22;oldph2=ph2;}//进程1存储计算结果

  broadcast(processor(0),olduh11[]);//广播计算结果

  broadcast(processor(0),olduh12[]);

  broadcast(processor(0),oldph1[]);

  broadcast(processor

(1),olduh21[]);

  broadcast(processor

(1),olduh22[]);

  broadcast(processor

(1),oldph2[]);

  if(mpirank==0){

  stokes1;//子区域1上的有限元计算

  Unorm=sqrt(int2d(Th[0])(uh11^2+uh12^2));//计算相邻两次迭代解的误差

  errU=sqrt(int2d(Th[0])((uh11-olduh11)^2+(uh12-olduh12)^2));

  if(Unorm<1.0e-30)Unorm=1.0e-30;relerrU[0]=errU/Unorm;

  }

  if(mpirank==1){

  stokes2;//子区域2上的有限元计算

  Unorm=sqrt(int2d(Th[1])(uh21^2+uh22^2));//计算相邻两次迭代解的误差

  errU=sqrt(int2d(Th[1])((uh21-olduh21)^2+(uh22-olduh22)^2));

  if(Unorm<1.0e-30)Unorm=1.0e-30;relerrU[1]=errU/Unorm;

  }

  broadcast(processor(0),relerrU[0]);//广播计算所得误差

  broadcast(processor

(1),relerrU[1]);

  itu=relerrU.max;

  }

  图2是上述并行程序的计算结果插值到互不重叠子区域的等值线图,其中Schwarz迭代15次。

  

  由以上并行程序可以看出,基于MPI+FreeFem++的有限元并行编程简单而高效,程序员无需将太多精力花在程序代码的编写上,从而集中于算法的设计与分析,实现相关问题的快速、高效有限元并行计算。

  5结束语

  自20世纪50年代提出有限元法以来,有限元法已经成为当今工程分析和计算中的不可缺少的最重要的工具之一。

本文讨论了基于MPI+FreeFem++的有限元并行计算环境的构建,以及在该环境下有限元并行程序的编写、编译与运行等过程,并通过具体的编程实例表明该并行编程环境的简单和高效。

程序员在该并行编程环境下,无需编写冗长的程序代码,从而将主要精力用于并行算法的设计与分析,快速而高效地实现相关问题的有限元并行计算。

  参考文献:

  [1]李开泰,黄艾香,黄庆怀.有限元方法及其应用[M].北京:

科学出版社,2006.

  [2]HECHTF,PIRONNEAUO,LEHYARICA,OHTSUKAK.FreeFem++[EB/OL].http:

//www.freefem.org

  [3]SHANGYUEQIANG,HEYINNIAN.FourieranalysisofSchwarzdomaindecompositionmethodsforthebiharmonicequation[J].AppliedMathematicsandMechanics,2009(9).

[4]TOSELLIA,WIDLUNDO.DomainDecompositionMethods:

AlgorithmsandTheory[M].Springer,Berlin,2005.

  

  

  

  ParallelFiniteElementComputationsBasedonMPIandFreeFem++

  

  Abstract:

Finiteelementmethodsareatypeofflexibleandhighlyefficientmethodsfornumericalsolutionofpartialdifferentialequations.Theyareoneoftheimportantandindispensabletoolsinengineeringanalysisandcomputations.Asthepriceofparallelcomputersquicklydropswiththedevelopmentofcomputertechnology,parallelfiniteelementmethodsnowadaysattractpopularattentionsinbothacademicandengineeringfields.ThispaperdiscussestheconstructionofparallelenvironmentbasedonMPIandFreeFem++forfiniteelementcomputations,statesthewriting,compilingandrunningofaparallelfiniteelementprogramintheenvironment.Finally,anexampleisgiventodemonstratethesimplicityandhighefficiencyofparallelfiniteelementcomputationsbasedonMPIandFreeFem++.

  KeyWords:

FiniteElementMethod;ParallelComputing;MPI;FreeFem++

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1