PETSc 用户指南Word格式文档下载.docx
- 文档编号:19092202
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:39
- 大小:108.52KB
PETSc 用户指南Word格式文档下载.docx
《PETSc 用户指南Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《PETSc 用户指南Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
2.1.4矩阵的划分………………………………….……………………….……12
3PETSc的基本功能
3.1线性方程求解……………………………………………………………13
3.1.1基本用法……………………….………………………....….………13
3.1.2Krylov子空间方法……………….………………………….…….……13
3.1.3预条件子…………………………….……………………….…….……14
3.1.4奇异方程求解………………………….………………….…….………16
3.2非线性方程求解…………………………………………………………16
3.2.1基本用法……………………….………………………….…….………17
3.2.2非线性解法器……………………….……………………….…….……17
3.2.3无矩阵方法………………………….…………………….…….………17
3.2.4有限差分雅可比逼近……………….………………….…….………18
3.3时间步进积分……………………………………………………………18
3.3.1基本用法……………………….………………………....….………19
3.3.2求解时间依赖问题………………….……………………….…….…19
3.3.3求解时间稳态问题………………….……………………….…….…19
3.3.4其它求解器………………………….…………………….…….……19
3.4PETSc的其他功能………………………………………………………20
3.4.1性能分析……………………….……………………….……...………20
3.4.2图形输出…………………………….……………………….…….……22
3.4.3调试和错误检测…………………….…………………….…….………23
3.5PETSc与其它软件………………………………………………………23
3.5.1DMMG……………………….…………………………….…….………24
3.5.2ADIC/ADIFOR…………………….……………………….…….....…24
3.5.3Matlab………………………….…………………….…….......……24
3.5.4ESI……………………….……………………….…….…...........…24
4PETSc编程
4.1PETSc程序范例…………………………………………………………25
4.2PETSc程序结构…………………………………………………………28
5PETSc范例测试
5.1线性方程求解……………………………………………………………29
5.1.1范例简介………………………….……………………………………29
5.2非线性方程求解……………..…………………………………………30
5.2.1范例简介……………………………………………………………….30
5.3时间步进积分……………………………………………………………31
5.3.1范例简介…………………………………………………………….…31
6PETSc测试总结
参考文献
通过计算手段进行重大科学发现,已普遍为人们所共识。
从传统科学与工程领域如航空航天、地震预报、气候预测、大型水利建设和石油地质勘探,到大型基因组测试、新药设计和新材料合成等新兴科学研究领域,无处不需要大规模数值模拟和科学计算。
在当今社会,科学计算已经逐渐成为影响和关系到一个国家经济发展、科技进步和国家安全的关键性环节。
2002年10月,中国科学院确立了“十五”信息化建设规划项目“超级计算环境建设与应用”,而“基础并行软件平台建设”又为其核心开发内容之一。
它以基础并行软件环境开发为主要目标,通过广泛搜集目前流行的数值和并行应用软件,进行深层次研究和开发,改进和提高计算性能,并最终移植到特定计算环境如正在建设的国家网格节点上,主要供国内从事科学计算的广大科技人员共享。
同时,我们也正逐步开发一系列具有重要应用价值的数值软件和面向网格的科学计算平台,并率先在国内开展自动微分算法的应用基础研究,以及逐渐开发一系列自动微分软件包和数值微分计算环境。
在此背景下,我们将陆续推出PETSc、TAO、FFTW、DOUG等系列并行软件在深腾6800上的测试报告,这包括应用和开发两个方面的目标。
一方面,我们希望通过这些相对成熟的并行软件在一些典型应用上的成功来改变或导向人们传统的“从无到有”编程思路,我们希望科学家与工程师们更多的依赖这些成熟的、高性能的软件资源以便更高层次开发其应用程序,从而获得可比较性的性能提高。
另一方面,任何软件的“成熟性”和可靠性都只能是相对的,不同的应用和不同的体系结构会有不同的代价和性能,以及体系结构的不断发展和变化与应用之间的相互作用对任何软件的生命期都可能是致命的。
在典型应用的驱使下,我们希望能够基于这些并行软件做一些高层次的研究和开发。
基础并行软件平台建设与应用开发计划包括以下三个方面:
1.数值并行软件的移植及其性能优化。
主要包括可移植、可扩展科学计算工具箱(PETSc)、大型稀疏线性方程组并行迭代求解(AZTEC)、高级最优化工具箱(TAO)、非线性与微分/代数方程解法器(SUNDIALS)、FFTW、LAPACK、ScalLAPACK、稀疏矩阵特征值问题并行求解(PARPACK)和无结构网格上的区域分解(DOUG)等内容。
2.自主开发一些高性能数值与并行计算软件包。
这些软件包主要包括并行特征值求解器(PSEPS)、自动微分转换系统(DFT)、自动伴随生成器系统(ADG)和并行多维FFT软件包(PMDFFT)等内容。
3.举办用户培训和相关学术会议,推动并行软件的应用和研究开发。
主要包括PETSc、TAO、DOUG等基础并行数值软件的应用,以及LINUX/UNIX/网格应用、并行计算方法及其相关内容。
最后,我们热忱欢迎国内外所有来自不同学科、不同专业领域的科学家和工程技术人员就更为广泛的科学和工程计算问题提出建议。
我们的联系方式:
单位:
中国科学院计算机网络信息中心超级计算中心
网站:
电话:
(86-10)5881-2132
邮件:
walls@
地址:
北京中关村南4街4号
通信:
北京349信箱,SC,100080
1.1概况
PETSc(Portable,ExtensibleToolkitforScientificComputation)是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,由Argonne国家实验室开发的可移植可扩展科学计算工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。
PETSc所有消息传递通信均采用MPI标准实现。
PETSc用C语言开发,遵循面向对象设计的基本特征,用户基于PETSc对象可以灵活开发应用程序。
目前,PETSc支持Fortran77/90、C和C++编写的串行和并行代码。
PETSc是系列软件和库的集合,三个基本组件SLES、SNES和TS本身基于BLAS、LAPACK、MPI等库实现,同时为TAO、ADIC/ADIFOR、Matlab、ESI等工具提供数据接口或互操作功能,并具有极好的可扩展性能。
PETSc为用户提供了丰富的Krylov子空间迭代方法和预条件子,并提供错误检测、性能统计和图形打印等功能。
如今,越来越多的应用程序在PETSc环境上开发,并逐渐显示出PETSc在高效求解大规模数值模拟问题方面的优势和威力。
PETSc最新版本为petsc-2.2.1,PETSc网站:
//www.mcs.anl.gov/petsc。
目前,PETSc3正在开发中。
1.2体系结构
不同于其它微分/代数方程解法器,PETSc为用户提供了一个通用的高层应用程序开发平台。
基于PETSc提供的大量对象和解法库,用户可以灵活地开发自己的应用程序,还可随意添加和完善某些功能,如为线性方程求解提供预条件子、为非线性问题的牛顿迭代求解提供雅可比矩阵、为许多数值应用软件和数学库提供接口等。
图1表示了PETSc在实现层次上的抽象,图2具体列举了PETSc的基本数值部件。
这里做简要说明。
应用程序:
用户在PETSc环境下基于PETSc对象和算法库编写的串行或并行应用程序。
尽管PETSc完全在MPI上实现,但PETSc程序具有固定的框架结构,即有初始化、空间释放和运行结束等环境运行语句。
PDE解法器:
用户基于PETSc的三个基本算法库(TS、SNES和SLES)构建的偏微方程求解器。
但它却不是PETSc的基本组件。
TS:
时间步进积分器,用于求解依赖时间或时间演化的ODE方程,或依赖时间的离散化后的PDE方程。
对于非时间演化或稳态方程,PETSc提供了伪时间步进积分器。
TS积分器最终依赖线性解法器SLES和非线性解法器SNES来实现。
PETSc为PVODE库提供了接口。
另外,TS的用法非常简单方便。
SNES:
非线性解法器,为大规模的非线性问题提供高效的非精确或拟牛顿迭代解法。
SNES依赖于线性解法器SLES,并采用线性搜索和信赖域方法实现。
SNES非常依赖于雅可比矩阵求解,PETSc既支持用户提供的有限差分程序,同时又为用户提供了依赖ADIC等自动微分软件生成的微分程序接口。
SLES:
线性解法器,它是PETSc的核心部分。
PETSc几乎提供了各种高效求解线性方程的解法器,既有串行求解也有并行求解,既有直接法求解也有迭代法求解。
对于大规模的线性方程,PETSc提供了大量基于Krylov子空间方法和预条件子的各种成熟而有效的迭代方法,以及其它通用程序和用户程序的接口。
图1:
PETSc实现的层次结构
KSP:
Krylov子空间方法,广泛涉及Richardson方法,共扼梯度法(CG和BiCG),广义最小残差法(GMRES),最小二乘QR分解(LSQR)等。
PC:
预条件子,包括雅可比矩阵,分块雅可比矩阵,SOR/SSOR方法,不完全Cholesky分解,不完全LU分解,可加性Schwartz方法,多重网格预条件子等。
DRAW:
应用程序的性能分析和结果显示。
矩阵
压缩稀疏行(AIJ)
块压缩稀疏(BAIJ)
块对角(BDiag)
稠密
其它
向量
索引集
索引
块索引
跨度
图2:
PETSc的数值组件
矩阵:
PETSc的基本数据对象。
与向量对象不同,一个PETSc的矩阵对象首先是在局部(各个进程)数据填充完成之后再对其进行全局聚集,然后再由PETSc对象统一管理和实现矩阵的各种运算和操作。
当问题的计算规模较大时,稀疏矩阵的填充将是影响程序性能的关键因素。
PETSc还专门为用户提供了的单纯依赖向量来实现矩阵基本运算(或无矩阵运算)的接口。
向量:
对于规则的正交网格,PETSc自动对向量进行划分,并通过分布式存储向量(即DA对象)来管理。
通过DA对象,用户可以简单地实现向量的分发、聚集、局部和全局之间的相互映像、边界点的通信等基本操作。
DA对象隐藏了进程之间的通信,用户只需提供全局的向量结构和数值。
但对于无结构网格,用户则可以通过索引集(即IS对象)来实现向量的分发、聚集、映像、边界点的通信等基本操作。
索引集:
它是一系列数据操作对象的集合,专门用来管理无结构网格向量的分发、聚集、局部和全局之间的映像、边界点的通信等基本操作。
1.3基本特色
众所周知,用户通过PETSc来开发应用程序往往具有相当的难度。
一方面,它需要用户本身具有较高的数值计算方法方面的专业知识和并行计算方法方面的编程技巧。
另一方面,总的来说PETSc只是一个高级的应用程序开发环境,它为许多软件(库)和用户程序提供接口,用户只有充分熟悉和利用现有的软件资源和数学库的基础上才有可能开发出高效的应用程序。
尽管如此,PETSc仍然因为其具有其它软件不可比拟的优点吸引着越来越多的用户用它来开发应用程序。
下面我们一一介绍和分析PETSc的这些优点或特色。
计算能力:
PETSc为用户提供了丰富的算法和库资源。
三个求解器(SLES、SNES和TS)构成了PETSc的核心组件。
PETSc不仅为中小规模线性方程组的求解提供了高效的直接方法,还为大规模(稀疏)线性方程组的迭代求解提供了多种Krylov子空间方法和多种预条件子。
可兼容性:
一方面,PETSc具有很强的兼容能力,可在不同体系结构和不同操作系统环境高效运行。
另一方面,PETSc本身基于高性能的线性代数库(BLAS和LAPACK)和MPI消息传递环境实现,同时又充分吸收和融入了其它优秀软件的优点,如无结构网格区域分解和雅可比矩阵求解等方面的功能。
可扩展性:
PETSc的可扩展性功能主要包括三个方面:
计算性能的并行可扩展性、功能的可扩展性和计算能力的可扩展性。
无论是在计算时间还是在浮点性能方面,PETSc提供的范例程序都有良好的线性加速比性能。
面向对象的良好设计风格使得PETSc具有良好的功能扩展能力。
作为一个高级应用程序开发平台,PETSc特别适合于用来开发大型应用程序。
抽象数据类型:
PETSc基于面向对象技术实现,具有所有面向对象软件的可移植性、可继承性和可扩展性等基本程序特征。
PETSc的向量、矩阵等基本数据对象完全采用抽象数据类型实现,尽量对用户屏蔽数据对象的区域分解和存储等细节。
所有PETSc格点数据对象的划分、初始化和存取等基本操作都由DA对象来管理和相应PETSc库函数实现。
用户基于PETSc对象可以灵活开发其应用程序。
PETSc对象和组件为构造大规模应用程序奠定一个良好的基础。
输出能力:
PETSc具有良好的性能分析和图形输出功能。
同时,PETSc还具有高可用性,并具有很强的错误诊断能力。
总之,PETSc在无论是在计算能力、设计风格还是在可兼容性和可扩展性等方面都显示出极大的优越性。
PETSc不但为科学与工程计算领域的科学家和工程师提供了强大的(大规模)偏微方程求解工具,而且也为模型科学应用和高效算法设计提供了一个丰富的试验平台和计算环境。
它使得算法的扩展和应用程序的个性化实现都更为容易。
另外,PETSc的这种设计风格增强了代码的再利用性和编程的灵活性,同时将并行性问题与算法的选择分离开来。
1.4安装PETSc
这里,我们以PETSc2.1.3为例,介绍如何在LINUX/UNIX环境下安装PETSc。
在安装PETSc之前,系统首先需要做如下配置:
1)MPI的一种实现。
对由厂家提供并已经安装了MPI的并行机,推荐使用厂家提供的MPI实现,因为通常比使用免费版本具有更好的性能。
否则推荐MPICH,可在http:
//www.mcs.anl.gov/mpi/mpich免费下载获得。
由于PETSc本身包含了MPI的一个简捷版本,因此只对串行运行PETSc感兴趣的用户除外。
2)BLAS和LAPACK的一个拷贝。
许多机器本身提供了BLAS或LAPACK等数学库。
例如,DECalpha提供了DXML,而IBMrs6000提供了ESSL版本。
检查你使用的机器配置,如果这些库尚未在你的机器上安装,可在如下网站上获得ftp:
//info.mcs.anl.gov/pub/petsc/fblaslapack.tar.gz。
建议你尽可能使用厂家提供的BLAS库。
3)可选软件包。
PETSc提供了许多软件和库的接口,用户可以根据不同的应用需要安装相应的软件和库。
然后,你就可以按以下步骤逐步安装PETSc:
1)在http:
//www-unix.mcs.anl.gov/petsc/petsc-2/download/index.html上尽可能获取最新版本的petsc.tar.gz,并用如下方式解包
gunzip-cpetsc.tar.gz|tarxof–
缺省时,将自动创建petsc-2.1.3或其最新版本目录。
PETSc版本的补丁程序可通过http:
//www-unix.mcs.anl.gov/petsc/petsc-patches.html获得。
2)设置环境变量PETSC_DIR和PETSC_ARCH,分别为PETSc主目录的路径和机器体系结构。
例如
setenvPETSC_DIR/home/username/petsc-2.1.3
setenvPETSC_ARCHrs6000
3)编辑文件${PETSC_DIR}/bmake/${PETSC_ARCH}/packages,以指定MPI,LAPACK,BLAS,X-windows等的路径及可选软件包。
注意:
如果只安装单机运行的PETSc版本,则不必安装MPI,用户只需要在${PETSC_DIR}/bmake/${PETSC_ARCH}/packages中设置
MPI_LIB=${PETSC_DIR}/lib/lib${BOPT}/${PETSC_ARCH}/libmpiuni.a
MPI_INCLUDE=-I${PETSC_DIR}/src/sys/src/mpiuni
MPIRUN=${PETSC_DIR}/src/sys/src/mpiuni/mpirun
4)或许还需编辑文件${PETSC_DIR}/bmake/${PETSC_ARCH}/variables以从其缺省改变C,C++,或Fortran编译器的名字:
Solaris使用GNU编译器用PETSC_ARCH=solaris_gnu
IBMrs6000使用GNU编译器用PETSC_ARCH=rs6000_gnu
CRAYt3d:
确信环境变量TARGET被设置给cray-t3d
5)在PETSc主目录中使用makeBOPT=gall>
&
make_log来建立PETSc的调试版本或使用makeBOPT=Oall>
make_log来建立PETSc库的优化版本。
标志BOPT确定建立哪种库。
其它可选项是对C++版本的BOPT=[g_c++,O_c++]和对复数版本的BOPT=[g_complex,O_complex]
在HP-UX机器上我们强烈推荐使用Gnumake(如果还没用,可安装之),而不用PETSc提供的makefile脚本。
在PETSc构建文件(makefiles)中使用gnumake,需在文件${PETSC_DIR}/bmake/hpux/base定义OMAKE为gnumake的路径。
6)检查make_log,以确定在安装过程中是否发生任何错误。
查阅一般问题的帮助信息http:
//www-unix.mcs.anl.gov/petsc/petsc-patches.html。
另外,用户还可以通过configure安装PETSc。
请参考PETSc网站,这里从略。
本章从对象的创建、划分、功能和索引等几个方面简单介绍PETSc的两个基本对象:
向量和矩阵。
所涉及的内容和顺序基本与PETSc用户手册一致。
2.1向量
向量是最简单的PETSc对象。
PETSc向量对象主要用于存储线性方程组的解和右端向量。
PETSc提供AO对象来管理向量在全局和局部之间的索引、排序和映射。
PETSc还提供了两个对象DA和IS,来分别管理向量在规则正交网格和无结构网格上各进程之间的分发、聚集和边界点的数据通信等操作。
2.1.1创建和聚集
VecCreatSeq:
创建一个串行的PETSc向量
VecCreatMPI:
创建一个并行的PETSc向量
VecCreat:
创建一个PETSc向量名
VecSetSizes:
设置向量维数
VecSetFromOptions:
通过运行参数设置向量数据类型
VecSet:
将一个数值赋给向量的每个元素
VecSetValues:
分别给向量的每个元素插入或累加数值
VecAssemblyBegin:
启动一个向量的创建
VecAssemblyEnd:
完成一个向量的创建
VecView:
屏幕打印向量的值
VecDuplicate:
复制一个向量
VecDuplicateVecs:
复制一组向量
VecDestroy:
释放一个向量
VecDestroyVecs:
释放一组向量
VecCreatSeqWithArray:
创建一个串行的PETSc向量(用户程序)
VecCreatMPIWithArray:
创建一个并行的PETSc向量(用户程序)
2.1.2基本运算操作
VecGetOwnershipRang:
返回向量在局部区域(进程)中的下界和上界
VecGetArray:
返回向量在局部区域内的访存指针
VecRestoreArray:
关闭在局部区域内的对向量的访存
VecGetLocalSize:
返回向量在局部区域内的维数
VecGetSize:
返回全局向量的维数
关于向量的算术运算,如点积(VecDot)、范数(VecNorm)、最小值(VecMin)等,请参考PETSc用户手册(Pages38)。
2.1.3排序
AOCreatBasic:
定义一个新的排序映射
AOPetscToApplication:
从PETSc排序得到应用排序的映射
AOApplicationToPetsc:
从应用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PETSc 用户指南