ARGONNENATIONALLABORATORY9700SouthCassAvenueArgonne,IL60439ANL-95/11-Revision2.1.3PETSc用户手册SatishBalay,KrisBuschelman,WilliamGropp,DineshKaushik,MattKnepley,LoisCurfmanMclnnes,BarrySmith,HongZhangMathematicsandComputerScienceDivision中国科学院计算机网络信息中心超级计算中心谷同祥王建黄海翻译、整理摘要本手册描述PETSc在高性能计算机上数值求解偏微分方程及相关问题的使用方法。可移植可扩展科学计算工具箱(PETSc:Portable,ExtensibleToolkitforScientificComputation)是一套数据结构和程序,它为大规模应用代码在并行(和串行)计算机上实现提供构造模块。PETSc对所有消息传递通讯均使用MPI标准。PETSc包含一套正在扩充的并行线性、非线性方程解法器和时间积分器,它们可能在用FORTRAN、C和C++编写的应用代码中被用到。PETSc提供并行应用代码中所需的许多机制,如并行矩阵和向量聚集程序。本程序库采用分级组织,使用户能利用对实际问题非常适合的抽象出的层次。由于使用了面向对象编程技术,PETSc为用户提供了巨大的灵活性。PETSc是软件工具的一个复杂集合;因此,对某些用户来说,起初要学习的东西比简单子程序库的更多。特别地,对某些没有计算机科学背景知识和C或C++编程经验的人,要领会它的全部特征并使软件有效地运行需花大量的时间。然而,PETSc的设计及其所含算法能使许多应用代码有效地实现,这比你自己“摆弄它们”更简单。2对许多简单的(甚至相对复杂的)任务,诸如Matlab的包常是最好的工具;对可写出有效Matlab代码的问题类,PETSc并不想给予太多的关注。不要期望PETSc像其它串行代码一样会提供一个“并行线性解法器”。当然,并非以前串行代码的所有部分都必须被并行化,但是,矩阵创建部分必须具有所期望的任何性能。不要期望串行地创建你的矩阵,然后“使用PETSc”并行求解线性方程组。由于PETSc正在研发之中,用法和程序调用系列可能会有些小的变化,有关信息见web站点:涉及PETSc特征工作的出版物和网站列表可在查到。我们欢迎对这些页面的任何附加。获取PETSc的信息:On-line:所有程序的菜单页,包括分类的例子用法:docs/index.html或分类的问题查寻:docs/troubleshooting.html或本手册中:基本介绍,第9页聚集向量,第29页,和矩阵,第43页3线性解法器,第53页非线性解法器,第68页时间步进(ODE)解法器,第88页索引,第148页4致谢:我们感谢PETSc的所有用户,感谢他们的许多建议、测试报告和鼓励。特别感谢VictorEijkhout、DavidKeyes和MatthewKnepley,他们对PETSc的原代码、功能和文档给予了有价值的评论。PETSc中的一些原代码和实用程序(或PETSc使用的软件)的完成者:MarkAdams:MPIBAIJ矩阵的可扩展性,AllisonBaker:FGMRES代码,TonyCaola:SPARSEKIT2ilutp()接口,ChadCarroll:Win32图形,CameronCooper:VecScatter程序部分,VictorEijkhout:KSP型BICG,VecPipeline()和VecXXXBegin()/End()程序,PauloGoldfeld:balancingNeumann-Neumann预条件子,MattHille,MatthewKnepley,DomenicoLahaye:导向JohnRuge和KlausStueben的AMG的接口,PeterMell:DA程序部分,ToddMunson:LUSOL(MINOS中稀疏解法器)接口;AdamPowell:PETSc的Debian包5RobertScheichl:MINRES实现,LiyangXu:导向PVODE的接口。PETSc使用了来自如下软件包内的程序:BLASLAPACKLINPACK稠密矩阵分解与求解;用f2c转换到C,然后对小矩阵、块矩阵数据结构手动优化(hand-optimized)MINPACK见第85页,有限差分Jacobi求解的串行矩阵着色程序,用f2c转换到C,SPARSPAK见第57页,矩阵重排程序,用f2c转换到C,SPARSEKIT2见第59页,YousefSaad所写,iludtp(),用f2c转换到C;这些程序在GNU下版权归Saad,见${PETSC_DIR}/src/mat/impls/aij/seq/ilut.clibtfs由HenryTufo和PaulFischer为粗网格问题直接求解开发的有效、并行直接解法器(每台处理机有很少自由度的一种线性系统)。PETSc接口导向下列外部软件:ADIC/ADIFOR:稀疏Jacobian计算的自动微分,://AMG:JohnRuge和KlausStueben的代数多重网格代码,6BlockSolve95:见第59页,并行ICCG(0)和ILU(0)预条件,DSCPACK:见第66页,PadmaRaghavan为求解稀疏对称正定系统开发的区域分离器(Domain-Separator),~raghavan/Dscpack/,ESSL:IBM的快速稀疏直接LU分解数学库,Euclid:由DavidHysom开发的并行ILU(k),通过Hypre接口访问,Hypre:LLNL预条件子库,LUSOL:由Stanford大学系统优化实验室MichaelSaunders开发的稀疏LU分解代码(MINOS的部分),Mathematica:见第??页,Matlab:见第95页,ParMeTis:见第51页,并行图划分器,~karypis/metis/PVODE:见第88页,并行ODE解法器,SPAI:并行稀疏近似逆预条件,~grote/spai/SPOOLES:见第66页,CleveAshcraft开发的稀疏面向对象线性7方程组解法器,SuperLU和SuperLU_Dist:见第66页,JimDemmel,XiaoyeS.Li和JohnGilbert开发的高效稀疏LU代码,~xiaoye/SuperLU。这些是所有可选择的软件包,使用PETSc时无需安装它们。PETSc软件用以下开发与维护Bitkeeper版监控系统Emacs编辑器PETSc文档用以下生成BillGropp开发的文档处理工具c2htmlMicrosoftFrontpagepdflatexpython8目录摘要...............................................................................................................1第I部分PETSC介绍..................................................................................17第1章开始.................................................................................................171.1阅读建议..............................................................................................181.2执行PETSC程序.................................................................................221.3写PETSC程序.....................................................................................241.4简单PETSC例子.................................................................................261.5引用PETSC..........................................................................................561.6目录结构..............................................................................................57第II部分用PETSC编程...........................................................................61第2章向量与分布并行数据.......................................................................612.1创建与聚集向量..................................................................................612.2基本向量运算......................................................................................652.3索引与排序..........................................................................................682.3.1应用排序.......................................................................................692.3.2局部到整体映射...........................................................................