PETSc-用戶指南Word版_第1頁(yè)
PETSc-用戶指南Word版_第2頁(yè)
PETSc-用戶指南Word版_第3頁(yè)
PETSc-用戶指南Word版_第4頁(yè)
PETSc-用戶指南Word版_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、 . 112.1.1 創(chuàng)建和聚集 . .112.1.2 基本運(yùn)算操作 . .112.1.3 無(wú)矩陣運(yùn)算 .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 無(wú)矩陣方法 . .173.2.4 有限差分雅可比逼近 . . 183.3 時(shí)間步進(jìn)積分 183.3.1 基本用法 . . . . . 193.3.2

3、求解時(shí)間依賴問題 . . . 193.3.3 求解時(shí)間穩(wěn)態(tài)問題 . . . 193.3.4 其它求解器 . . 193.4 PETSc的其他功能 203.4.1 性能分析 . . . .203.4.2 圖形輸出 . .223.4.3 調(diào)試和錯(cuò)誤檢測(cè) . .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 P

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

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

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

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

8、數(shù)值軟件的應(yīng)用,以及LINUX/UNIX/網(wǎng)格應(yīng)用、并行計(jì)算方法及其相關(guān)內(nèi)容。最后,我們熱忱歡迎國(guó)內(nèi)外所有來(lái)自不同學(xué)科、不同專業(yè)領(lǐng)域的科學(xué)家和工程技術(shù)人員就更為廣泛的科學(xué)和工程計(jì)算問題提出建議。我們的聯(lián)系方式:?jiǎn)挝唬褐袊?guó)科學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)信息中心超級(jí)計(jì)算中心網(wǎng)站:電話:(86-10) 5881-2132郵件:walls地址:北京中關(guān)村南4街4號(hào)通信:北京349信箱,SC,100080 1 PETSc簡(jiǎn)介1.1 概況PETSc (Portable, Extensible Toolkit for Scientific Computation) 是美國(guó)能源部ODE2000支持開發(fā)的20多個(gè)ACTS工具

9、箱之一,由Argonne國(guó)家實(shí)驗(yàn)室開發(fā)的可移植可擴(kuò)展科學(xué)計(jì)算工具箱,主要用于在分布式存儲(chǔ)環(huán)境高效求解偏微分方程組及相關(guān)問題。PETSc所有消息傳遞通信均采用MPI標(biāo)準(zhǔn)實(shí)現(xiàn)。PETSc用C語(yǔ)言開發(fā),遵循面向?qū)ο笤O(shè)計(jì)的基本特征,用戶基于PETSc對(duì)象可以靈活開發(fā)應(yīng)用程序。目前,PETSc支持Fortran 77/90、C和C+編寫的串行和并行代碼。PETSc是系列軟件和庫(kù)的集合,三個(gè)基本組件SLES、SNES和TS本身基于BLAS、LAPACK、MPI 等庫(kù)實(shí)現(xiàn),同時(shí)為TAO、ADIC/ADIFOR、Matlab、ESI 等工具提供數(shù)據(jù)接口或互操作功能,并具有極好的可擴(kuò)展性能。PETSc為用戶提供

10、了豐富的Krylov子空間迭代方法和預(yù)條件子,并提供錯(cuò)誤檢測(cè)、性能統(tǒng)計(jì)和圖形打印等功能。如今,越來(lái)越多的應(yīng)用程序在PETSc環(huán)境上開發(fā),并逐漸顯示出PETSc在高效求解大規(guī)模數(shù)值模擬問題方面的優(yōu)勢(shì)和威力。PETSc最新版本為petsc-2.2.1,PETSc網(wǎng)站:/petsc。 目前,PETSc 3正在開發(fā)中。1.2 體系結(jié)構(gòu)不同于其它微分/代數(shù)方程解法器,PETSc為用戶提供了一個(gè)通用的高層應(yīng)用程序開發(fā)平臺(tái)?;赑ETSc提供的大量對(duì)象和解法庫(kù),用戶可以靈活地開發(fā)自己的應(yīng)用程序,還可隨意添加和完善某些功能,如為線性方程求解提供預(yù)條件子、為非線性問題的

11、牛頓迭代求解提供雅可比矩陣、為許多數(shù)值應(yīng)用軟件和數(shù)學(xué)庫(kù)提供接口等。圖1表示了PETSc在實(shí)現(xiàn)層次上的抽象,圖2具體列舉了PETSc的基本數(shù)值部件。這里做簡(jiǎn)要說(shuō)明。應(yīng)用程序:用戶在PETSc環(huán)境下基于PETSc對(duì)象和算法庫(kù)編寫的串行或并行應(yīng)用程序。盡管PETSc完全在MPI上實(shí)現(xiàn),但PETSc程序具有固定的框架結(jié)構(gòu),即有初始化、空間釋放和運(yùn)行結(jié)束等環(huán)境運(yùn)行語(yǔ)句。PDE解法器:用戶基于PETSc的三個(gè)基本算法庫(kù)(TS、SNES和SLES)構(gòu)建的偏微方程求解器。但它卻不是PETSc的基本組件。TS:時(shí)間步進(jìn)積分器,用于求解依賴時(shí)間或時(shí)間演化的ODE方程,或依賴時(shí)間的離散化后的PDE方程。對(duì)于非時(shí)間演

12、化或穩(wěn)態(tài)方程,PETSc提供了偽時(shí)間步進(jìn)積分器。TS積分器最終依賴線性解法器SLES和非線性解法器SNES來(lái)實(shí)現(xiàn)。PETSc為PVODE庫(kù)提供了接口。另外,TS的用法非常簡(jiǎn)單方便。SNES:非線性解法器,為大規(guī)模的非線性問題提供高效的非精確或擬牛頓迭代解法。SNES依賴于線性解法器SLES,并采用線性搜索和信賴域方法實(shí)現(xiàn)。SNES非常依賴于雅可比矩陣求解,PETSc既支持用戶提供的有限差分程序,同時(shí)又為用戶提供了依賴ADIC等自動(dòng)微分軟件生成的微分程序接口。SLES:線性解法器,它是PETSc的核心部分。PETSc幾乎提供了各種高效求解線性方程的解法器,既有串行求解也有并行求解,既有直接法求解

13、也有迭代法求解。對(duì)于大規(guī)模的線性方程,PETSc提供了大量基于Krylov子空間方法和預(yù)條件子的各種成熟而有效的迭代方法,以及其它通用程序和用戶程序的接口。應(yīng)用程序TS (時(shí)間步進(jìn))PDE解法器SLES (線性方程解法器)SNES (非線性方程解法器)DrawPC (預(yù)條件子)KSP (Krylov子空間方法)向量索引集矩陣LAPACKMPIBLAS圖1:PETSc實(shí)現(xiàn)的層次結(jié)構(gòu)KSP:Krylov子空間方法,廣泛涉及Richardson方法,共扼梯度法(CG和BiCG),廣義最小殘差法(GMRES),最小二乘QR分解(LSQR)等。PC:預(yù)條件子,包括雅可比矩陣,分塊雅可比矩陣,SOR/SS

14、OR方法,不完全Cholesky分解,不完全LU分解,可加性Schwartz方法,多重網(wǎng)格預(yù)條件子等。DRAW:應(yīng)用程序的性能分析和結(jié)果顯示。時(shí)間步法非線性解法器其它擬時(shí)間步向后Euler方法Euler方法牛頓迭代法其它信賴域線搜索Krylov子空間方法其它ChebyshevRichardsonTFQMRBi-CG-StabCGSCGGMRES預(yù)條件子LU加法Schwarz其它ICCILUJacobi塊Jacobi矩陣壓縮稀疏行(AIJ)塊壓縮稀疏(BAIJ)塊對(duì)角(BDiag)稠密其它向量索引集索引塊索引跨度其它圖2:PETSc的數(shù)值組件矩陣:PETSc的基本數(shù)據(jù)對(duì)象。與向量對(duì)象不同,一個(gè)P

15、ETSc的矩陣對(duì)象首先是在局部(各個(gè)進(jìn)程)數(shù)據(jù)填充完成之后再對(duì)其進(jìn)行全局聚集,然后再由PETSc對(duì)象統(tǒng)一管理和實(shí)現(xiàn)矩陣的各種運(yùn)算和操作。當(dāng)問題的計(jì)算規(guī)模較大時(shí),稀疏矩陣的填充將是影響程序性能的關(guān)鍵因素。PETSc還專門為用戶提供了的單純依賴向量來(lái)實(shí)現(xiàn)矩陣基本運(yùn)算(或無(wú)矩陣運(yùn)算)的接口。向量:PETSc的基本數(shù)據(jù)對(duì)象。對(duì)于規(guī)則的正交網(wǎng)格,PETSc自動(dòng)對(duì)向量進(jìn)行劃分,并通過分布式存儲(chǔ)向量(即DA對(duì)象)來(lái)管理。通過DA對(duì)象,用戶可以簡(jiǎn)單地實(shí)現(xiàn)向量的分發(fā)、聚集、局部和全局之間的相互映像、邊界點(diǎn)的通信等基本操作。DA對(duì)象隱藏了進(jìn)程之間的通信,用戶只需提供全局的向量結(jié)構(gòu)和數(shù)值。但對(duì)于無(wú)結(jié)構(gòu)網(wǎng)格,用戶則可

16、以通過索引集(即IS對(duì)象)來(lái)實(shí)現(xiàn)向量的分發(fā)、聚集、映像、邊界點(diǎn)的通信等基本操作。索引集:它是一系列數(shù)據(jù)操作對(duì)象的集合,專門用來(lái)管理無(wú)結(jié)構(gòu)網(wǎng)格向量的分發(fā)、聚集、局部和全局之間的映像、邊界點(diǎn)的通信等基本操作。1.3 基本特色眾所周知,用戶通過PETSc來(lái)開發(fā)應(yīng)用程序往往具有相當(dāng)?shù)碾y度。一方面,它需要用戶本身具有較高的數(shù)值計(jì)算方法方面的專業(yè)知識(shí)和并行計(jì)算方法方面的編程技巧。另一方面,總的來(lái)說(shuō)PETSc只是一個(gè)高級(jí)的應(yīng)用程序開發(fā)環(huán)境,它為許多軟件(庫(kù))和用戶程序提供接口,用戶只有充分熟悉和利用現(xiàn)有的軟件資源和數(shù)學(xué)庫(kù)的基礎(chǔ)上才有可能開發(fā)出高效的應(yīng)用程序。盡管如此,PETSc仍然因?yàn)槠渚哂衅渌浖豢杀葦M

17、的優(yōu)點(diǎn)吸引著越來(lái)越多的用戶用它來(lái)開發(fā)應(yīng)用程序。下面我們一一介紹和分析PETSc的這些優(yōu)點(diǎn)或特色。計(jì)算能力:PETSc為用戶提供了豐富的算法和庫(kù)資源。三個(gè)求解器(SLES、SNES和TS)構(gòu)成了PETSc的核心組件。PETSc不僅為中小規(guī)模線性方程組的求解提供了高效的直接方法,還為大規(guī)模(稀疏)線性方程組的迭代求解提供了多種Krylov子空間方法和多種預(yù)條件子??杉嫒菪裕阂环矫妫琍ETSc具有很強(qiáng)的兼容能力,可在不同體系結(jié)構(gòu)和不同操作系統(tǒng)環(huán)境高效運(yùn)行。另一方面,PETSc本身基于高性能的線性代數(shù)庫(kù)(BLAS和LAPACK)和MPI消息傳遞環(huán)境實(shí)現(xiàn),同時(shí)又充分吸收和融入了其它優(yōu)秀軟件的優(yōu)點(diǎn),如無(wú)結(jié)

18、構(gòu)網(wǎng)格區(qū)域分解和雅可比矩陣求解等方面的功能??蓴U(kuò)展性:PETSc的可擴(kuò)展性功能主要包括三個(gè)方面:計(jì)算性能的并行可擴(kuò)展性、功能的可擴(kuò)展性和計(jì)算能力的可擴(kuò)展性。無(wú)論是在計(jì)算時(shí)間還是在浮點(diǎn)性能方面,PETSc提供的范例程序都有良好的線性加速比性能。面向?qū)ο蟮牧己迷O(shè)計(jì)風(fēng)格使得PETSc具有良好的功能擴(kuò)展能力。作為一個(gè)高級(jí)應(yīng)用程序開發(fā)平臺(tái),PETSc特別適合于用來(lái)開發(fā)大型應(yīng)用程序。抽象數(shù)據(jù)類型:PETSc基于面向?qū)ο蠹夹g(shù)實(shí)現(xiàn),具有所有面向?qū)ο筌浖目梢浦残浴⒖衫^承性和可擴(kuò)展性等基本程序特征。PETSc 的向量、矩陣等基本數(shù)據(jù)對(duì)象完全采用抽象數(shù)據(jù)類型實(shí)現(xiàn),盡量對(duì)用戶屏蔽數(shù)據(jù)對(duì)象的區(qū)域分解和存儲(chǔ)等細(xì)節(jié)。所有

19、PETSc格點(diǎn)數(shù)據(jù)對(duì)象的劃分、初始化和存取等基本操作都由DA對(duì)象來(lái)管理和相應(yīng)PETSc庫(kù)函數(shù)實(shí)現(xiàn)。用戶基于PETSc對(duì)象可以靈活開發(fā)其應(yīng)用程序。PETSc對(duì)象和組件為構(gòu)造大規(guī)模應(yīng)用程序奠定一個(gè)良好的基礎(chǔ)。輸出能力:PETSc具有良好的性能分析和圖形輸出功能。同時(shí),PETSc還具有高可用性,并具有很強(qiáng)的錯(cuò)誤診斷能力??傊琍ETSc在無(wú)論是在計(jì)算能力、設(shè)計(jì)風(fēng)格還是在可兼容性和可擴(kuò)展性等方面都顯示出極大的優(yōu)越性。PETSc不但為科學(xué)與工程計(jì)算領(lǐng)域的科學(xué)家和工程師提供了強(qiáng)大的(大規(guī)模)偏微方程求解工具,而且也為模型科學(xué)應(yīng)用和高效算法設(shè)計(jì)提供了一個(gè)豐富的試驗(yàn)平臺(tái)和計(jì)算環(huán)境。它使得算法的擴(kuò)展和應(yīng)用程序的

20、個(gè)性化實(shí)現(xiàn)都更為容易。另外,PETSc的這種設(shè)計(jì)風(fēng)格增強(qiáng)了代碼的再利用性和編程的靈活性,同時(shí)將并行性問題與算法的選擇分離開來(lái)。1.4 安裝PETSc這里,我們以PETSc 2.1.3為例,介紹如何在LINUX/UNIX環(huán)境下安裝PETSc。在安裝PETSc之前, 系統(tǒng)首先需要做如下配置: 1) MPI的一種實(shí)現(xiàn)。對(duì)由廠家提供并已經(jīng)安裝了MPI的并行機(jī),推薦使用廠家提供的MPI實(shí)現(xiàn), 因?yàn)橥ǔ1仁褂妹赓M(fèi)版本具有更好的性能。否則推薦MPICH, 可在/mpi/mpich免費(fèi)下載獲得。由于PETSc本身包含了MPI的一個(gè)簡(jiǎn)捷版本,因此只對(duì)串行運(yùn)行PETSc感

21、興趣的用戶除外。2)BLAS和LAPACK的一個(gè)拷貝。許多機(jī)器本身提供了BLAS或LAPACK等數(shù)學(xué)庫(kù)。例如,DEC alpha提供了DXML, 而IBM rs6000提供了ESSL版本。檢查你使用的機(jī)器配置,如果這些庫(kù)尚未在你的機(jī)器上安裝,可在如下網(wǎng)站上獲得 ftp:/info. / pub/petsc/fblaslapack.tar.gz。建議你盡可能使用廠家提供的BLAS庫(kù)。3)可選軟件包。PETSc提供了許多軟件和庫(kù)的接口,用戶可以根據(jù)不同的應(yīng)用需要安裝相應(yīng)的軟件和庫(kù)。然后,你就可以按以下步驟逐步安裝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 缺省時(shí), 將自動(dòng)創(chuàng)建petsc-2.1.3或其最新版本目錄。 PETSc版本的補(bǔ)丁程序可通過/petsc/petsc-patches.html獲得。2)設(shè)置環(huán)境變量PETSC_DIR和PETSC_ARCH,分別為PETSc主目錄的路徑和機(jī)器體系結(jié)構(gòu)。例如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等的路徑及可選軟件包。 注意: 如果只安裝單機(jī)運(yùn)行的PETSc版本, 則不必安裝MPI,用戶只需要在$PETSC_DIR/bmake/$PETSC_ARCH/packages中設(shè)置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: 確信環(huán)境變量TARGET被設(shè)置給cray-t3d 5) 在PETSc主目錄中使用 make BOPT=g all >& make_log 來(lái)建立PETSc的調(diào)試版本或使用 ma

25、ke BOPT=O all >& make_log 來(lái)建立PETSc庫(kù)的優(yōu)化版本。標(biāo)志BOPT確定建立哪種庫(kù)。其它可選項(xiàng)是對(duì)C+版本的BOPT= g_c+, O_c+和對(duì)復(fù)數(shù)版本的BOPT=g_complex,O_complex 在HP-UX機(jī)器上我們強(qiáng)烈推薦使用Gnu make (如果還沒用,可安裝之),而不用PETSc提供的makefile腳本。在PETSc構(gòu)建文件(makefiles)中使用gnumake, 需在文件$PETSC_DIR/bmake/hpux/base定義OMAKE為gnumake的路徑。6)檢查make_log,以確定在安裝過程中是否發(fā)生任何錯(cuò)誤。查閱一般

26、問題的幫助信息/petsc/petsc-patches.html。另外,用戶還可以通過configure安裝PETSc。請(qǐng)參考PETSc網(wǎng)站,這里從略。2 PETSc的基本對(duì)象本章從對(duì)象的創(chuàng)建、劃分、功能和索引等幾個(gè)方面簡(jiǎn)單介紹PETSc的兩個(gè)基本對(duì)象:向量和矩陣。所涉及的內(nèi)容和順序基本與PETSc用戶手冊(cè)一致。2.1 向量向量是最簡(jiǎn)單的PETSc對(duì)象。PETSc向量對(duì)象主要用于存儲(chǔ)線性方程組的解和右端向量。PETSc提供AO對(duì)象來(lái)管理向量在全局和局部之間的索引、排序和映射。PETSc還提供了兩個(gè)對(duì)象DA和IS,來(lái)分別管理向量在規(guī)則正交網(wǎng)格和

27、無(wú)結(jié)構(gòu)網(wǎng)格上各進(jìn)程之間的分發(fā)、 聚集和邊界點(diǎn)的數(shù)據(jù)通信等操作。2.1.1 創(chuàng)建和聚集VecCreatSeq:創(chuàng)建一個(gè)串行的PETSc向量VecCreatMPI:創(chuàng)建一個(gè)并行的PETSc向量VecCreat:創(chuàng)建一個(gè)PETSc向量名VecSetSizes:設(shè)置向量維數(shù)VecSetFromOptions:通過運(yùn)行參數(shù)設(shè)置向量數(shù)據(jù)類型VecSet:將一個(gè)數(shù)值賦給向量的每個(gè)元素VecSetValues:分別給向量的每個(gè)元素插入或累加數(shù)值VecAssemblyBegin:?jiǎn)?dòng)一個(gè)向量的創(chuàng)建VecAssemblyEnd:完成一個(gè)向量的創(chuàng)建VecView:屏幕打印向量的值VecDuplicate:復(fù)制一個(gè)向

28、量VecDuplicateVecs:復(fù)制一組向量VecDestroy:釋放一個(gè)向量VecDestroyVecs:釋放一組向量VecCreatSeqWithArray:創(chuàng)建一個(gè)串行的PETSc向量(用戶程序)VecCreatMPIWithArray:創(chuàng)建一個(gè)并行的PETSc向量(用戶程序)2.1.2 基本運(yùn)算操作VecGetOwnershipRang:返回向量在局部區(qū)域(進(jìn)程)中的下界和上界VecGetArray:返回向量在局部區(qū)域內(nèi)的訪存指針VecRestoreArray:關(guān)閉在局部區(qū)域內(nèi)的對(duì)向量的訪存VecGetLocalSize:返回向量在局部區(qū)域內(nèi)的維數(shù)VecGetSize:返回全局向量

29、的維數(shù)關(guān)于向量的算術(shù)運(yùn)算,如點(diǎn)積(VecDot)、范數(shù)(VecNorm)、最小值(VecMin)等,請(qǐng)參考PETSc用戶手冊(cè)(Pages 38)。2.1.3 排序AOCreatBasic:定義一個(gè)新的排序映射AOPetscToApplication:從PETSc排序得到應(yīng)用排序的映射AOApplicationToPetsc:從應(yīng)用排序得到PETSc排序的映射AOCreatBasicIS:定義一個(gè)新的索引集排序映射AOPetscToApplicationIS:從PETSc索引集排序得到應(yīng)用索引集排序的映射AOApplicationToPetscIS:從應(yīng)用索引集排序得到PETSc索引集排序的映射

30、AOView:查詢一個(gè)排序映射AODestroy:釋放一個(gè)排序映射ISLocalToGlobalMappingCreat:建立一個(gè)局部排序與全局排序之間的映射ISLocalToGlobalMappingApply:獲得局部排序到全局排序的映射ISLocalToGlobalMappingApplyIS:獲得局部索引集排序到全局排序的映射ISLocalToGlobalMappingDestroy:釋放一個(gè)局部排序與全局排序的映射ISGlobalToLocalMappingApply:獲得全局排序到一系列局部排序的映射VecSetLocalToGlobalMapping:設(shè)置從一系列局部排序與全局排

31、序的映射VecSetValuesLocal:得到一系列局部排序在2.1.5,我們還將詳細(xì)介紹主要用于無(wú)結(jié)構(gòu)網(wǎng)格劃分情形下的索引集排序。2.1.4 規(guī)則網(wǎng)格的DA實(shí)現(xiàn)分布式數(shù)組(DA)是PETSc的一個(gè)重要特色。DA自動(dòng)管理數(shù)據(jù)在局部進(jìn)程之間的劃分、消息傳遞和讀寫。用戶只需提供數(shù)組的全局?jǐn)?shù)值,并通過全局和局部之間的邏輯排序來(lái)引用數(shù)組元素。在PETSc學(xué)習(xí)過程中,用戶要特別注意向量(Vector)和數(shù)組(Array)兩個(gè)概念,前者著重強(qiáng)調(diào)獨(dú)立于數(shù)組數(shù)值和存儲(chǔ)之外的邏輯結(jié)構(gòu)或排序上的抽象,而后者著重強(qiáng)調(diào)數(shù)組元素的訪問和數(shù)值改寫。DACreat1d:創(chuàng)建一個(gè)1維的DA數(shù)組DACreat2d:創(chuàng)建一個(gè)2

32、維的DA數(shù)組DACreat3d:創(chuàng)建一個(gè)3維的DA數(shù)組DACreatGlobalVector:創(chuàng)建一個(gè)全局的DA向量DACreatLocalVector:創(chuàng)建一個(gè)局部的DA向量DAGlobalToLocalBegin:?jiǎn)?dòng)一個(gè)DA向量的分發(fā)DAGlobalToLocalEnd:完成一個(gè)DA向量的分發(fā)DALocalToGlobal:完成一個(gè)DA向量的聚集DALocalToLocalBegin:?jiǎn)?dòng)一個(gè)DA向量的局部分發(fā)DALocalToLocalEnd:完成一個(gè)DA向量的局部分發(fā)DAGetScatter:?jiǎn)?dòng)一個(gè)DA向量的分發(fā)DAGetLocalVector:獲得一個(gè)局部DA向量的訪問權(quán)DARe

33、storeLocalVector:釋放一個(gè)局部DA向量的訪問權(quán)DAVecGetArray:獲得一個(gè)局部DA數(shù)組的訪存權(quán)DAVecRestoreArray:釋放一個(gè)局部DA數(shù)組的訪存權(quán)DAGetCorners:獲得數(shù)組左邊界的初始位置DAGetGhostCorners:獲得數(shù)組偽邊界的初始位置DAGetGlobalIndices:獲得全局格點(diǎn)數(shù)(含偽邊界)DAGetISLocalToGlobalMapping:獲得局部到整體索引集之間的映射DASetLocalToGlobalMapping:設(shè)置一個(gè)向量的局部到整體的映射MatSetLocalToGlobalMapping:設(shè)置一個(gè)矩陣的局部到整

34、體的映射DAGetAO:從DA環(huán)境上獲得一個(gè)應(yīng)用排序2.1.5 無(wú)結(jié)構(gòu)網(wǎng)格的IS實(shí)現(xiàn)索引集(IS)是PETSc的基本對(duì)象之一。它管理和實(shí)現(xiàn)無(wú)結(jié)構(gòu)網(wǎng)格上向量之間的各種數(shù)據(jù)分發(fā)與聚集、偽邊界點(diǎn)數(shù)據(jù)交換等基本操作。它對(duì)于PETSc在應(yīng)用程序中最終實(shí)現(xiàn)通信抽象具有重要的意義。ISCreatGeneral:創(chuàng)建一個(gè)索引集排序ISCreatStride:創(chuàng)建一個(gè)具有跨度的索引集排序ISDestroy:釋放一個(gè)索引集排序ISGetSize:獲得一個(gè)索引集排序的數(shù)據(jù)規(guī)模的大小ISStrideGetInfo:獲得一個(gè)索引集排序的跨度值ISGetIndices:獲得一個(gè)索引集排序的所有索引列表ISRestoreI

35、ndices:釋放一個(gè)索引集列表的存儲(chǔ)空間ISCreatBlock:創(chuàng)建一個(gè)塊索引集排序ISBlockGetIndices:獲得一個(gè)塊索引集排序的所有索引列表ISBlockGetSize:獲得一個(gè)塊索引集排序的數(shù)據(jù)規(guī)模的大小ISBlockGetBlockSize:沒有說(shuō)明(見在線手冊(cè))ISBlock:沒有說(shuō)明(見在線手冊(cè))VecScatterCreat:創(chuàng)建一個(gè)向量與向量之間的分發(fā)VecScatterBegin:?jiǎn)?dòng)一個(gè)向量與向量之間的分發(fā)VecScatterEnd:完成一個(gè)向量與向量之間的分發(fā)VecScatterDestroy:釋放一個(gè)向量與向量之間的分發(fā)VecCreatGhost:創(chuàng)建一個(gè)

36、含偽邊界點(diǎn)的PETSc向量VecCreatGhostWithArray:創(chuàng)建一個(gè)含偽邊界點(diǎn)的PETSc向量(用戶程序)VecGhostGetLocalForm:獲得一個(gè)含偽邊界點(diǎn)向量的局部訪問權(quán)VecGhostUpdateBegin:?jiǎn)?dòng)一個(gè)向量偽邊界點(diǎn)的更新VecGhostUpdateEnd:完成一個(gè)向量偽邊界點(diǎn)的更新VecGhostRestoreLocalForm:釋放一個(gè)含偽邊界點(diǎn)向量的局部訪問權(quán)2.2 矩陣矩陣是PETSc的基本對(duì)象。PETSc同時(shí)提供了稠密矩陣和稀疏行矩陣的基本運(yùn)算功能,以及一些特殊格式(如“無(wú)矩陣”實(shí)現(xiàn),無(wú)結(jié)構(gòu)網(wǎng)格劃分等內(nèi)容)和用戶提供的某些功能擴(kuò)展和實(shí)現(xiàn)。PETS

37、c的矩陣運(yùn)算和操作主要包括矩陣的創(chuàng)建、插值、聚集、各種算術(shù)運(yùn)算和釋放。PETSc的各種矩陣運(yùn)算和操作使用起來(lái)非常方便,用戶無(wú)需關(guān)心矩陣的具體存儲(chǔ)實(shí)現(xiàn)。2.2.1 創(chuàng)建和聚集MatCreate:創(chuàng)建一個(gè)PETSc矩陣對(duì)象MatSetValues:給一個(gè)矩陣賦值MatSetOption:設(shè)置一個(gè)矩陣的存儲(chǔ)格式 MatAssemblyBegin:?jiǎn)?dòng)一個(gè)矩陣的聚集MatAssemblyEnd:完成一個(gè)矩陣的聚集MatGetOwnershipRang:獲得一個(gè)矩陣的局部行劃分的上界和下界MatCreateSeqAIJ:創(chuàng)建一個(gè)串行壓縮稀疏行格式的矩陣對(duì)象MatCreateMPIAIJ:創(chuàng)建一個(gè)并行壓縮

38、稀疏行格式的矩陣對(duì)象MatCreateSeqDense:創(chuàng)建一個(gè)串行稠密格式的矩陣對(duì)象MatCreateMPIDense:創(chuàng)建一個(gè)并行稠密格式的矩陣對(duì)象2.2.2 基本運(yùn)算操作MatZeroRows:初始化一個(gè)矩陣行MatZeroEntries:初始化一個(gè)矩陣MatConvert:矩陣變換MatGetRow:獲得矩陣的一行元素的值MatRestorerow:釋放對(duì)矩陣行的訪問權(quán)MatCopy:復(fù)制一個(gè)矩陣MatView:屏幕輸出一個(gè)矩陣關(guān)于矩陣的算術(shù)運(yùn)算,如矩陣向量乘積(MatMult)、矩陣范數(shù)(MatNorm)、矩陣轉(zhuǎn)置(MatTranspose)、獲得矩陣對(duì)角元素(MatGetDiago

39、nal)等,請(qǐng)參考PETSc用戶手冊(cè)(Pages 57)。2.2.3 “無(wú)矩陣”運(yùn)算所謂“無(wú)矩陣”運(yùn)算(Matrix-Free Matrices),是指不通過顯示存儲(chǔ)整個(gè)矩陣而是通過向量運(yùn)算來(lái)實(shí)現(xiàn)矩陣的各種操作和運(yùn)算的方法。PETSc給用戶提供了一個(gè)虛擬的矩陣對(duì)象/環(huán)境,用戶在這個(gè)環(huán)境下可以自由開發(fā)矩陣運(yùn)算程序。MatCreateShell:創(chuàng)建一個(gè)虛擬的矩陣對(duì)象UserMult:用戶編寫的矩陣向量乘積程序MatShellSetOperation:將一個(gè)用戶程序封裝到一個(gè)虛擬的矩陣對(duì)象中2.2.4 矩陣的劃分對(duì)于許多無(wú)結(jié)構(gòu)網(wǎng)格的PDE求解,格點(diǎn)在各進(jìn)程中的分布對(duì)計(jì)算性能具有非常重要的影響。目前

40、PETSc不支持動(dòng)態(tài)數(shù)據(jù)劃分,動(dòng)態(tài)負(fù)載平衡等技術(shù),而是采取反復(fù)創(chuàng)建和釋放的辦法來(lái)優(yōu)化網(wǎng)格的劃分。另外,PETSc提供了對(duì)并行圖形劃分軟件ParMETIS的接口。MatCreateMPIAdj:創(chuàng)建一個(gè)含鄰接信息的并行矩陣對(duì)象MatPartitioningCreate:創(chuàng)建一個(gè)并行矩陣劃分MatPartitioningSetAdjacency:設(shè)置矩陣劃分的鄰接信息MatPartitioningSetFromoptions:通過運(yùn)行參數(shù)設(shè)置矩陣劃分MatPartitioningApply:?jiǎn)?dòng)一個(gè)并行矩陣劃分MatPartitioningDestory:釋放一個(gè)并行矩陣劃分MatDestroy:

41、釋放一個(gè)含鄰接信息的并行矩陣對(duì)象ISPartitioningToNumbering:獲得矩陣局部的索引集和排序3 PETSc的基本功能本章主要介紹PETSc的三個(gè)核心組件、性能分析和接口功能。PETSc的三個(gè)核心組件包括線性方程求解器(SLES)、非線性方程求解器(SNES)和時(shí)間步進(jìn)積分器(TS)。所涉及的內(nèi)容和順序基本與PETSc用戶手冊(cè)(版本2.2.0)一致。3.1 線性方程求解SLES構(gòu)成了PETSc最核心的部分。它不僅是幾乎所有PDE方程求解器的基本內(nèi)核,而且也是實(shí)現(xiàn)PETSc的其它兩個(gè)核心組件SNES和TS的必不可少的部分。SLES求解線性方程組 (3.1)其中解算子是維非奇異矩陣

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

43、間方法KSPSetType:設(shè)置Krylov子空間方法的類型KSPRichardsonSetScale:沒有描述KSPChebychevSetEigenvalues:沒有描述KSPGMRESSetRestart:沒有描述KSPGMRESSetOrthogonalization:沒有描述KSPCGSetType:設(shè)置共扼梯度方法的對(duì)稱類型KSPSetInitialGuessNonzero:設(shè)置一個(gè)非零的初始猜值KSPSetPreconditionerSide:設(shè)置預(yù)條件子的位置KSPSetNormType:設(shè)置范數(shù)類型KSPSetTolerances:設(shè)置最大迭代步數(shù)KSPSetConverge

44、nceTest:?jiǎn)?dòng)用戶收斂性測(cè)試程序的封裝KSPDefaultMonitor:輸出每迭代步的殘差KSPSingularValueMonitor:輸出每迭代步預(yù)條件子的最大奇異值KSPTrueMonitor:輸出每個(gè)迭代步詳細(xì)的殘差信息KSPLGMonitorCreate:創(chuàng)建一個(gè)圖形輸出對(duì)象/環(huán)境KSPSetMonitor:設(shè)置輸出模式KSPLGMonitorDestroy:釋放一個(gè)圖形輸出對(duì)象/環(huán)境KSPSetComputeEigenvalues:設(shè)置預(yù)條件子特征值的計(jì)算環(huán)境KSPComputeEigenvalues:計(jì)算預(yù)條件子的特征值KSPComputeEigenvaluesExpli

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

46、述PCILUSetUSeInPlace:沒有描述PCILUSetAllowDiagonalFill:沒有描述MatCreateMPIRowbs:沒有描述PCSORSetOmega:設(shè)置SOR方法的松弛因子PCSORSetIterations:設(shè)置SOR方法的迭代步數(shù)PCSORSetSymmetric:設(shè)置SOR方法的對(duì)稱類型PCLUSetUseInplace:沒有描述PCBJacobiGetSubSLES:沒有描述PCASMGetSubSLES:沒有描述PCJacobiSetTotalBlocks:沒有描述PCASMSetTotalSubdomains:沒有描述PCASMSetType:沒有描

47、述PCBJacobiSetLocalBlocks:沒有描述PCASMSetLocalSubdomains:沒有描述PCASMSetOverlap:沒有描述PCShellSetApply:?jiǎn)?dòng)一個(gè)用戶提供預(yù)條件子的環(huán)境PCShellSetSetup:設(shè)置一個(gè)用戶提供預(yù)條件子的環(huán)境PCCompositeAddPC:累加一個(gè)新的預(yù)條件子PCCompositeSetType:設(shè)置預(yù)條件子的復(fù)合類型PCCompositeSetUserTrue:沒有描述PCCompositeGetPC:沒有描述PCILUSetFill:沒有描述PCSLESGetSLES:將解法器算子設(shè)置為預(yù)條件子PCSLESSetUse

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

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

50、解器SNESDestroy:釋放一個(gè)非線性方程求解器SNESSetFunction:設(shè)置非線性函數(shù)SNESSetJacobian:設(shè)置雅可比矩陣 3.2.2 非線性解法器SNESSetLineSearch:設(shè)置線性搜索方法的求解環(huán)境SNESSetTolerances:設(shè)置最大迭代步數(shù)和誤差界SNESSetTrustRegionTolerances:同上SNESSetConvergenceTest:設(shè)置用戶編寫的收斂測(cè)試SNESSetMonitor:設(shè)置輸出模式SNESGetSolution:獲得解向量的值SNESGetFunction:獲得函數(shù)值3.2.3 “無(wú)矩陣”方法在其迭代求解線性系統(tǒng)的過程中,SNES完全支持用戶提供的“無(wú)矩陣”預(yù)條件子。同前面類似,PETSc首先給用戶提供了一個(gè)虛擬的矩陣對(duì)象和環(huán)境,然后用戶基于這個(gè)環(huán)境可以自由開發(fā)自己的預(yù)條件子計(jì)算程序。MatCreateSNESMF:在SNES環(huán)境中創(chuàng)建一個(gè)虛擬的矩陣對(duì)象MatCreateMF:沒有描述MatSNESMFSetFunctionError:設(shè)置有限差分的逼近誤差MatSNESMFDefaultSetUmin:設(shè)置默認(rèn)的有限差分增量MatSNESMFWPSetComputeNormA:設(shè)置有限差分增量MatSNESMF

溫馨提示

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

評(píng)論

0/150

提交評(píng)論