PETSc用戶指南_第1頁
PETSc用戶指南_第2頁
PETSc用戶指南_第3頁
PETSc用戶指南_第4頁
PETSc用戶指南_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、超級計算環(huán)境基礎(chǔ)并行軟件平臺建設(shè)與應(yīng)用 并行軟件開發(fā)小組系列測試報告之一PETSc用戶指南中科院計算機網(wǎng)絡(luò)信息中心超級計算中心http:/ Email: walls程強遲學(xué)斌馮仰德王建趙永華NCIC-SC-001,SCCAS2004年8月,北京目錄、尸、 亠前言1 PETSc 簡介1.1 概況 .11.2 體系結(jié)構(gòu) 11.3 基本特色 .41.4 安裝 PETSc .52 PETSc 的基本對象2.1 向量72.1.1 創(chuàng)建和聚集 72.1.2 基本運算操作 .82.1.3 索引和排序.82.1.4 規(guī)則網(wǎng)格與 DA.92.1.5 無結(jié)構(gòu)網(wǎng)格與 IS .102.2 矩陣 . . . . . 1

2、12.1.1 創(chuàng)建和聚集 . . 112.1.2 基本運算操作 . .112.1.3 無矩陣運算 . .122.1.4 矩陣的劃分 . .123 PETSc 的基本功能3.1 線性方程求解 133.1.1 基本用法 . . . . . 133.1.2 Krylov 子空間方法 . .133.1.3 預(yù)條件子 . .143.1.4 奇異方程求解 . .163.2 非線性方程求解 163.2.1 基本用法 . .173.2.2 非線性解法器 . .173.2.3 無矩陣方法 . .17324 有限差分雅可比逼近 . 183.3 時間步進積分 183.3.1 基本用法 . 193.3.2 求解時間依

3、賴問題 .193.3.3 求解時間穩(wěn)態(tài)問題 . . . 193.3.4 其它求解器 . . 193.4 PETSc的其他功能 203.4.1 性能分析 . . . .203.4.2 圖形輸出 . .223.4.3 調(diào)試和錯誤檢測 . .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程序結(jié)構(gòu) 285 PETSc 范例測試5.1 線性方程求解 295.1.1 范例簡介 . 295.2 非線

4、性方程求解 .305.2.1 范例簡介 . 305.3 時間步進積分 315.3.1 范例簡介 . 316 PETSc 測試總結(jié)參考文獻、八 、亠前言通過計算手段進行重大科學(xué)發(fā)現(xiàn), 已普遍為人們所共識。 從傳統(tǒng)科學(xué)與工程領(lǐng)域 如航空航天、地震預(yù)報、氣候預(yù)測、大型水利建設(shè)和石油地質(zhì)勘探,到大型基因 組測試、新藥設(shè)計和新材料合成等新興科學(xué)研究領(lǐng)域, 無處不需要大規(guī)模數(shù)值模 擬和科學(xué)計算。 在當(dāng)今社會, 科學(xué)計算已經(jīng)逐漸成為影響和關(guān)系到一個國家經(jīng)濟 發(fā)展、科技進步和國家安全的關(guān)鍵性環(huán)節(jié)。2002年 10月,中國科學(xué)院確立了“十五”信息化建設(shè)規(guī)劃項目“超級計算環(huán)境 建設(shè)與應(yīng)用”,而“基礎(chǔ)并行軟件平臺建

5、設(shè)”又為其核心開發(fā)內(nèi)容之一。它以基 礎(chǔ)并行軟件環(huán)境開發(fā)為主要目標,通過廣泛搜集目前流行的數(shù)值和并行應(yīng)用軟 件,進行深層次研究和開發(fā), 改進和提高計算性能, 并最終移植到特定計算環(huán)境 如正在建設(shè)的國家網(wǎng)格節(jié)點上,主要供國內(nèi)從事科學(xué)計算的廣大科技人員共享。 同時,我們也正逐步開發(fā)一系列具有重要應(yīng)用價值的數(shù)值軟件和面向網(wǎng)格的科學(xué) 計算平臺, 并率先在國內(nèi)開展自動微分算法的應(yīng)用基礎(chǔ)研究, 以及逐漸開發(fā)一系 列自動微分軟件包和數(shù)值微分計算環(huán)境。在此背景下,我們將陸續(xù)推出 PETSc、 TAO、FFTW 、DOUG 等系列并行軟件在 深騰 6800 上的測試報告,這包括應(yīng)用和開發(fā)兩個方面的目標。一方面,我

6、們希 望通過這些相對成熟的并行軟件在一些典型應(yīng)用上的成功來改變或?qū)蛉藗儌?統(tǒng)的“從無到有”編程思路,我們希望科學(xué)家與工程師們更多的依賴這些成熟的、 高性能的軟件資源以便更高層次開發(fā)其應(yīng)用程序,從而獲得可比較性的性能提 高。另一方面,任何軟件的“成熟性”和可靠性都只能是相對的,不同的應(yīng)用和 不同的體系結(jié)構(gòu)會有不同的代價和性能, 以及體系結(jié)構(gòu)的不斷發(fā)展和變化與應(yīng)用 之間的相互作用對任何軟件的生命期都可能是致命的。 在典型應(yīng)用的驅(qū)使下, 我 們希望能夠基于這些并行軟件做一些高層次的研究和開發(fā)。基礎(chǔ)并行軟件平臺建設(shè)與應(yīng)用開發(fā)計劃包括以下三個方面:1. 數(shù)值并行軟件的移植及其性能優(yōu)化。主要包括可移植、

7、可擴展科學(xué)計算工具 箱(PETSc)、大型稀疏線性方程組并行迭代求解(AZTEC)、高級最優(yōu)化工 具箱( TAO ) 、非線性與微分/代數(shù)方程解法器( SUNDIALS ) 、 FFTW、 LAPACK 、 ScalLAPACK、稀疏矩陣特征值問題并行求解(PARPACK)和無結(jié)構(gòu)網(wǎng)格上 的區(qū)域分解( DOUG )等內(nèi)容。2. 自主開發(fā)一些高性能數(shù)值與并行計算軟件包。 這些軟件包主要包括并行特征值 求解器(PSEPS、自動微分轉(zhuǎn)換系統(tǒng)(DFT)、自動伴隨生成器系統(tǒng)(ADG) 和并行多維FFT軟件包(PMDFFT、等內(nèi)容。3. 舉辦用戶培訓(xùn)和相關(guān)學(xué)術(shù)會議,推動并行軟件的應(yīng)用和研究開發(fā)。主要包括

8、PETSc、TAO、 DOUG 等基礎(chǔ)并行數(shù)值軟件的應(yīng)用,以及 LINUX/UNIX/ 網(wǎng)格 應(yīng)用、并行計算方法及其相關(guān)內(nèi)容。最后,我們熱忱歡迎國內(nèi)外所有來自不同學(xué)科、 不同專業(yè)領(lǐng)域的科學(xué)家和工程技 術(shù)人員就更為廣泛的科學(xué)和工程計算問題提出建議。我們的聯(lián)系方式:單位:中國科學(xué)院計算機網(wǎng)絡(luò)信息中心超級計算中心 網(wǎng)站: 電話: (86-10) 5881-2132郵件: walls 地址:北京中關(guān)村南 4街 4號 通信:北京 349 信箱, SC, 10008041 PETSc 簡介1.1 概況PETSc (Portable, Extensible Toolkit for Scientific Co

9、mputation) 是美國能源部 ODE2000 支持開發(fā)的 20 多個 ACTS 工具箱之一,由 Argonne 國家實驗室開發(fā) 的可移植可擴展科學(xué)計算工具箱,主要用于在分布式存儲環(huán)境高效求解偏微分 方程組及相關(guān)問題。 PETSc 所有消息傳遞通信均采用 MPI 標準實現(xiàn)。PETSc用C語言開發(fā),遵循面向?qū)ο笤O(shè)計的基本特征,用戶基于PETSc對象可 以靈活開發(fā)應(yīng)用程序。目前,PETSc支持Fortran 77/90、C和C+編寫的串行 和并行代碼。PETSc 是系列軟件和庫的集合,三個基本組件 SLES、 SNES 和 TS 本身基于 BLAS、 LAPACK 、 MPI 等庫實現(xiàn),同時為

10、 TAO、 ADIC/ADIFOR 、 Matlab、 ESI 等工具提供數(shù)據(jù)接口或互操作功能,并具有極好的可擴展性能。 PETSc 為用戶 提供了豐富的 Krylov 子空間迭代方法和預(yù)條件子,并提供錯誤檢測、性能統(tǒng)計 和圖形打印等功能。如今,越來越多的應(yīng)用程序在PETSc環(huán)境上開發(fā),并逐漸顯示出PETSc在高效 求解大規(guī)模數(shù)值模擬問題方面的優(yōu)勢和威力。PETSc最新版本為 petsc-2.2.1, PETSc網(wǎng)站:/petsQ 目 前, PETSc 3正在開發(fā)中。1.2 體系結(jié)構(gòu)不同于其它微分/代數(shù)方程解法器,PETSc為用戶提供了一個通用的高層應(yīng)

11、用程 序開發(fā)平臺?;赑ETSc提供的大量對象和解法庫,用戶可以靈活地開發(fā)自己 的應(yīng)用程序, 還可隨意添加和完善某些功能, 如為線性方程求解提供預(yù)條件子、 為非線性問題的牛頓迭代求解提供雅可比矩陣、為許多數(shù)值應(yīng)用軟件和數(shù)學(xué)庫 提供接口等。圖1表示了 PETSc在實現(xiàn)層次上的抽象,圖2具體列舉了 PETSc 的基本數(shù)值部件。這里做簡要說明。應(yīng)用程序:用戶在PETSc環(huán)境下基于PETSc對象和算法庫編寫的串行或并行應(yīng) 用程序。盡管PETSc完全在MPI上實現(xiàn),但PETSc程序具有固定的框架結(jié)構(gòu), 即有初始化、空間釋放和運行結(jié)束等環(huán)境運行語句。PDE解法器:用戶基于PETSc的三個基本算法庫(TS、

12、SNES和SLES)構(gòu)建 的偏微方程求解器。但它卻不是 PETSc的基本組件。TS :時間步進積分器,用于求解依賴時間或時間演化的 ODE方程,或依賴時 間的離散化后的PDE方程。對于非時間演化或穩(wěn)態(tài)方程,PETSc提供了偽時間 步進積分器。TS積分器最終依賴線性解法器SLES和非線性解法器SNES來實 現(xiàn)。PETSc為PVODE庫提供了接口。另外,TS的用法非常簡單方便。SNES:非線性解法器,為大規(guī)模的非線性問題提供高效的非精確或擬牛頓迭代 解法。SNES依賴于線性解法器SLES,并采用線性搜索和信賴域方法實現(xiàn)。SNES 非常依賴于雅可比矩陣求解,PETSc既支持用戶提供的有限差分程序,同

13、時又 為用戶提供了依賴ADIC等自動微分軟件生成的微分程序接口。SLES:線性解法器,它是PETSc的核心部分。PETSc幾乎提供了各種高效求 解線性方程的解法器,既有串行求解也有并行求解,既有直接法求解也有迭代 法求解。對于大規(guī)模的線性方程,PETSc提供了大量基于Krylov子空間方法和 預(yù)條件子的各種成熟而有效的迭代方法,以及其它通用程序和用戶程序的接口。PDE解法器TS (時間步進)SNES (非線性方程解法器)SLES (線性方程解法器)KSP (Krylov子空間方法)PC (預(yù)條件子)Draw圖1: PETSc實現(xiàn)的層次結(jié)構(gòu)KSP: Krylov子空間方法,廣泛涉及Richard

14、son方法,共扼梯度法(CG和BiCG), 廣義最小殘差法(GMRES),最小二乘QR分解(LSQR)等。PC:預(yù)條件子,包括雅可比矩陣,分塊雅可比矩陣, SOR/SSOR方法,不完全 Cholesky分解,不完全LU分解,可加性Schwartz方法,多重網(wǎng)格預(yù)條件子等。DRAW :應(yīng)用程序的性能分析和結(jié)果顯示。Krylov子空間方法GMRCGCGSBi-CG-StaTFQMRRichardsonChebyshev其它非線性解法器牛頓迭代法其它線搜索信賴域Euler方法向后Euler方法擬時間步其它時間步法索引集索引塊索引跨度其它預(yù)條件子加法 Schwarz塊 JacobiJacobiILUI

15、CCLU其它矩陣壓縮稀疏行(AIJ)塊壓縮稀疏(BAIJ)塊對角(BDiag)稠密其它圖2: PETSc的數(shù)值組件矩陣:PETSc的基本數(shù)據(jù)對象。與向量對象不同,一個 PETSc的矩陣對象首先 是在局部(各個進程)數(shù)據(jù)填充完成之后再對其進行全局聚集, 然后再由PETSc 對象統(tǒng)一管理和實現(xiàn)矩陣的各種運算和操作。當(dāng)問題的計算規(guī)模較大時,稀疏 矩陣的填充將是影響程序性能的關(guān)鍵因素。PETSc還專門為用戶提供了的單純依賴向量來實現(xiàn)矩陣基本運算(或無矩陣運算)的接口。向量:PETSc的基本數(shù)據(jù)對象。對于規(guī)則的正交網(wǎng)格,PETSc自動對向量進行劃分,并通過分布式存儲向量(即 DA對象)來管理。通過DA對

16、象,用戶可 以簡單地實現(xiàn)向量的分發(fā)、聚集、局部和全局之間的相互映像、邊界點的通信 等基本操作。DA對象隱藏了進程之間的通信,用戶只需提供全局的向量結(jié)構(gòu) 和數(shù)值。但對于無結(jié)構(gòu)網(wǎng)格,用戶則可以通過索引集(即IS對象)來實現(xiàn)向量的分發(fā)、聚集、映像、邊界點的通信等基本操作。索引集:它是一系列數(shù)據(jù)操作對象的集合,專門用來管理無結(jié)構(gòu)網(wǎng)格向量的分發(fā)、聚集、局部和全局之間的映像、邊界點的通信等基本操作。1.3 基本特色眾所周知,用戶通過 PETSc 來開發(fā)應(yīng)用程序往往具有相當(dāng)?shù)碾y度。一方面,它 需要用戶本身具有較高的數(shù)值計算方法方面的專業(yè)知識和并行計算方法方面的 編程技巧。另一方面,總的來說 PETSc 只是

17、一個高級的應(yīng)用程序開發(fā)環(huán)境,它 為許多軟件(庫)和用戶程序提供接口,用戶只有充分熟悉和利用現(xiàn)有的軟件 資源和數(shù)學(xué)庫的基礎(chǔ)上才有可能開發(fā)出高效的應(yīng)用程序。盡管如此, PETSc 仍 然因為其具有其它軟件不可比擬的優(yōu)點吸引著越來越多的用戶用它來開發(fā)應(yīng)用 程序。下面我們一一介紹和分析 PETSc 的這些優(yōu)點或特色。計算能力:PETSc為用戶提供了豐富的算法和庫資源。三個求解器(SLES、SNES 和TS)構(gòu)成了 PETSc的核心組件。PETSc不僅為中小規(guī)模線性方程組的求解 提供了高效的直接方法,還為大規(guī)模(稀疏)線性方程組的迭代求解提供了多 種 Krylov 子空間方法和多種預(yù)條件子??杉嫒菪裕阂?/p>

18、方面,PETSc具有很強的兼容能力,可在不同體系結(jié)構(gòu)和不同操 作系統(tǒng)環(huán)境高效運行。另一方面,PETSc本身基于高性能的線性代數(shù)庫(BLAS 和LAPACK)和MPI消息傳遞環(huán)境實現(xiàn),同時又充分吸收和融入了其它優(yōu)秀軟 件的優(yōu)點,如無結(jié)構(gòu)網(wǎng)格區(qū)域分解和雅可比矩陣求解等方面的功能??蓴U展性:PETSc的可擴展性功能主要包括三個方面:計算性能的并行可擴展 性、功能的可擴展性和計算能力的可擴展性。無論是在計算時間還是在浮點性 能方面, PETSc 提供的范例程序都有良好的線性加速比性能。面向?qū)ο蟮牧己?設(shè)計風(fēng)格使得PETSc具有良好的功能擴展能力。作為一個高級應(yīng)用程序開發(fā)平 臺,PETSc特別適合于用來

19、開發(fā)大型應(yīng)用程序。抽象數(shù)據(jù)類型:PETSc基于面向?qū)ο蠹夹g(shù)實現(xiàn),具有所有面向?qū)ο筌浖目梢?植性、可繼承性和可擴展性等基本程序特征。 PETSc 的向量、矩陣等基本數(shù)據(jù) 對象完全采用抽象數(shù)據(jù)類型實現(xiàn),盡量對用戶屏蔽數(shù)據(jù)對象的區(qū)域分解和存儲 等細節(jié)。所有PETSc格點數(shù)據(jù)對象的劃分、初始化和存取等基本操作都由DA對象來管理和相應(yīng)PETSc庫函數(shù)實現(xiàn)。用戶基于PETSc對象可以靈活開發(fā)其應(yīng) 用程序。PETSc對象和組件為構(gòu)造大規(guī)模應(yīng)用程序奠定一個良好的基礎(chǔ)。輸出能力:PETSc具有良好的性能分析和圖形輸出功能。同時,PETSc還具有高可用性,并具有很強的錯誤診斷能力??傊?, PETSc 在無論是在

20、計算能力、設(shè)計風(fēng)格還是在可兼容性和可擴展性等方 面都顯示出極大的優(yōu)越性。PETSc不但為科學(xué)與工程計算領(lǐng)域的科學(xué)家和工程 師提供了強大的(大規(guī)模)偏微方程求解工具,而且也為模型科學(xué)應(yīng)用和高效 算法設(shè)計提供了一個豐富的試驗平臺和計算環(huán)境。它使得算法的擴展和應(yīng)用程 序的個性化實現(xiàn)都更為容易。另外,PETSc的這種設(shè)計風(fēng)格增強了代碼的再利 用性和編程的靈活性,同時將并行性問題與算法的選擇分離開來。1.4 安裝 PETSc這里,我們以PETSc 2.1.3為例,介紹如何在LINUX/UNIX環(huán)境下安裝PETSc。在 安裝PETSc之前,系統(tǒng)首先需要做如下配置:1) MPI的一種實現(xiàn)。對由廠家提供并已經(jīng)

21、安裝了MPI的并行機,推薦使用廠家 提供的 MPI 實現(xiàn) , 因為通常比使用免費版本具有更好的性能。否則推薦MPICH,可在 /mpi/mpich 免費下載獲得。由于 PETSc本 身包含了 MPI的一個簡捷版本,因此只對串行運行PETSc感興趣的用戶除外。2)BLAS和LAPACK的一個拷貝。許多機器本身提供了 BLAS或LAPACK等數(shù)學(xué) 庫。例如,DEC alpha提供了 DXML,而IBM rs6000提供了 ESSL版本。檢查你 使用的機器配置,如果這些庫尚未在你的機器上安裝,可在如下網(wǎng)站上獲得 ftp:/i nfo. mcs.a nl.go

22、v/ pub/petsc/fblasl apack.tar.gz 建議你盡可能使用廠家提供 的BLAS庫。3)可選軟件包。PETSc提供了許多軟件和庫的接口,用戶可以根據(jù)不同的應(yīng)用 需要安裝相應(yīng)的軟件和庫。然后,你就可以按以下步驟逐步安裝PETSc:1)在 /petsc/petsc-2/download/index.html 上盡可能獲 取最新版本的petsc.tar.gz并用如下方式解包gun zip -c petsc.tar.gz | tar xof缺省時,將自動創(chuàng)建petsc-2.1.3或其最新版本目錄。PETSc版本的補丁程序可通過

23、/petsc/petsc-patches.htm獲得。2)設(shè)置環(huán)境變量 PETSC_DIR和PETSC_ARCH,分別為PETSc主目錄的路徑 和機器體系結(jié)構(gòu)。例如setenv PETSC_DIR/home/username/petsc-2.1.3setenv PETSC_ARCH rs60003)編輯文件 $PETSC_DIR/bmake/$PETSC_ARCH/packages,以指定 MPI, LAPACK, BLAS, X-windows 等的路徑及可選軟件包。注意:如果只安裝單機運行的PETSc版本,則不必安裝MPI,用戶只需要在

24、$PETSC_DIR/bmake/$PETSC_ARCH/packages 中設(shè)置MPI_LIB = $PETSC_DIR/lib/lib$BOPT/$PETSC_ARCH/libmpiuni.aMPI_INCLUDE = -I$PETSC_DIR/src/sys/src/mpiuniMPIRUN = $PETSC_DIR/src/sys/src/mpiuni/mpirun4)或許還需編輯文件 $PETSC_DIR/bmake/$PETSC_ARCH/variables 以從其 缺省改變 C, C+, 或 Fortran 編譯器的名字 :Solaris 使用 GNU 編譯器用 PETSC_AR

25、CH=solaris_gnuIBM rs6000 使用 GNU 編譯器用 PETSC_ARCH=rs6000_gnuCRAY t3d:確信環(huán)境變量TARGET被設(shè)置給cray-t3d5)在PETSc主目錄中使用 make BOPT=g all >& make_log來建立PETSc的調(diào) 試版本或使用 make BOPT=O all >& make_log來建立PETSc庫的優(yōu)化版 本。標志BOPT確定建立哪種庫。其它可選項是對C+版本的BOPT= g_c+, O_c+和對復(fù)數(shù)版本的 BOPT=g_complex,O_complex在 HP-UX 機器上我們強烈推薦使

26、用 Gnu make (如果還沒用,可安裝之 ),而 不用PETSc提供的 makefile腳本。在 PETSc構(gòu)建文件(makefiles)中使用 gnumake, 需 在 文 件 $PETSC_DIR/bmake/hpux/base 定 義 OMAKE 為 gnu make的路徑。6)檢查makeog,以確定在安裝過程中是否發(fā)生任何錯誤。查閱一般問題的幫助信息 /petsc/petsc-patches.htm。另外,用戶還可以通過 con figure安裝PETSc。請參考PETSc網(wǎng)站,這里從略。62 PETSc 的基本對象本章從對象的

27、創(chuàng)建、劃分、功能和索引等幾個方面簡單介紹 PETSc 的兩個基本對象:向量和矩陣。所涉及的內(nèi)容和順序基本與 PETSc用戶手冊一致。2.1 向量向量是最簡單的PETSc對象。PETSc向量對象主要用于存儲線性方程組的解和 右端向量。PETSc提供AO對象來管理向量在全局和局部之間的索引、排序和 映射。PETSc還提供了兩個對象DA和IS,來分別管理向量在規(guī)則正交網(wǎng)格和 無結(jié)構(gòu)網(wǎng)格上各進程之間的分發(fā)、 聚集和邊界點的數(shù)據(jù)通信等操作。2.1.1 創(chuàng)建和聚集VecCreatSeq創(chuàng)建一個串行的 PETSc向量VecCreatMPI:創(chuàng)建一個并行的 PETSc向量VecCreat創(chuàng)建一個 PETSc向

28、量名VecSetSizes設(shè)置向量維數(shù)VecSetFromOptions通過運行參數(shù)設(shè)置向量數(shù)據(jù)類型VecSet將一個數(shù)值賦給向量的每個元素VecSetValues分別給向量的每個元素插入或累加數(shù)值VecAssemblyBegin 啟動一個向量的創(chuàng)建VecAssemblyEnd 完成一個向量的創(chuàng)建VecView 屏幕打印向量的值VecDuplicate 復(fù)制一個向量VecDuplicateVecs 復(fù)制一組向量VecDestroy 釋放一個向量VecDestroyVecs 釋放一組向量VecCreatSeqWithArray:創(chuàng)建一個串行的 PETSc向量(用戶程序)VecCreatMPIWi

29、thArray :創(chuàng)建一個并行的PETSc向量(用戶程序)2.1.2 基本運算操作VecGetOwnershipRang返回向量在局部區(qū)域(進程)中的下界和上界VecGetArray:返回向量在局部區(qū)域內(nèi)的訪存指針VecRestoreArray關(guān)閉在局部區(qū)域內(nèi)的對向量的訪存VecGetLocalSize:返回向量在局部區(qū)域內(nèi)的維數(shù)VecGetSize返回全局向量的維數(shù)關(guān)于向量的算術(shù)運算,如點積(VecDot)、范數(shù)(VecNorm)、最小值(VecMin) 等,請參考PETSc用戶手冊(Pages 38。2.1.3 排序AOCreatBasic:定義一個新的排序映射AOPetscToAppli

30、cation:從PETSc排序得到應(yīng)用排序的映射AOApplicationToPetsc:從應(yīng)用排序得到PETSc排序的映射AOCreatBasicIS:定義一個新的索引集排序映射AOPetscToApplicationIS:從PETSc索引集排序得到應(yīng)用索引集排序的映射AOApplicationToPetscIS:從應(yīng)用索引集排序得到PETSc索引集排序的映射AOView :查詢一個排序映射AODestroy:釋放一個排序映射ISLocalToGlobalM app in gCreat:建立一個局部排序與全局排序之間的映射ISLocalToGlobalMappingApply :獲得局部排序

31、到全局排序的映射 ISLocalToGlobalMappingApplyIS :獲得局部索引集排序到全局排序的映射 ISLocalToGlobalMappingDestroy:釋放一個局部排序與全局排序的映射 ISGlobalToLocalMappingApply :獲得全局排序到一系列局部排序的映射 VecSetLocalToGlobalMappi ng:設(shè)置從一系列局部排序與全局排序的映射 VecSetValuesLoca:l 得到一系列局部排序在 2.1.5,我們還將詳細介紹主要用于無結(jié)構(gòu)網(wǎng)格劃分情形下的索引集排序。2.1.4 規(guī)則網(wǎng)格的 DA 實現(xiàn)分布式數(shù)組(DA)是PETSc的一個重

32、要特色。DA自動管理數(shù)據(jù)在局部進程之 間的劃分、消息傳遞和讀寫。用戶只需提供數(shù)組的全局數(shù)值,并通過全局和局 部之間的邏輯排序來引用數(shù)組元素。在PETSc學(xué)習(xí)過程中,用戶要特別注意向量(Vector)和數(shù)組(Array )兩個概念,前者著重強調(diào)獨立于數(shù)組數(shù)值和存儲 之外的邏輯結(jié)構(gòu)或排序上的抽象, 而后者著重強調(diào)數(shù)組元素的訪問和數(shù)值改寫。DACreatld :創(chuàng)建一個1維的DA數(shù)組DACreat2d :創(chuàng)建一個2維的DA數(shù)組DACreat3d :創(chuàng)建一個3維的DA數(shù)組DACreatGlobalVector:創(chuàng)建一個全局的DA向量DACreatLocalVector:創(chuàng)建一個局部的DA向量DAGIo

33、balToLocalBegin :啟動一個 DA向量的分發(fā)DAGlobalToLocalEnd :完成一個DA向量的分發(fā)DALocalToGlobal :完成一個 DA 向量的聚集DALocalToLocalBegin :啟動一個 DA 向量的局部分發(fā)DALocalToLocalEnd :完成一個DA向量的局部分發(fā)DAGetScatter:啟動一個 DA向量的分發(fā)DAGetLocalVector:獲得一個局部DA向量的訪問權(quán)DARestoreLocalVector:釋放一個局部DA向量的訪問權(quán)DAVecGetArray:獲得一個局部DA數(shù)組的訪存權(quán)DAVecRestoreArray:釋放一個局

34、部DA數(shù)組的訪存權(quán)DAGetCorners:獲得數(shù)組左邊界的初始位置DAGetGhostCorners:獲得數(shù)組偽邊界的初始位置DAGetGlobalI ndices :獲得全局格點數(shù)(含偽邊界)DAGetISLocalToGlobalMapping :獲得局部到整體索引集之間的映射DASetLocalToGlobalMapping :設(shè)置一個向量的局部到整體的映射MatSetLocalToGlobalM appi ng:設(shè)置一個矩陣的局部到整體的映射DAGetAO :從 DA 環(huán)境上獲得一個應(yīng)用排序2.1.5 無結(jié)構(gòu)網(wǎng)格的 IS 實現(xiàn)索引集(IS)是PETSc的基本對象之一。它管理和實現(xiàn)無結(jié)

35、構(gòu)網(wǎng)格上向量之間 的各種數(shù)據(jù)分發(fā)與聚集、偽邊界點數(shù)據(jù)交換等基本操作。它對于PETSc在應(yīng)用程序中最終實現(xiàn)通信抽象具有重要的意義。ISCreatGenera:l 創(chuàng)建一個索引集排序ISCreatStride:創(chuàng)建一個具有跨度的索引集排序ISDestroy:釋放一個索引集排序ISGetSize:獲得一個索引集排序的數(shù)據(jù)規(guī)模的大小ISStrideGet Info:獲得一個索引集排序的跨度值ISGet In dices:獲得一個索引集排序的所有索引列表ISRestoreIndices釋放一個索引集列表的存儲空間ISCreatBlock:創(chuàng)建一個塊索引集排序ISBlockGetIndices:獲得一個塊

36、索引集排序的所有索引列表ISBlockGetSize:獲得一個塊索引集排序的數(shù)據(jù)規(guī)模的大小ISBlockGetBlockSize :沒有說明(見在線手冊)ISBlock :沒有說明(見在線手冊)VecScatterCrea:t 創(chuàng)建一個向量與向量之間的分發(fā)VecScatterBegin啟動一個向量與向量之間的分發(fā)VecScatterEnd完成一個向量與向量之間的分發(fā)VecScatterDestroy釋放一個向量與向量之間的分發(fā)VecCreatGhost創(chuàng)建一個含偽邊界點的 PETSc向量VecCreatGhostWithArray:創(chuàng)建一個含偽邊界點的 PETSc向量(用戶程序)VecGhos

37、tGetLocalForm:獲得一個含偽邊界點向量的局部訪問權(quán)VecGhostUpdateBegin啟動一個向量偽邊界點的更新VecGhostUpdateEnd完成一個向量偽邊界點的更新VecGhostRestoreLocalForm釋放一個含偽邊界點向量的局部訪問權(quán)2.2 矩陣矩陣是PETSc的基本對象。PETSc同時提供了稠密矩陣和稀疏行矩陣的基本運 算功能,以及一些特殊格式(如“無矩陣”實現(xiàn),無結(jié)構(gòu)網(wǎng)格劃分等內(nèi)容)和 用戶提供的某些功能擴展和實現(xiàn)。PETSc的矩陣運算和操作主要包括矩陣的創(chuàng) 建、插值、聚集、各種算術(shù)運算和釋放。PETSc的各種矩陣運算和操作使用起來非常方便,用戶無需關(guān)心矩

38、陣的具體存儲實現(xiàn)。2.2.1 創(chuàng)建和聚集MatCreate:創(chuàng)建一個PETSc矩陣對象MatSetValues給一個矩陣賦值MatSetOptio n:設(shè)置一個矩陣的存儲格式MatAssemblyBegi n:啟動一個矩陣的聚集MatAssemblyE nd:完成一個矩陣的聚集MatGetOw nershipRa ng:獲得一個矩陣的局部行劃分的上界和下界MatCreateSeqAIJ:創(chuàng)建一個串行壓縮稀疏行格式的矩陣對象MatCreateMPIAIJ :創(chuàng)建一個并行壓縮稀疏行格式的矩陣對象MatCreateSeqDense創(chuàng)建一個串行稠密格式的矩陣對象MatCreateMPIDe nse:創(chuàng)

39、建一個并行稠密格式的矩陣對象2.2.2 基本運算操作MatZeroRows:初始化一個矩陣行MatZeroEntries:初始化一個矩陣MatConvert:矩陣變換MatGetRow :獲得矩陣的一行元素的值MatRestorerow:釋放對矩陣行的訪問權(quán)MatCopy:復(fù)制一個矩陣MatView :屏幕輸出一個矩陣關(guān)于矩陣的算術(shù)運算,如矩陣向量乘積(MatMult )、矩陣范數(shù)(MatNorm)、矩 陣轉(zhuǎn)置(MatTranspose、獲得矩陣對角元素(MatGetDiagonal)等,請參考PETSc 用戶手冊( Pages 57)。2.2.3 “無矩陣”運算所謂“無矩陣”運算(Matri

40、x-Free Matrices),是指不通過顯示存儲整個矩陣而 是通過向量運算來實現(xiàn)矩陣的各種操作和運算的方法。PETSc給用戶提供了一個虛擬的矩陣對象 /環(huán)境,用戶在這個環(huán)境下可以自由開發(fā)矩陣運算程序。MatCreateShell:創(chuàng)建一個虛擬的矩陣對象UserMult :用戶編寫的矩陣向量乘積程序MatShellSetOperatio n:將一個用戶程序圭寸裝到一個虛擬的矩陣對象中2.2.4 矩陣的劃分對于許多無結(jié)構(gòu)網(wǎng)格的PDE求解,格點在各進程中的分布對計算性能具有非常 重要的影響。目前PETSc不支持動態(tài)數(shù)據(jù)劃分,動態(tài)負載平衡等技術(shù),而是采 取反復(fù)創(chuàng)建和釋放的辦法來優(yōu)化網(wǎng)格的劃分。另外

41、,PETSc提供了對并行圖形劃分軟件 ParMETIS 的接口。MatCreateMPIAdj :創(chuàng)建一個含鄰接信息的并行矩陣對象MatPartitioningCreate:創(chuàng)建一個并行矩陣劃分MatPartiti onin gSetAdjace ncy :設(shè)置矩陣劃分的鄰接信息MatPartitio nin gSetFromoptio ns:通過運行參數(shù)設(shè)置矩陣劃分MatPartitioningApply :啟動一個并行矩陣劃分MatPartitio nin gDestory :釋放一個并行矩陣劃分MatDestroy :釋放一個含鄰接信息的并行矩陣對象ISPartitio nin gToN

42、umberi ng :獲得矩陣局部的索引集和排序3 PETSc的基本功能本章主要介紹PETSc的三個核心組件、性能分析和接口功能。 PETSc的三個核 心組件包括線性方程求解器(SLES)、非線性方程求解器(SNES)和時間步進 積分器(TS)。所涉及的內(nèi)容和順序基本與 PETSc用戶手冊(版本2.2.0)一致。3.1線性方程求解SLES構(gòu)成了 PETSc最核心的部分。它不僅是幾乎所有 PDE方程求解器的基本 內(nèi)核,而且也是實現(xiàn) PETSc的其它兩個核心組件 SNES和TS的必不可少的部 分。SLES求解線性方程組(3.1)其中解算子A是n n維非奇異矩陣,b是n維右端向量,x為n維解向量。本

43、節(jié) 從線性方程求解環(huán)境的創(chuàng)建、Krylov子空間方法和預(yù)條件子(PC)的選擇、收 斂性判據(jù)、LU直接求解等方面詳細介紹SLES。3.1.1基本用法SLESCreate創(chuàng)建一個線性方程求解環(huán)境SLESSetOperators設(shè)置求解算子(矩陣)SLESSetFromoptions通過運行參數(shù)設(shè)置SLES運行選項SLESSolve:啟動一個線性方程求解器SLESDestroy:釋放一個線性方程求解環(huán)境SLESSetup:啟動一個線性方程求解器SLESGetPC:獲得PC對象/環(huán)境的訪問權(quán)SLESGetKSP:獲得KSP對象/環(huán)境的訪問權(quán)3.1.2 Krylov子空間方法KSPSetType:設(shè)置K

44、rylov子空間方法的類型KSPRichards on SetScale 沒有描述KSPChebychevSetEigenvalue:s 沒有描述KSPGMRESSetRestar:t 沒有描述KSPGMRESSetOrthogo nalizatio n:沒有描述KSPCGSetType設(shè)置共扼梯度方法的對稱類型KSPSetlnitialGuessNonzero設(shè)置一個非零的初始猜值KSPSetPreconditionerSide設(shè)置預(yù)條件子的位置KSPSetNormType:設(shè)置范數(shù)類型KSPSetTolera nces設(shè)置最大迭代步數(shù)KSPSetConvergenceTest 啟動用戶收斂

45、性測試程序的封裝KSPDefaultMonitor 輸出每迭代步的殘差KSPSingularValueMonitor 輸出每迭代步預(yù)條件子的最大奇異值KSPTrueMonitor 輸出每個迭代步詳細的殘差信息KSPLGMonitorCreate 創(chuàng)建一個圖形輸出對象 /環(huán)境KSPSetMonitor 設(shè)置輸出模式KSPLGMonitorDestroy 釋放一個圖形輸出對象 /環(huán)境KSPSetComputeEigenvalues 設(shè)置預(yù)條件子特征值的計算環(huán)境KSPComputeEigenvalues 計算預(yù)條件子的特征值KSPComputeEigenvaluesExplicitly 用直接方法計

46、算預(yù)條件子的特征值KSPGetSolution 獲得解向量的值KSPGetRhs 獲得右邊向量的值KSPBuildSolution 獲得每個迭代步解向量的逼近值KSPBuildResidual 獲得每個迭代步殘差的逼近值3.1.3 預(yù)條件子PCSetType 設(shè)置預(yù)條件子的類型PCILUSetLevels 設(shè)置 ILU 預(yù)條件子的優(yōu)化級別PCILCCSetLevels:設(shè)置ILCC預(yù)條件子的優(yōu)化級別PCILUSetReuseOrdering設(shè)置復(fù)用ILU分解中的排序?qū)ο驪CILUSetUseDropToleranee 沒有描述PCILUDTSetReuseFill :沒有描述PCILUSetU

47、SeI nPlace :沒有描述PCILUSetAllowDiagonalFill :沒有描述MatCreateMPIRowbs :沒有描述PCSORSetOmega設(shè)置SOR方法的松弛因子PCSORSetIterations設(shè)置SOR方法的迭代步數(shù)PCSORSetSymmetric設(shè)置SOR方法的對稱類型PCLUSetUse In place:沒有描述PCBJacobiGetSubSLES 沒有描述PCASMGetSubSLES 沒有描述PCJacobiSetTotalBlocks 沒有描述PCASMSetTotalSubdomains 沒有描述PCASMSetType 沒有描述PCBJac

48、obiSetLocalBlocks 沒有描述PCASMSetLocalSubdomains 沒有描述PCASMSetOverlap 沒有描述PCShellSetApply 啟動一個用戶提供預(yù)條件子的環(huán)境PCShellSetSetup 設(shè)置一個用戶提供預(yù)條件子的環(huán)境PCCompositeAddPC 累加一個新的預(yù)條件子PCCompositeSetType 設(shè)置預(yù)條件子的復(fù)合類型PCCompositeSetUserTrue 沒有描述PCCompositeGetPC 沒有描述PCILUSetFill 沒有描述PCSLESGetSLES 將解法器算子設(shè)置為預(yù)條件子PCSLESSetUserTrue 沒

49、有描述MGSetLevels:設(shè)置多重網(wǎng)格預(yù)條件子的優(yōu)化級別MGSetCycles:沒有描述 MGSetNumberSmoothUp:沒有描述 MGSetNumberSmoothDow n:沒有描述 MGGetCoarseSolve設(shè)置粗網(wǎng)格算子 MGGetSmoother:設(shè)置平滑算子 MGGetSmootherUp:沒有描述 MGGetSmootherDow n:沒有描述 MGSetInterpolate:沒有描述 MGSetRestrictio n:沒有描述MGSetResidual:設(shè)置多重網(wǎng)格預(yù)條件子的殘差MGSetRhs:設(shè)置多重網(wǎng)格預(yù)條件子的右邊向量MGSetX :設(shè)置多重網(wǎng)格預(yù)

50、條件子的解向量MGSetR :設(shè)置多重網(wǎng)格預(yù)條件子的殘差3.1.4奇異方程求解MatNullSpaceCreate 沒有描述PCNullSpaceAttach:沒有描述3.2非線性方程求解SNES非線性解法器基于牛頓迭代法(線性搜索和信賴域方法),依賴線性解法 器SLES實現(xiàn)。雅可比矩陣的求解是SNES解法器的重要組成部分。SNES求解 以下形式的非線性方程組F(x)=0(3.2)其中解算子F : Rn > Rn3.2.1 基本用法SNESCreate創(chuàng)建一個非線性方程求解環(huán)境SNESSetType設(shè)置非線性求解器的類型SNESSetFromOptions通過運行參數(shù)設(shè)置SNES運行選項

51、SNESSolve:啟動一個非線性方程求解器SNESDestro y:釋放一個非線性方程求解器SNESSetFunction設(shè)置非線性函數(shù)SNESSetJacobian設(shè)置雅可比矩陣3.2.2 非線性解法器SNESSetLineSearch 設(shè)置線性搜索方法的求解環(huán)境 SNESSetTolerances 設(shè)置最大迭代步數(shù)和誤差界SNESSetTrustRegionTolerances 同上SNESSetConvergenceTest 設(shè)置用戶編寫的收斂測試SNESSetMonitor 設(shè)置輸出模式SNESGetSolution 獲得解向量的值SNESGetFunction 獲得函數(shù)值3.2.3

52、 “無矩陣”方法在其迭代求解線性系統(tǒng)的過程中, SNES 完全支持用戶提供的“無矩陣”預(yù)條 件子。同前面類似,PETSc首先給用戶提供了一個虛擬的矩陣對象和環(huán)境,然 后用戶基于這個環(huán)境可以自由開發(fā)自己的預(yù)條件子計算程序。MatCreateSNESMF :在SNES環(huán)境中創(chuàng)建一個虛擬的矩陣對象MatCreateMF 沒有描述MatSNESMFSetFunctionError 設(shè)置有限差分的逼近誤差MatSNESMFDefaultSetUmin :設(shè)置默認的有限差分增量 MatSNESMFWPSetComputeNormA:設(shè)置有限差分增量 MatSNESMFWPSetComputeNormU :

53、設(shè)置有限差分增量 MatSNESMFSetHHistory :沒有描述MatSNESMFReSetHHistory :沒有描述 MatSNESMFGetH :沒有描述MatSNESMFKSPMonitor :沒有描述MatSNESMF :沒有描述324有限差分雅可比逼近雅可比矩陣的計算包括兩個部分:稀疏結(jié)構(gòu)的著色或排序;分別按重新得到的 行或列計算雅可比矩陣的所有非零元素。MatGetColoring :給稀疏雅可比矩陣著色MatFDColori ngGreate :創(chuàng)建一個與著色相關(guān)的數(shù)據(jù)結(jié)構(gòu)/對象ISColori ngDestroy :釋放一個與著色相關(guān)的數(shù)據(jù)結(jié)構(gòu)/對象MatFDColoringFromOptions :沒有描述SNESSetJacobian在SNES環(huán)境中啟動疏雅可比的著色和有限差分計算DAGetColoring :沒有描述3.3時間步進積分TS時間步進積分器,用于求解依賴時間或時間演化的 ODE方程,或依賴時間 的離散化后的PDE方程。TS主要求解如下時間依賴問題(3.1)Ut 二 F(u,t)其中u為有限維解向量,上式通常為運用有限差分或有限元方法離散后的常微 分方線性程組。對于非時間演化或穩(wěn)態(tài)方程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論