PETSc-用户指南Word版_第1页
PETSc-用户指南Word版_第2页
PETSc-用户指南Word版_第3页
PETSc-用户指南Word版_第4页
PETSc-用户指南Word版_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、超级计算环境基础并行软件平台建设与应用并行软件开发小组系列测试报告之一PETSc 用户指南中科院计算机网络信息中心超级计算中心http:/ Email: walls程强 迟学斌 冯仰德王建 赵永华NCIC-SC-001, SCCAS2004年8月,北京 目录前言1 PETSc简介1.1 概况 .11.2 体系结构 11.3 基本特色 .41.4 安装PETSc .52 PETSc的基本对象2.1 向量 .72.1.1 创建和聚集 . .72.1.2 基本运算操作 . .82.1.3 索引和排序 . .82.1.4 规则网格与DA .92.1.5 无结构网格与IS .102.2 矩阵 . . .

2、 . 112.1.1 创建和聚集 . .112.1.2 基本运算操作 . .112.1.3 无矩阵运算 .122.1.4 矩阵的划分 . .123 PETSc的基本功能3.1 线性方程求解 133.1.1 基本用法 . . . . . 133.1.2 Krylov子空间方法 .133.1.3 预条件子 .143.1.4 奇异方程求解 .163.2 非线性方程求解 163.2.1 基本用法 . .173.2.2 非线性解法器 . .173.2.3 无矩阵方法 . .173.2.4 有限差分雅可比逼近 . . 183.3 时间步进积分 183.3.1 基本用法 . . . . . 193.3.2

3、求解时间依赖问题 . . . 193.3.3 求解时间稳态问题 . . . 193.3.4 其它求解器 . . 193.4 PETSc的其他功能 203.4.1 性能分析 . . . .203.4.2 图形输出 . .223.4.3 调试和错误检测 . .233.5 PETSc与其它软件 233.5.1 DMMG . .243.5.2 ADIC/ADIFOR . . . . 243.5.3 Matlab . . . . . . . . 243.5.4 ESI . . . . . . . . . . . 244 PETSc编程4.1 PETSc程序范例 254.2 PETSc程序结构 285 P

4、ETSc范例测试5.1 线性方程求解 295.1.1 范例简介 . 295.2 非线性方程求解 . 305.2.1 范例简介 . 305.3 时间步进积分 315.3.1 范例简介 . 316 PETSc测试总结参考文献前言通过计算手段进行重大科学发现,已普遍为人们所共识。从传统科学与工程领域如航空航天、地震预报、气候预测、大型水利建设和石油地质勘探,到大型基因组测试、新药设计和新材料合成等新兴科学研究领域,无处不需要大规模数值模拟和科学计算。在当今社会,科学计算已经逐渐成为影响和关系到一个国家经济发展、科技进步和国家安全的关键性环节。2002年10月,中国科学院确立了“十五”信息化建设规划项

5、目“超级计算环境建设与应用”,而“基础并行软件平台建设”又为其核心开发内容之一。它以基础并行软件环境开发为主要目标,通过广泛搜集目前流行的数值和并行应用软件,进行深层次研究和开发,改进和提高计算性能,并最终移植到特定计算环境如正在建设的国家网格节点上,主要供国内从事科学计算的广大科技人员共享。同时,我们也正逐步开发一系列具有重要应用价值的数值软件和面向网格的科学计算平台,并率先在国内开展自动微分算法的应用基础研究,以及逐渐开发一系列自动微分软件包和数值微分计算环境。在此背景下,我们将陆续推出PETSc、TAO、FFTW、DOUG等系列并行软件在深腾6800上的测试报告,这包括应用和开发两个方面

6、的目标。一方面,我们希望通过这些相对成熟的并行软件在一些典型应用上的成功来改变或导向人们传统的“从无到有”编程思路,我们希望科学家与工程师们更多的依赖这些成熟的、高性能的软件资源以便更高层次开发其应用程序,从而获得可比较性的性能提高。另一方面,任何软件的“成熟性”和可靠性都只能是相对的,不同的应用和不同的体系结构会有不同的代价和性能,以及体系结构的不断发展和变化与应用之间的相互作用对任何软件的生命期都可能是致命的。在典型应用的驱使下,我们希望能够基于这些并行软件做一些高层次的研究和开发。基础并行软件平台建设与应用开发计划包括以下三个方面:1. 数值并行软件的移植及其性能优化。主要包括可移植、可

7、扩展科学计算工具箱(PETSc)、大型稀疏线性方程组并行迭代求解(AZTEC)、高级最优化工具箱(TAO)、非线性与微分/代数方程解法器(SUNDIALS)、FFTW、LAPACK、ScalLAPACK、稀疏矩阵特征值问题并行求解(PARPACK)和无结构网格上的区域分解(DOUG)等内容。2. 自主开发一些高性能数值与并行计算软件包。这些软件包主要包括并行特征值求解器(PSEPS)、自动微分转换系统(DFT)、自动伴随生成器系统(ADG)和并行多维FFT软件包(PMDFFT)等内容。3. 举办用户培训和相关学术会议,推动并行软件的应用和研究开发。主要包括PETSc、TAO、DOUG等基础并行

8、数值软件的应用,以及LINUX/UNIX/网格应用、并行计算方法及其相关内容。最后,我们热忱欢迎国内外所有来自不同学科、不同专业领域的科学家和工程技术人员就更为广泛的科学和工程计算问题提出建议。我们的联系方式:单位:中国科学院计算机网络信息中心超级计算中心网站:电话:(86-10) 5881-2132邮件:walls地址:北京中关村南4街4号通信:北京349信箱,SC,100080 1 PETSc简介1.1 概况PETSc (Portable, Extensible Toolkit for Scientific Computation) 是美国能源部ODE2000支持开发的20多个ACTS工具

9、箱之一,由Argonne国家实验室开发的可移植可扩展科学计算工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc所有消息传递通信均采用MPI标准实现。PETSc用C语言开发,遵循面向对象设计的基本特征,用户基于PETSc对象可以灵活开发应用程序。目前,PETSc支持Fortran 77/90、C和C+编写的串行和并行代码。PETSc是系列软件和库的集合,三个基本组件SLES、SNES和TS本身基于BLAS、LAPACK、MPI 等库实现,同时为TAO、ADIC/ADIFOR、Matlab、ESI 等工具提供数据接口或互操作功能,并具有极好的可扩展性能。PETSc为用户提供

10、了丰富的Krylov子空间迭代方法和预条件子,并提供错误检测、性能统计和图形打印等功能。如今,越来越多的应用程序在PETSc环境上开发,并逐渐显示出PETSc在高效求解大规模数值模拟问题方面的优势和威力。PETSc最新版本为petsc-2.2.1,PETSc网站:/petsc。 目前,PETSc 3正在开发中。1.2 体系结构不同于其它微分/代数方程解法器,PETSc为用户提供了一个通用的高层应用程序开发平台。基于PETSc提供的大量对象和解法库,用户可以灵活地开发自己的应用程序,还可随意添加和完善某些功能,如为线性方程求解提供预条件子、为非线性问题的

11、牛顿迭代求解提供雅可比矩阵、为许多数值应用软件和数学库提供接口等。图1表示了PETSc在实现层次上的抽象,图2具体列举了PETSc的基本数值部件。这里做简要说明。应用程序:用户在PETSc环境下基于PETSc对象和算法库编写的串行或并行应用程序。尽管PETSc完全在MPI上实现,但PETSc程序具有固定的框架结构,即有初始化、空间释放和运行结束等环境运行语句。PDE解法器:用户基于PETSc的三个基本算法库(TS、SNES和SLES)构建的偏微方程求解器。但它却不是PETSc的基本组件。TS:时间步进积分器,用于求解依赖时间或时间演化的ODE方程,或依赖时间的离散化后的PDE方程。对于非时间演

12、化或稳态方程,PETSc提供了伪时间步进积分器。TS积分器最终依赖线性解法器SLES和非线性解法器SNES来实现。PETSc为PVODE库提供了接口。另外,TS的用法非常简单方便。SNES:非线性解法器,为大规模的非线性问题提供高效的非精确或拟牛顿迭代解法。SNES依赖于线性解法器SLES,并采用线性搜索和信赖域方法实现。SNES非常依赖于雅可比矩阵求解,PETSc既支持用户提供的有限差分程序,同时又为用户提供了依赖ADIC等自动微分软件生成的微分程序接口。SLES:线性解法器,它是PETSc的核心部分。PETSc几乎提供了各种高效求解线性方程的解法器,既有串行求解也有并行求解,既有直接法求解

13、也有迭代法求解。对于大规模的线性方程,PETSc提供了大量基于Krylov子空间方法和预条件子的各种成熟而有效的迭代方法,以及其它通用程序和用户程序的接口。应用程序TS (时间步进)PDE解法器SLES (线性方程解法器)SNES (非线性方程解法器)DrawPC (预条件子)KSP (Krylov子空间方法)向量索引集矩阵LAPACKMPIBLAS图1:PETSc实现的层次结构KSP:Krylov子空间方法,广泛涉及Richardson方法,共扼梯度法(CG和BiCG),广义最小残差法(GMRES),最小二乘QR分解(LSQR)等。PC:预条件子,包括雅可比矩阵,分块雅可比矩阵,SOR/SS

14、OR方法,不完全Cholesky分解,不完全LU分解,可加性Schwartz方法,多重网格预条件子等。DRAW:应用程序的性能分析和结果显示。时间步法非线性解法器其它拟时间步向后Euler方法Euler方法牛顿迭代法其它信赖域线搜索Krylov子空间方法其它ChebyshevRichardsonTFQMRBi-CG-StabCGSCGGMRES预条件子LU加法Schwarz其它ICCILUJacobi块Jacobi矩阵压缩稀疏行(AIJ)块压缩稀疏(BAIJ)块对角(BDiag)稠密其它向量索引集索引块索引跨度其它图2:PETSc的数值组件矩阵:PETSc的基本数据对象。与向量对象不同,一个P

15、ETSc的矩阵对象首先是在局部(各个进程)数据填充完成之后再对其进行全局聚集,然后再由PETSc对象统一管理和实现矩阵的各种运算和操作。当问题的计算规模较大时,稀疏矩阵的填充将是影响程序性能的关键因素。PETSc还专门为用户提供了的单纯依赖向量来实现矩阵基本运算(或无矩阵运算)的接口。向量:PETSc的基本数据对象。对于规则的正交网格,PETSc自动对向量进行划分,并通过分布式存储向量(即DA对象)来管理。通过DA对象,用户可以简单地实现向量的分发、聚集、局部和全局之间的相互映像、边界点的通信等基本操作。DA对象隐藏了进程之间的通信,用户只需提供全局的向量结构和数值。但对于无结构网格,用户则可

16、以通过索引集(即IS对象)来实现向量的分发、聚集、映像、边界点的通信等基本操作。索引集:它是一系列数据操作对象的集合,专门用来管理无结构网格向量的分发、聚集、局部和全局之间的映像、边界点的通信等基本操作。1.3 基本特色众所周知,用户通过PETSc来开发应用程序往往具有相当的难度。一方面,它需要用户本身具有较高的数值计算方法方面的专业知识和并行计算方法方面的编程技巧。另一方面,总的来说PETSc只是一个高级的应用程序开发环境,它为许多软件(库)和用户程序提供接口,用户只有充分熟悉和利用现有的软件资源和数学库的基础上才有可能开发出高效的应用程序。尽管如此,PETSc仍然因为其具有其它软件不可比拟

17、的优点吸引着越来越多的用户用它来开发应用程序。下面我们一一介绍和分析PETSc的这些优点或特色。计算能力:PETSc为用户提供了丰富的算法和库资源。三个求解器(SLES、SNES和TS)构成了PETSc的核心组件。PETSc不仅为中小规模线性方程组的求解提供了高效的直接方法,还为大规模(稀疏)线性方程组的迭代求解提供了多种Krylov子空间方法和多种预条件子。可兼容性:一方面,PETSc具有很强的兼容能力,可在不同体系结构和不同操作系统环境高效运行。另一方面,PETSc本身基于高性能的线性代数库(BLAS和LAPACK)和MPI消息传递环境实现,同时又充分吸收和融入了其它优秀软件的优点,如无结

18、构网格区域分解和雅可比矩阵求解等方面的功能。可扩展性:PETSc的可扩展性功能主要包括三个方面:计算性能的并行可扩展性、功能的可扩展性和计算能力的可扩展性。无论是在计算时间还是在浮点性能方面,PETSc提供的范例程序都有良好的线性加速比性能。面向对象的良好设计风格使得PETSc具有良好的功能扩展能力。作为一个高级应用程序开发平台,PETSc特别适合于用来开发大型应用程序。抽象数据类型:PETSc基于面向对象技术实现,具有所有面向对象软件的可移植性、可继承性和可扩展性等基本程序特征。PETSc 的向量、矩阵等基本数据对象完全采用抽象数据类型实现,尽量对用户屏蔽数据对象的区域分解和存储等细节。所有

19、PETSc格点数据对象的划分、初始化和存取等基本操作都由DA对象来管理和相应PETSc库函数实现。用户基于PETSc对象可以灵活开发其应用程序。PETSc对象和组件为构造大规模应用程序奠定一个良好的基础。输出能力:PETSc具有良好的性能分析和图形输出功能。同时,PETSc还具有高可用性,并具有很强的错误诊断能力。总之,PETSc在无论是在计算能力、设计风格还是在可兼容性和可扩展性等方面都显示出极大的优越性。PETSc不但为科学与工程计算领域的科学家和工程师提供了强大的(大规模)偏微方程求解工具,而且也为模型科学应用和高效算法设计提供了一个丰富的试验平台和计算环境。它使得算法的扩展和应用程序的

20、个性化实现都更为容易。另外,PETSc的这种设计风格增强了代码的再利用性和编程的灵活性,同时将并行性问题与算法的选择分离开来。1.4 安装PETSc这里,我们以PETSc 2.1.3为例,介绍如何在LINUX/UNIX环境下安装PETSc。在安装PETSc之前, 系统首先需要做如下配置: 1) MPI的一种实现。对由厂家提供并已经安装了MPI的并行机,推荐使用厂家提供的MPI实现, 因为通常比使用免费版本具有更好的性能。否则推荐MPICH, 可在/mpi/mpich免费下载获得。由于PETSc本身包含了MPI的一个简捷版本,因此只对串行运行PETSc感

21、兴趣的用户除外。2)BLAS和LAPACK的一个拷贝。许多机器本身提供了BLAS或LAPACK等数学库。例如,DEC alpha提供了DXML, 而IBM rs6000提供了ESSL版本。检查你使用的机器配置,如果这些库尚未在你的机器上安装,可在如下网站上获得 ftp:/info. / pub/petsc/fblaslapack.tar.gz。建议你尽可能使用厂家提供的BLAS库。3)可选软件包。PETSc提供了许多软件和库的接口,用户可以根据不同的应用需要安装相应的软件和库。然后,你就可以按以下步骤逐步安装PETSc:1)在http:/www-unix.mcs.anl.

22、gov/petsc/petsc-2/download/index.html上尽可能获取最新版本的petsc.tar.gz,并用如下方式解包 gunzip -c petsc.tar.gz | tar xof 缺省时, 将自动创建petsc-2.1.3或其最新版本目录。 PETSc版本的补丁程序可通过/petsc/petsc-patches.html获得。2)设置环境变量PETSC_DIR和PETSC_ARCH,分别为PETSc主目录的路径和机器体系结构。例如setenv PETSC_DIR/home/username/petsc-2.1.3 s

23、etenv PETSC_ARCH rs6000 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 =

24、$PETSC_DIR/src/sys/src/mpiuni/mpirun 4)或许还需编辑文件$PETSC_DIR/bmake/$PETSC_ARCH/variables以从其缺省改变C, C+, 或Fortran编译器的名字: Solaris使用GNU编译器用PETSC_ARCH=solaris_gnu IBM rs6000使用GNU编译器用PETSC_ARCH=rs6000_gnu CRAY t3d: 确信环境变量TARGET被设置给cray-t3d 5) 在PETSc主目录中使用 make BOPT=g all >& make_log 来建立PETSc的调试版本或使用 ma

25、ke BOPT=O all >& make_log 来建立PETSc库的优化版本。标志BOPT确定建立哪种库。其它可选项是对C+版本的BOPT= g_c+, O_c+和对复数版本的BOPT=g_complex,O_complex 在HP-UX机器上我们强烈推荐使用Gnu make (如果还没用,可安装之),而不用PETSc提供的makefile脚本。在PETSc构建文件(makefiles)中使用gnumake, 需在文件$PETSC_DIR/bmake/hpux/base定义OMAKE为gnumake的路径。6)检查make_log,以确定在安装过程中是否发生任何错误。查阅一般

26、问题的帮助信息/petsc/petsc-patches.html。另外,用户还可以通过configure安装PETSc。请参考PETSc网站,这里从略。2 PETSc的基本对象本章从对象的创建、划分、功能和索引等几个方面简单介绍PETSc的两个基本对象:向量和矩阵。所涉及的内容和顺序基本与PETSc用户手册一致。2.1 向量向量是最简单的PETSc对象。PETSc向量对象主要用于存储线性方程组的解和右端向量。PETSc提供AO对象来管理向量在全局和局部之间的索引、排序和映射。PETSc还提供了两个对象DA和IS,来分别管理向量在规则正交网格和

27、无结构网格上各进程之间的分发、 聚集和边界点的数据通信等操作。2.1.1 创建和聚集VecCreatSeq:创建一个串行的PETSc向量VecCreatMPI:创建一个并行的PETSc向量VecCreat:创建一个PETSc向量名VecSetSizes:设置向量维数VecSetFromOptions:通过运行参数设置向量数据类型VecSet:将一个数值赋给向量的每个元素VecSetValues:分别给向量的每个元素插入或累加数值VecAssemblyBegin:启动一个向量的创建VecAssemblyEnd:完成一个向量的创建VecView:屏幕打印向量的值VecDuplicate:复制一个向

28、量VecDuplicateVecs:复制一组向量VecDestroy:释放一个向量VecDestroyVecs:释放一组向量VecCreatSeqWithArray:创建一个串行的PETSc向量(用户程序)VecCreatMPIWithArray:创建一个并行的PETSc向量(用户程序)2.1.2 基本运算操作VecGetOwnershipRang:返回向量在局部区域(进程)中的下界和上界VecGetArray:返回向量在局部区域内的访存指针VecRestoreArray:关闭在局部区域内的对向量的访存VecGetLocalSize:返回向量在局部区域内的维数VecGetSize:返回全局向量

29、的维数关于向量的算术运算,如点积(VecDot)、范数(VecNorm)、最小值(VecMin)等,请参考PETSc用户手册(Pages 38)。2.1.3 排序AOCreatBasic:定义一个新的排序映射AOPetscToApplication:从PETSc排序得到应用排序的映射AOApplicationToPetsc:从应用排序得到PETSc排序的映射AOCreatBasicIS:定义一个新的索引集排序映射AOPetscToApplicationIS:从PETSc索引集排序得到应用索引集排序的映射AOApplicationToPetscIS:从应用索引集排序得到PETSc索引集排序的映射

30、AOView:查询一个排序映射AODestroy:释放一个排序映射ISLocalToGlobalMappingCreat:建立一个局部排序与全局排序之间的映射ISLocalToGlobalMappingApply:获得局部排序到全局排序的映射ISLocalToGlobalMappingApplyIS:获得局部索引集排序到全局排序的映射ISLocalToGlobalMappingDestroy:释放一个局部排序与全局排序的映射ISGlobalToLocalMappingApply:获得全局排序到一系列局部排序的映射VecSetLocalToGlobalMapping:设置从一系列局部排序与全局排

31、序的映射VecSetValuesLocal:得到一系列局部排序在2.1.5,我们还将详细介绍主要用于无结构网格划分情形下的索引集排序。2.1.4 规则网格的DA实现分布式数组(DA)是PETSc的一个重要特色。DA自动管理数据在局部进程之间的划分、消息传递和读写。用户只需提供数组的全局数值,并通过全局和局部之间的逻辑排序来引用数组元素。在PETSc学习过程中,用户要特别注意向量(Vector)和数组(Array)两个概念,前者着重强调独立于数组数值和存储之外的逻辑结构或排序上的抽象,而后者着重强调数组元素的访问和数值改写。DACreat1d:创建一个1维的DA数组DACreat2d:创建一个2

32、维的DA数组DACreat3d:创建一个3维的DA数组DACreatGlobalVector:创建一个全局的DA向量DACreatLocalVector:创建一个局部的DA向量DAGlobalToLocalBegin:启动一个DA向量的分发DAGlobalToLocalEnd:完成一个DA向量的分发DALocalToGlobal:完成一个DA向量的聚集DALocalToLocalBegin:启动一个DA向量的局部分发DALocalToLocalEnd:完成一个DA向量的局部分发DAGetScatter:启动一个DA向量的分发DAGetLocalVector:获得一个局部DA向量的访问权DARe

33、storeLocalVector:释放一个局部DA向量的访问权DAVecGetArray:获得一个局部DA数组的访存权DAVecRestoreArray:释放一个局部DA数组的访存权DAGetCorners:获得数组左边界的初始位置DAGetGhostCorners:获得数组伪边界的初始位置DAGetGlobalIndices:获得全局格点数(含伪边界)DAGetISLocalToGlobalMapping:获得局部到整体索引集之间的映射DASetLocalToGlobalMapping:设置一个向量的局部到整体的映射MatSetLocalToGlobalMapping:设置一个矩阵的局部到整

34、体的映射DAGetAO:从DA环境上获得一个应用排序2.1.5 无结构网格的IS实现索引集(IS)是PETSc的基本对象之一。它管理和实现无结构网格上向量之间的各种数据分发与聚集、伪边界点数据交换等基本操作。它对于PETSc在应用程序中最终实现通信抽象具有重要的意义。ISCreatGeneral:创建一个索引集排序ISCreatStride:创建一个具有跨度的索引集排序ISDestroy:释放一个索引集排序ISGetSize:获得一个索引集排序的数据规模的大小ISStrideGetInfo:获得一个索引集排序的跨度值ISGetIndices:获得一个索引集排序的所有索引列表ISRestoreI

35、ndices:释放一个索引集列表的存储空间ISCreatBlock:创建一个块索引集排序ISBlockGetIndices:获得一个块索引集排序的所有索引列表ISBlockGetSize:获得一个块索引集排序的数据规模的大小ISBlockGetBlockSize:没有说明(见在线手册)ISBlock:没有说明(见在线手册)VecScatterCreat:创建一个向量与向量之间的分发VecScatterBegin:启动一个向量与向量之间的分发VecScatterEnd:完成一个向量与向量之间的分发VecScatterDestroy:释放一个向量与向量之间的分发VecCreatGhost:创建一个

36、含伪边界点的PETSc向量VecCreatGhostWithArray:创建一个含伪边界点的PETSc向量(用户程序)VecGhostGetLocalForm:获得一个含伪边界点向量的局部访问权VecGhostUpdateBegin:启动一个向量伪边界点的更新VecGhostUpdateEnd:完成一个向量伪边界点的更新VecGhostRestoreLocalForm:释放一个含伪边界点向量的局部访问权2.2 矩阵矩阵是PETSc的基本对象。PETSc同时提供了稠密矩阵和稀疏行矩阵的基本运算功能,以及一些特殊格式(如“无矩阵”实现,无结构网格划分等内容)和用户提供的某些功能扩展和实现。PETS

37、c的矩阵运算和操作主要包括矩阵的创建、插值、聚集、各种算术运算和释放。PETSc的各种矩阵运算和操作使用起来非常方便,用户无需关心矩阵的具体存储实现。2.2.1 创建和聚集MatCreate:创建一个PETSc矩阵对象MatSetValues:给一个矩阵赋值MatSetOption:设置一个矩阵的存储格式 MatAssemblyBegin:启动一个矩阵的聚集MatAssemblyEnd:完成一个矩阵的聚集MatGetOwnershipRang:获得一个矩阵的局部行划分的上界和下界MatCreateSeqAIJ:创建一个串行压缩稀疏行格式的矩阵对象MatCreateMPIAIJ:创建一个并行压缩

38、稀疏行格式的矩阵对象MatCreateSeqDense:创建一个串行稠密格式的矩阵对象MatCreateMPIDense:创建一个并行稠密格式的矩阵对象2.2.2 基本运算操作MatZeroRows:初始化一个矩阵行MatZeroEntries:初始化一个矩阵MatConvert:矩阵变换MatGetRow:获得矩阵的一行元素的值MatRestorerow:释放对矩阵行的访问权MatCopy:复制一个矩阵MatView:屏幕输出一个矩阵关于矩阵的算术运算,如矩阵向量乘积(MatMult)、矩阵范数(MatNorm)、矩阵转置(MatTranspose)、获得矩阵对角元素(MatGetDiago

39、nal)等,请参考PETSc用户手册(Pages 57)。2.2.3 “无矩阵”运算所谓“无矩阵”运算(Matrix-Free Matrices),是指不通过显示存储整个矩阵而是通过向量运算来实现矩阵的各种操作和运算的方法。PETSc给用户提供了一个虚拟的矩阵对象/环境,用户在这个环境下可以自由开发矩阵运算程序。MatCreateShell:创建一个虚拟的矩阵对象UserMult:用户编写的矩阵向量乘积程序MatShellSetOperation:将一个用户程序封装到一个虚拟的矩阵对象中2.2.4 矩阵的划分对于许多无结构网格的PDE求解,格点在各进程中的分布对计算性能具有非常重要的影响。目前

40、PETSc不支持动态数据划分,动态负载平衡等技术,而是采取反复创建和释放的办法来优化网格的划分。另外,PETSc提供了对并行图形划分软件ParMETIS的接口。MatCreateMPIAdj:创建一个含邻接信息的并行矩阵对象MatPartitioningCreate:创建一个并行矩阵划分MatPartitioningSetAdjacency:设置矩阵划分的邻接信息MatPartitioningSetFromoptions:通过运行参数设置矩阵划分MatPartitioningApply:启动一个并行矩阵划分MatPartitioningDestory:释放一个并行矩阵划分MatDestroy:

41、释放一个含邻接信息的并行矩阵对象ISPartitioningToNumbering:获得矩阵局部的索引集和排序3 PETSc的基本功能本章主要介绍PETSc的三个核心组件、性能分析和接口功能。PETSc的三个核心组件包括线性方程求解器(SLES)、非线性方程求解器(SNES)和时间步进积分器(TS)。所涉及的内容和顺序基本与PETSc用户手册(版本2.2.0)一致。3.1 线性方程求解SLES构成了PETSc最核心的部分。它不仅是几乎所有PDE方程求解器的基本内核,而且也是实现PETSc的其它两个核心组件SNES和TS的必不可少的部分。SLES求解线性方程组 (3.1)其中解算子是维非奇异矩阵

42、,是维右端向量,为维解向量。本节从线性方程求解环境的创建、Krylov子空间方法和预条件子(PC)的选择、收敛性判据、LU直接求解等方面详细介绍SLES。3.1.1 基本用法SLESCreate:创建一个线性方程求解环境SLESSetOperators:设置求解算子(矩阵)SLESSetFromoptions:通过运行参数设置SLES运行选项SLESSolve:启动一个线性方程求解器SLESDestroy:释放一个线性方程求解环境SLESSetup:启动一个线性方程求解器SLESGetPC:获得PC对象/环境的访问权SLESGetKSP:获得KSP对象/环境的访问权3.1.2 Krylov子空

43、间方法KSPSetType:设置Krylov子空间方法的类型KSPRichardsonSetScale:没有描述KSPChebychevSetEigenvalues:没有描述KSPGMRESSetRestart:没有描述KSPGMRESSetOrthogonalization:没有描述KSPCGSetType:设置共扼梯度方法的对称类型KSPSetInitialGuessNonzero:设置一个非零的初始猜值KSPSetPreconditionerSide:设置预条件子的位置KSPSetNormType:设置范数类型KSPSetTolerances:设置最大迭代步数KSPSetConverge

44、nceTest:启动用户收敛性测试程序的封装KSPDefaultMonitor:输出每迭代步的残差KSPSingularValueMonitor:输出每迭代步预条件子的最大奇异值KSPTrueMonitor:输出每个迭代步详细的残差信息KSPLGMonitorCreate:创建一个图形输出对象/环境KSPSetMonitor:设置输出模式KSPLGMonitorDestroy:释放一个图形输出对象/环境KSPSetComputeEigenvalues:设置预条件子特征值的计算环境KSPComputeEigenvalues:计算预条件子的特征值KSPComputeEigenvaluesExpli

45、citly:用直接方法计算预条件子的特征值KSPGetSolution:获得解向量的值KSPGetRhs:获得右边向量的值KSPBuildSolution:获得每个迭代步解向量的逼近值KSPBuildResidual:获得每个迭代步残差的逼近值3.1.3 预条件子PCSetType:设置预条件子的类型PCILUSetLevels:设置ILU预条件子的优化级别PCILCCSetLevels:设置ILCC预条件子的优化级别PCILUSetReuseOrdering:设置复用ILU分解中的排序对象PCILUSetUseDropTolerance:没有描述PCILUDTSetReuseFill:没有描

46、述PCILUSetUSeInPlace:没有描述PCILUSetAllowDiagonalFill:没有描述MatCreateMPIRowbs:没有描述PCSORSetOmega:设置SOR方法的松弛因子PCSORSetIterations:设置SOR方法的迭代步数PCSORSetSymmetric:设置SOR方法的对称类型PCLUSetUseInplace:没有描述PCBJacobiGetSubSLES:没有描述PCASMGetSubSLES:没有描述PCJacobiSetTotalBlocks:没有描述PCASMSetTotalSubdomains:没有描述PCASMSetType:没有描

47、述PCBJacobiSetLocalBlocks:没有描述PCASMSetLocalSubdomains:没有描述PCASMSetOverlap:没有描述PCShellSetApply:启动一个用户提供预条件子的环境PCShellSetSetup:设置一个用户提供预条件子的环境PCCompositeAddPC:累加一个新的预条件子PCCompositeSetType:设置预条件子的复合类型PCCompositeSetUserTrue:没有描述PCCompositeGetPC:没有描述PCILUSetFill:没有描述PCSLESGetSLES:将解法器算子设置为预条件子PCSLESSetUse

48、rTrue:没有描述MGSetLevels:设置多重网格预条件子的优化级别MGSetCycles:没有描述MGSetNumberSmoothUp:没有描述MGSetNumberSmoothDown:没有描述MGGetCoarseSolve:设置粗网格算子MGGetSmoother:设置平滑算子MGGetSmootherUp:没有描述MGGetSmootherDown:没有描述MGSetInterpolate:没有描述MGSetRestriction:没有描述MGSetResidual:设置多重网格预条件子的残差MGSetRhs:设置多重网格预条件子的右边向量MGSetX:设置多重网格预条件子的

49、解向量MGSetR:设置多重网格预条件子的残差3.1.4 奇异方程求解MatNullSpaceCreate:没有描述PCNullSpaceAttach:没有描述3.2 非线性方程求解SNES非线性解法器基于牛顿迭代法(线性搜索和信赖域方法),依赖线性解法器SLES实现。雅可比矩阵的求解是SNES解法器的重要组成部分。SNES求解以下形式的非线性方程组 (3.2)其中解算子。3.2.1 基本用法SNESCreate:创建一个非线性方程求解环境SNESSetType:设置非线性求解器的类型SNESSetFromOptions:通过运行参数设置SNES运行选项SNESSolve:启动一个非线性方程求

50、解器SNESDestroy:释放一个非线性方程求解器SNESSetFunction:设置非线性函数SNESSetJacobian:设置雅可比矩阵 3.2.2 非线性解法器SNESSetLineSearch:设置线性搜索方法的求解环境SNESSetTolerances:设置最大迭代步数和误差界SNESSetTrustRegionTolerances:同上SNESSetConvergenceTest:设置用户编写的收敛测试SNESSetMonitor:设置输出模式SNESGetSolution:获得解向量的值SNESGetFunction:获得函数值3.2.3 “无矩阵”方法在其迭代求解线性系统的过程中,SNES完全支持用户提供的“无矩阵”预条件子。同前面类似,PETSc首先给用户提供了一个虚拟的矩阵对象和环境,然后用户基于这个环境可以自由开发自己的预条件子计算程序。MatCreateSNESMF:在SNES环境中创建一个虚拟的矩阵对象MatCreateMF:没有描述MatSNESMFSetFunctionError:设置有限差分的逼近误差MatSNESMFDefaultSetUmin:设置默认的有限差分增量MatSNESMFWPSetComputeNormA:设置有限差分增量MatSNESMF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论