PETSc并行程序設(shè)計方法.ppt_第1頁
PETSc并行程序設(shè)計方法.ppt_第2頁
PETSc并行程序設(shè)計方法.ppt_第3頁
PETSc并行程序設(shè)計方法.ppt_第4頁
PETSc并行程序設(shè)計方法.ppt_第5頁
已閱讀5頁,還剩128頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1 PETSc并行程序設(shè)計方法中科院計算機網(wǎng)絡(luò)信息中心超級計算中心 2004年11月 北京 2 報告基本目標(biāo) 全面介紹PETSc體系結(jié)構(gòu) 基本特色和功能 促進PETSc應(yīng)用程序開發(fā)方面的合作與交流 尋求PETSc軟件開發(fā)方面的廣泛建議和幫助 3 報告內(nèi)容提要 一 PETSc的基本概況四 PETSc的范例簡介二 PETSc的基本特色五 PETSc的其它功能三 PETSc的實例分析六 PETSc的簡單總結(jié) 4 一 PETSc的基本概況 PETSc簡單概述 PETSc體系結(jié)構(gòu) PETSc基本對象 PETSc核心組件 PETSc下載安裝 5 1 概述 PETSc Portable ExtensibleToolkitforScientificComputation 是美國能源部ODE2000支持開發(fā)20多個ACTS工具箱之一 由Argonne國家實驗室SatishBalay等人開發(fā)的可移植可擴展科學(xué)計算工具箱 主要用于高性能求解偏微分方程組及相關(guān)問題 PETSc所有消息傳遞均采用MPI標(biāo)準(zhǔn)實現(xiàn) PETSc用C語言開發(fā) 遵循面向?qū)ο笤O(shè)計的基本特征 用戶可以基于PETSc對象靈活開發(fā)應(yīng)用程序 目前 PETSc支持Fortran77 90 C和C 編寫的串行和并行代碼 6 PETSc是系列軟件和庫的集合 三個基本組件SLES SNES和TS本身基于BLAS LAPACK MPI等庫實現(xiàn) 同時又為TAO ADIC ADIFOR Matlab ESI等工具提供數(shù)據(jù)接口或互操作功能 并具有極好的可擴展性能 PETSc為用戶提供了豐富的Krylov子空間迭代方法和預(yù)條件子 并提供錯誤檢測 性能統(tǒng)計和圖形打印等功能 PETSc最新版本為petsc 2 2 1 2003年8月發(fā)布 PETSc網(wǎng)站http www mcs anl gov petsc 7 2 PETSc的體系結(jié)構(gòu) 不同于其它微分 代數(shù)方程解法器 PETSc為用戶提供了一個通用的高層應(yīng)用程序開發(fā)平臺 基于PETSc提供的大量對象和解法庫 用戶可以靈活地開發(fā)自己的應(yīng)用程序 還可隨意添加和完善某些功能 如為線性方程求解提供預(yù)條件子 為非線性問題的牛頓迭代求解提供雅可比矩陣 為許多數(shù)值應(yīng)用軟件和數(shù)學(xué)庫提供接口等 圖1表示了PETSc在實現(xiàn)層次上的抽象 8 應(yīng)用程序 BLAS LAPACK MPI PDE解法器 TS 時間步進 SNES 非線性方程解法器 SLES 線性方程解法器 KSP Krylov子空間方法 PC 預(yù)條件子 Draw 矩陣 向量 索引集 核心組件 數(shù)值方法 基本對象 運行環(huán)境 性能分析 圖1PETSc實現(xiàn)的抽象層次 9 應(yīng)用程序 用戶在PETSc環(huán)境下基于PETSc對象和算法庫編寫的串行或并行應(yīng)用程序 盡管PETSc程序完全在MPI上實現(xiàn) 但PETSc程序具有固定的框架結(jié)構(gòu) 即有初始化 空間釋放和運行結(jié)束等環(huán)境運行語句 PDE解法器 用戶基于PETSc三個基本算法庫 TS SNES和SLES 構(gòu)建的偏微方程求解器 但它卻不是PETSc的基本組件之一 TS 時間步進積分器 用于求解依賴時間或時間演化ODE方程 或依賴時間的離散化PDE方程 對于非時間演化或穩(wěn)態(tài)方程 PETSc提供了偽時間步進積分器 TS積分器最 10 后依賴線性解法器SLES和非線性解法器SNES實現(xiàn) PETSc為PVODE提供了接口 另外 TS用法簡單方便 SNES 非線性解法器 為大規(guī)模非線性問題提供高效的非精確或擬牛頓迭代解法 SNES依賴于線性解法器SLES 并采用線性搜索和信賴域方法實現(xiàn) SNES依賴于雅可比矩陣求解 PETSc既支持用戶提供有限差分程序 同時又為用戶提供了依賴ADIC等自動微分軟件生成的微分程序接口 SLES 線性解法器 它是PETSc的核心部分 PETSc幾乎提供了各種高效求解線性方程的解法器 既有串行求解也有并行求解 既有直接法求解也有迭代法求解 對于大規(guī)模 11 線性方程組 PETSc提供了大量基于Krylov子空間方法和預(yù)條件子的各種成熟而有效的迭代方法 以及其它通用程序和用戶程序的接口 KSP Krylov子空間方法 廣泛涉及Richardson方法 共扼梯度法 CG和BiCG 廣義最小殘差法 GMRES 最小二乘QR分解 LSQR 等 PC 預(yù)條件子 包括雅可比矩陣 分塊雅可比矩陣 SOR SSOR方法 不完全Cholesky分解 不完全LU分解 可加性Schwartz方法 多重網(wǎng)格預(yù)條件子等 DRAW 應(yīng)用程序的性能分析和結(jié)果顯示 12 3 PETSc的基本對象 向量 Vectors 矩陣 Matrices 索引集 IndexSets 13 3 1向量 Vectors PETSc的基本數(shù)據(jù)對象 PETSc向量對象主要用于存儲線性方程組的解和右端向量 對于規(guī)則的正交網(wǎng)格 PETSc自動對向量進行劃分 并通過分布式存儲向量 即DA對象 來管理 通過DA對象 用戶可以簡單地實現(xiàn)向量的分發(fā) 聚集 局部和全局之間的相互映像 邊界點的通信等基本操作 DA對象隱藏了進程之間的通信 用戶只需提供全局的向量結(jié)構(gòu)和數(shù)值 但對于無結(jié)構(gòu)網(wǎng)格 用戶則需通過索引集 即IS對象 來實現(xiàn)向量的分發(fā) 聚集 映像 邊界點的通信等基本操作 14 3 1 1向量對象的創(chuàng)建 賦值 聚集和釋放VecCreateSeq 創(chuàng)建一個串行的PETSc向量VecCreateMPI 創(chuàng)建一個并行的PETSc向量VecCreate 創(chuàng)建一個PETSc向量對象VecSetSize 設(shè)置向量維數(shù)VecSetFromOptions 通過運行參數(shù)設(shè)置向量類型VecSet 將一個數(shù)值賦給向量的每個元素VecSetValues 分別給向量的每個元素插入或累加數(shù)值 15 VecAssemblyBegin 啟動一個向量的創(chuàng)建VecAssemblyEnd 完成一個向量的創(chuàng)建VecDuplicate VecDuplicateVecs 復(fù)制一個 組向量VecDestroy VecDestroyVecs 釋放一個 組向量 16 3 1 2向量對象的基本運算操作VecGetOwnershipRang 返回向量在劃分區(qū)域 進程 中的下界和上界VecGetArray 獲得向量在局部區(qū)域內(nèi)的訪存指針VecGetArray Vecv PetscScalar array VecRestoreArray 關(guān)閉在局部區(qū)域內(nèi)的對向量的訪存VecGetLocalSize 返回向量在局部區(qū)域內(nèi)的維數(shù)VecGetSize 返回全局向量的維數(shù) 17 此外 還涉及向量的算術(shù)運算 如點積 VecDot 范數(shù) VecNorm 最小值 VecMin 絕對值 VecAbs 倒數(shù) VecReciprocal 各種乘積 VecAXPY VecAYPX VecWAXPY VecAXPBY VecScale 等 18 例一 如何通過DA存取向量元素DA首先獲得局部向量的控制權(quán) 然后將局部向量的訪存權(quán)交給局部數(shù)組 進行相應(yīng)的讀寫等操作之后 再逐步釋放對局部數(shù)組和局部向量的訪存權(quán)和控制權(quán) PetscScalar f u Veclocal global DAGetLocalVecor DAda Veclocal DAVecGetArray DAda Veclocal void u 19 DAVecGetArray DAda Vecglobal void f f i j u i j DAVecRestoreArray DAda Veclocal void u DAVecRestoreArray DAda Vecglobal void f DARestoreLocalVecor DAda Veclocal 20 3 1 3向量對象的排序PETSc排序與應(yīng)用排序之間的差異主要來源于兩個原因 局部序號和全局序號的不同 不同區(qū)域分解方法之間的差異 AOCreatBasic 定義一個新的排序映射AOCreatBasic MPI Commcomm intn int apordering int petscordering AO ao AOPetscToApplication 從PETSc排序得到應(yīng)用排序的映射AOApplicationToPetsc 從應(yīng)用排序得到PETSc排序的映射AOPetscToApplication AO ao intn int indices 21 AODestroy 釋放一個排序映射AOCreatBasicIS 定義一個新的索引集排序映射AOPetscToApplicationIS 從PETSc索引集排序得到應(yīng)用索引集排序的映射AOApplicationToPetscIS 從應(yīng)用索引集排序得到PETSc索引集排序的映射 22 3 1 4規(guī)則網(wǎng)格的DA實現(xiàn)分布式數(shù)組 DA 是PETSc的一個重要特色 DA自動管理數(shù)據(jù)在局部進程之間的劃分 消息傳遞和讀寫 用戶只需提供數(shù)組的全局?jǐn)?shù)值 并通過全局和局部之間的邏輯排序來引用數(shù)組元素 在PETSc學(xué)習(xí)過程中 用戶要特別注意向量 Vector 和數(shù)組 Array 兩個概念 前者著重強調(diào)獨立于數(shù)組數(shù)值和存儲之外的邏輯結(jié)構(gòu)或排序上的抽象 而后者著重強調(diào)數(shù)組元素的訪問和數(shù)值改寫 23 DACreat2d 創(chuàng)建一個2維的DA數(shù)組DACreat2d MPI Commcomm DAPeriodicTypewrap DAStencilTypest intM intN intm intn intdof ints int lx int ly DA da DACreatGlobalVector 創(chuàng)建一個全局的DA向量DACreatLocalVector 創(chuàng)建一個局部的DA向量DAGlobalToLocalBegin 啟動一個DA向量的分發(fā)DAGlobalToLocalBegin DAda Vecglobal InsertModeiora Veclocal DAGlobalToLocalEnd 完成一個DA向量的分發(fā) 24 DALocalToGlobal 完成一個DA向量的聚集DALocalToGlobal DAda Vecl InsertModemodel Vecg DALocalToLocalBegin 啟動一個DA向量的局部分發(fā)DALocalToLocalBegin DAda Veclocal1 InsertModeiora Veclocal2 其中InsertMode有ADD VALUES和INSERT VALUES兩種類型DALocalToLocalEnd 完成一個DA向量的局部分發(fā)DAGetScatter 獲得一個DA在全局與局部 局部與局部之間的分發(fā)權(quán) 極少使用 25 DAGetLocalVector 獲得一個局部DA向量的訪問權(quán)DARestoreLocalVector 釋放一個局部DA向量的訪問權(quán)DAVecGetArray 獲得一個局部DA數(shù)組的訪存權(quán)DAVecRestoreArray 釋放一個局部DA數(shù)組的訪存權(quán)DAGetCorners 獲得數(shù)組左邊界的初始位置DAGetGhostCorners 獲得數(shù)組偽邊界的初始位置DAGetGlobalIndices 獲得全局格點數(shù) 含偽邊界 26 DAGetISLocalToGlobalMapping 獲得局部到整體索引集之間的映射DASetLocalToGlobalMapping 設(shè)置一個向量的局部到整體之間的映射DAGetAO 從DA環(huán)境上獲得一個應(yīng)用排序DAGetAO DAda AO ao 27 3 2矩陣 Matrices PETSc的基本數(shù)據(jù)對象 與向量對象不同 一個PETSc的矩陣對象首先是在局部 各個進程 數(shù)據(jù)填充完成之后再對其進行全局聚集 然后再由PETSc對象統(tǒng)一管理和實現(xiàn)矩陣的各種運算和操作 當(dāng)問題的計算規(guī)模較大時 稀疏矩陣的填充是影響程序性能的關(guān)鍵因素 PETSc的矩陣運算和操作包括矩陣的創(chuàng)建 插值 聚集 各種算術(shù)運算和釋放 PETSc的各種矩陣運算和操作使用起來非常方便 用戶無需關(guān)心矩陣的具體存儲實現(xiàn) PETSc還為用戶提供了的單純依賴向量來實現(xiàn)矩陣各種運算 或無矩陣運算 的程序接口 28 3 2 1矩陣對象的創(chuàng)建 聚集和釋放MatCreate 創(chuàng)建一個PETSc矩陣對象MatSetValues 給一個矩陣賦值MatSetValues MatA intm im intn intin PetscScalar values INSERT VALUES ADD VALUES MatSetOption 設(shè)置一個矩陣的行或列主存儲次序MatAssemblyBegin 啟動一個矩陣的聚集MatAssemblyEnd 完成一個矩陣的聚集 29 MatGetOwnershipRang 獲得矩陣的局部行劃分的上 下界MatCreateSeqAIJ 創(chuàng)建一個串行壓縮稀疏行格式矩陣對象MatCreateSeqAIJ PETSC COMM SELF intm intn intnz int nnz Mat A MatCreateMPIAIJ 創(chuàng)建一個并行壓縮稀疏行格式矩陣對象MatCreateMPIAIJ MPI Comm intm intn intM intN intd nz int d nnz into nz int o nnz Mat A 30 MatCreateSeqDense 創(chuàng)建一個串行稠密格式的矩陣對象MatCreateMPIDense 創(chuàng)建一個并行稠密格式的矩陣對象MatDestroy 釋放一個矩陣對象 31 例二 并行稀疏矩陣對象的存儲格式 P1 d nz 2 d nnz 2 2 2 o nz 2 o nnz 2 2 2 P2 d nz 3 d nnz 3 3 2 o nz 2 o nnz 2 1 1 P3 d nz 1 d nnz 1 1 o nz 4 o nnz 4 4 32 3 2 2矩陣對象的基本運算操作MatZeroRows 初始化一個矩陣行MatZeroEntries 初始化一個矩陣MatConvert 矩陣變換MatGetRow 獲得矩陣的一行元素的值MatRestorerow 釋放對矩陣行的訪問權(quán)MatCopy 復(fù)制一個矩陣此外 還涉及矩陣算術(shù)運算 包括矩陣向量乘積 MatMult 矩陣范數(shù) MatNorm 和矩陣轉(zhuǎn)置 MatTranspose 等 33 3 2 3 無矩陣 運算 無矩陣 運算 Matrix FreeMatrices 指不通過顯式存儲整個矩陣而是通過向量運算來實現(xiàn)矩陣的各種操作和運算的方法 PETSc給用戶提供了一個虛擬的矩陣對象 環(huán)境 用戶在這個環(huán)境下可以自由開發(fā)矩陣運算程序 MatCreateShell 創(chuàng)建一個虛擬的矩陣對象MatCreateShell MPI Comm intm intn intM intN void ctx Mat mat 34 UserMult 用戶編寫的矩陣向量乘積程序MatShellSetOperation 將一個用戶程序封裝到一個虛擬的矩陣對象中MatShellSetOperation Matmat MatOperationMATOP MULT void void int UserMult Mat Vec Vec 35 3 2 4矩陣對象的劃分對于許多無結(jié)構(gòu)網(wǎng)格的PDE求解 格點在各進程中的分布對計算性能具有非常重要的影響 目前PETSc不支持動態(tài)數(shù)據(jù)劃分 動態(tài)負載平衡等技術(shù) 而是采取反復(fù)創(chuàng)建和釋放的辦法來優(yōu)化網(wǎng)格的劃分 另外 PETSc提供了對并行圖形劃分軟件ParMETIS的接口 MatCreateMPIAdj 創(chuàng)建一個含鄰接信息的并行矩陣對象MatPartitioningCreate 創(chuàng)建一個并行矩陣劃分 36 MatPartitioningSetAdjacency 設(shè)置矩陣劃分的鄰接信息MatPartitioningSetFromoptions 運行參數(shù)設(shè)置矩陣劃分MatPartitioningApply 啟動一個并行矩陣劃分MatPartitioningDestory 釋放一個并行矩陣劃分ISPartitioningToNumbering 獲得矩陣局部索引集和排序 37 3 3索引集 IndexSets PETSc的基本對象之一 一系列數(shù)據(jù)操作對象的集合 專門用來管理無結(jié)構(gòu)網(wǎng)格向量的分發(fā) 聚集 局部和全局之間的映像 邊界點的通信等基本操作 它對于PETSc在應(yīng)用程序中最終實現(xiàn)通信抽象具有重要的意義 38 ISCreatGeneral 創(chuàng)建一個索引集排序ISCreatGeneral MPI Comm intn int indices IS is ISCreatStride 創(chuàng)建一個具有跨度的索引集排序ISCreatStride MPI Comm intn intfirst intstride IS is ISDestroy 釋放一個索引集排序ISGetSize 獲得一個索引集排序的數(shù)據(jù)規(guī)模的大小ISStrideGetInfo 獲得一個含跨度的索引集排序信息ISStrideGetInfo IS is int first int stride 39 ISGetIndices 獲得一個索引集排序的所有索引列表ISRestoreIndices 釋放一個索引集列表的存儲空間ISCreatBlock 創(chuàng)建一個塊索引集排序ISCreatBlock MPI Comm intbs intn int indices IS is ISBlockGetIndices 獲得一個塊索引集排序的所有索引列表ISBlockGetSize 獲得一個塊索引集排序的數(shù)據(jù)規(guī)模的大小ISBlockGetBlockSize 獲得一個塊索引集排序的塊規(guī)模大小ISBlock 沒有描述 40 VecScatterCreat 創(chuàng)建一個向量與向量之間的分發(fā)VecScatterCreat Vecx ISix Vecy ISiy VecScatter ctx VecScatterBegin 啟動一個向量與向量之間的分發(fā)VecScatterEnd 完成一個向量與向量之間的分發(fā)VecScatterDestroy 釋放一個向量與向量之間的分發(fā)VecCreatGhost 創(chuàng)建一個含偽邊界點的PETSc向量對象VecCreatGhost MPI Comm intn intN intnghost int ghosts Vec vv 41 VecCreatGhostWithArray 創(chuàng)建一個含偽邊界點的PETSc向量對象和數(shù)組VecCreatGhostWithArray MPI Comm intn intN intnghost int ghosts PetscScalar array Vec vv VecGhostGetLocalForm 獲得一個含偽邊界點向量的局部訪問權(quán)VecGhostRestoreLocalForm 釋放一個含偽邊界點向量的局部訪問權(quán)VecGhostUpdateBegin 啟動一個含偽邊界點向量的更新VecGhostUpdateEnd 完成一個含偽邊界點向量的更新 42 4 PETSc的核心組件 線性方程解法器 SLES 非線性解法器 SNES 時間步進解法器 TS 43 4 1線性方程解法器 SLES SLES構(gòu)成了PETSc最核心的部分 它不僅是幾乎所有PDE方程求解器的基本內(nèi)核 而且也是實現(xiàn)PETSc的其它兩個核心組件SNES和TS的必不可少的部分 SLES求解線性方程組Ax b 1 4 1 其中解算子A是n n維非奇異矩陣 x是n維右端向量 b為n維解向量 下面從線性方程求解環(huán)境的創(chuàng)建 Krylov子空間方法和預(yù)條件子 PC 的選擇 收斂性判據(jù) LU直接求解等方面詳細介紹SLES 44 4 1 1基本用法SLESCreate 創(chuàng)建一個線性方程求解環(huán)境SLESSetOperators 設(shè)置求解算子 矩陣 SLESSetOperators SLESsles MatAmat MatPCmat Mat structureflag 其中 flag 取 SAME NONZERO PATERN DIFFERENT NONZERO PATERN 或 SAME PRECONDITIONER 之一 SLESSetFromoptions 通過運行參數(shù)設(shè)置SLES運行選項 45 SLESSolve 啟動一個線性方程求解器SLESSolve SLESsles Vecb Vecx int its SLESSetup 啟動一個線性方程求解環(huán)境SLESDestroy 釋放一個線性方程求解環(huán)境SLESGetPC 獲得PC對象 環(huán)境的訪問權(quán)SLESGetKSP 獲得KSP對象 環(huán)境的訪問權(quán) 46 4 1 2Krylov子空間方法Krylov子空間方法是求解大規(guī)模稀疏線性方程組和大型矩陣特征值問題最有效的方法之一 其收斂性質(zhì)依賴于矩陣特征值或奇異值的分布 預(yù)處理技術(shù)是改善矩陣特征值分布和這類方法收斂性質(zhì)的最有效手段 一個好的預(yù)條件子使得具體選取何種Krylov子空間方法在算法效率上沒有太大差別 但是 如何構(gòu)造一個好的預(yù)條件子本身是一個重要難題 因此 PETSc為用戶提供了構(gòu)造預(yù)條件子的用戶程序接口 Krylov子空間方法涉及Richardson方法 共扼梯度法 CG和BiCG 廣義最小殘差法 GMRES 最小二乘QR分解 LSQR 等 47 KSPSetType 設(shè)置Krylov子空間方法的求解類型KSPSetType KSPksp KSPTypemethod 其中第二個參數(shù)為Krylov子空間方法的類型 包括 Richardson方法KSPRICHARDSON切比雪夫方法KSPCHEBYCHEV共扼梯度法KSPCG廣義最小殘差法KSPGMRES共扼轉(zhuǎn)置擬最小殘差法KSPTCQMR雙共扼梯度平方法KSPBCGS 48 經(jīng)典Gram Schmidt方法KSPCGS無轉(zhuǎn)置擬最小殘差法KSPTFQMR共扼殘差法KSPCR最小二乘QR分解方法KSPLSQR雙共扼梯度法KSPBICG無迭代直接求解方法KSPPREONLY 49 KSPRichardsonSetScale 設(shè)置Richardson方法的阻尼系數(shù)KSPRichardsonSetScale KSPksp doubledamping factor KSPChebychevSetEigenvalues 設(shè)置切比雪夫方法的參數(shù)KSPChebychevSetEigenvalues KSPksp doubleemax doubleemin 默認值emax 0 01 emin 100 0 沒有描述KSPGMRESSetRestart 設(shè)置廣義最小殘差法的迭代步數(shù)KSPGMRESSetRestart KSPksp intmax steps KSPGMRESSetOrthogonalization 設(shè)置為經(jīng)典的Gram Schmidt方法 其計算性能好 但數(shù)值穩(wěn)定性差 50 KSPCGSetType 設(shè)置共扼梯度方法中的算子對稱類型KSPCGSetType KSPksp KSPCGTypeKSP CG SYMMETRIC KSPSetInitialGuessNonzero 設(shè)置一個非零的初始猜值KSPSetInitialGuessNonzero KSPksp PetscTruthflg KSPSetPreconditionerSide 設(shè)置為右預(yù)條件子KSPSetPreconditionerSide KSPksp PCSidePC RIGHT 51 KSPSetNormType 設(shè)置為真實殘差的范數(shù)類型KSPSetNormType KSPksp KSP UNPRECONDITIONED NORM 其中大多數(shù)方法默認為預(yù)處理后的殘差范數(shù)KSPSetTolerances 設(shè)置最大誤差界和最大迭代步數(shù)KSPSetTolerances KSPksp doublertol doubleatol doubledtol intmaxits 其中從第二個參數(shù)起依次為相對誤差 默認值為rtol 10 5 絕對誤差 默認值為atol 10 50 相對誤差比率 默認值為dtol 105 和最大迭代步數(shù) 默認值為maxits 105 52 KSPSetConvergenceTest 啟動用戶收斂性測試程序的封裝KSPSetConvergenceTest KSPksp int test KSPksp intit doublernorm KSPConvergedReason reason void ctx void ctx 其中ctx為用戶程序運行環(huán)境KSPDefaultMonitor 輸出每迭代步的殘差KSPSingularValueMonitor 輸出每迭代步預(yù)條件子的最大奇異值KSPTrueMonitor 輸出每個迭代步的殘差的詳細信息 53 KSPLGMonitorCreate 創(chuàng)建一個圖形輸出對象 環(huán)境KSPLGMonitorCreate char display char title intx inty Intw inth PetscDrawLG lg KSPSetMonitor 設(shè)置輸出模式KSPSetMonitor KSPksp KSPLGMonitor lg 0 KSPLGMonitorDestroy 釋放一個圖形輸出對象 環(huán)境 54 KSPSetComputeEigenvalues 設(shè)置預(yù)條件子特征值的計算環(huán)境KSPComputeEigenvalues 計算預(yù)條件子的特征值KSPComputeEigenvalues KSPksp intn double realpart double complexpart double neig KSPComputeEigenvaluesExplicitly 用直接方法計算預(yù)條件子的特征值KSPComputeEigenvaluesExplicitly KSPksp intn double realpart double complexpart 55 KSPGetSolution 獲得解向量的值KSPGetRhs 獲得右邊向量的值KSPBuildSolution 獲得每個迭代步解向量的逼近值KSPBuildResidual 獲得每個迭代步殘差的逼近值 56 4 1 3預(yù)條件子PCSetType 設(shè)置預(yù)條件子的類型PCSetType PCpc PCTypemethod 其中第二個參數(shù)為預(yù)條件子的可選類型 包括 JacobiPCJAOBI塊JacobiPCBJAOBISOR SSORPCSORSOR Eisenstat方法 串行 PCEISENSTAT 57 不完全Cholesky分解PCICC不完全LU分解 串行 PCILU可加性SchwarzPCASM線性解法器PCSLES組合預(yù)條件子PCCOMPOSITELU分解 串行 PCLUCholesky分解PCCholesky無預(yù)條件子PCNONE用戶提供預(yù)條件子PCSHELL 58 PCILUSetLevels 設(shè)置ILU預(yù)條件子的優(yōu)化級別PCILCCSetLevels 設(shè)置ILCC預(yù)條件子的優(yōu)化級別PCILUSetReuseOrdering 復(fù)用上次ILU分解中的排序?qū)ο驪CILUSetUseDropTolerance 沒有描述PCILUSetUseDropTolerance PCpc doubledt doubledtcol intdtcount PCILUDTSetReuseFill 復(fù)用上次ILU分解中的填充模式PCILUSetUSeInPlace 設(shè)置ILU分解的本地存取方式PCILUSetAllowDiagonalFill 沒有描述 59 MatCreateMPIRowbs 創(chuàng)建BlockSolve95矩陣稀疏行結(jié)構(gòu)MatCreateMPIRowbs MPI Comm intm intM intnz int nnz Mat A PCSORSetOmega 設(shè)置SOR方法的松弛因子PCSORSetIterations 設(shè)置SOR方法的迭代步數(shù)PCSORSetSymmetric 設(shè)置SOR方法的對稱類型PCLUSetUseInplace 設(shè)置LU分解的本地存取方式 60 PCBJacobiGetSubSLES 為子塊獲取SLES環(huán)境信息PCBJacobiGetSubSLES PCpc int n local int first local SLES subsles PCJacobiSetTotalBlocks 設(shè)置全局劃分塊數(shù)目PCBJacobiSetLocalBlocks 設(shè)置局部劃分塊數(shù)目PCASMGetSubSLES 為子塊獲取SLES環(huán)境信息 同上 PCASMSetTotalSubdomains 設(shè)置全局劃分 索引集 PCASMSetLocalSubdomains 設(shè)置局部劃分 索引集 61 PCASMSetType 設(shè)置可加性Schwarz預(yù)條件子的類型PCASMSetOverlap 設(shè)置重疊區(qū)域PCASMSetOverlap PCpc intoverlap 其默認值為1 PCShellSetApply 設(shè)置一個由用戶提供預(yù)條件子的環(huán)境PCShellSetApply PCpc int apply void ctx Vec Vec void ctx PCShellSetSetup 設(shè)置由用戶提供預(yù)條件子的啟動程序PCShellSetSetup PCpc int setup void ctx 62 PCCompositeAddPC 添加一個新的預(yù)條件子及其類型PCCompositeAddPC PCpc PCTypetype 默認為可加性的復(fù)合類型PCCompositeSetType 設(shè)置預(yù)條件子的復(fù)合類型PCCompositeSetType PCpc PCCompositeTypetype 其中第二個參數(shù)為PC COMPOSITE ADDITIVE或PC COMPOSITE MULTIPLICATIVEPCCompositeSetUseTrue 設(shè)置為真實殘差的范數(shù)類型 63 PCCompositeGetPC 設(shè)置單個預(yù)條件子的類型參數(shù)PCCompositeGetPC PCpc intcount PC subtype PCSLESGetSLES 將解法器設(shè)置為預(yù)條件子PCSLESSetUserTrue 將解法器算子設(shè)置為預(yù)條件子 64 MGSetLevels 設(shè)置多重網(wǎng)格預(yù)條件子的優(yōu)化級別MGSetType 設(shè)置多重網(wǎng)格預(yù)條件子的類型MGSetCycles 設(shè)置W cycle參數(shù)MGSetNumberSmoothUp 設(shè)置向前平滑參數(shù)MGSetNumberSmoothDown 設(shè)置向后平滑參數(shù)MGGetCoarseSolve 設(shè)置粗網(wǎng)格求解器MGGetSmoother 設(shè)置平滑算子MGGetSmootherUp 設(shè)置向前平滑算子MGGetSmootherDown 設(shè)置向后平滑算子MGSetInterpolate 設(shè)置插值算子 65 MGSetRestriction 設(shè)置約束條件MGSetResidual 設(shè)置多重網(wǎng)格預(yù)條件子的殘差MGSetRhs 設(shè)置多重網(wǎng)格預(yù)條件子的右邊向量MGSetX 設(shè)置多重網(wǎng)格預(yù)條件子的解向量MGSetR 設(shè)置多重網(wǎng)格預(yù)條件子的殘差 66 4 1 4奇異方程求解MatNullSpaceCreate 創(chuàng)建一個零子空間對象MatNullSpaceCreate MPI Comm PetscTruthhasconstants intdim Vec basis MatNullSpace nsp PCNullSpaceAttach 設(shè)置一個零子空間對象PCNullSpaceAttach PCpc MatNullSpacensp 67 4 2非線性方程解法器 SNES SNES非線性解法器基于牛頓迭代法 線性搜索和信賴域方法 并依賴線性解法器SLES實現(xiàn) 雅可比矩陣的求解是SNES解法器的重要組成部分 SNES求解以下形式的非線性方程組組F x 0 1 4 2 其中解算子F Rn Rn 68 4 2 1基本用法SNESCreate 創(chuàng)建一個非線性方程求解環(huán)境SNESSetType 設(shè)置非線性求解器的類型SNESSetType SNESsnes SNESTypemethod 其中第二個參數(shù)為非線性求解器的可選類型 包括 線性搜索SNESLS信賴域方法SNESTRJacobi檢測SNESTEST 69 SNESSetFromOptions 通過運行參數(shù)設(shè)置SNES運行選項SNESSolve 啟動一個非線性方程求解器SNESDestroy 釋放一個非線性方程求解器SNESSetFunction 設(shè)置非線性函數(shù)SNESSetFunction SNESsnes Vecf int FormFunction SNESsnes Vecx Vecf void ctx void ctx SNESSetJacobian 設(shè)置雅可比矩陣SNESSetJacobian SNESsnes MatA MatB int FormJacobian SNESsnes Vecx MatA MatB MatStructure flag void ctx void ctx 70 4 2 2非線性解法器SNESSetLineSearch 設(shè)置線性搜索方法的求解環(huán)境SNESSetLineSearch SNESsnes int ls SNESsnes Vec Vec Vec Vec double double double void lsctx SNESSetTolerances 設(shè)置最大迭代步數(shù)和誤差界SNESSetTolerances SNESsnes doubleatol doublertol doublestol intits intfcts stol xk 1 xk SNESSetTrustRegionTolerances 同上 信賴域方法 SNESSetTrustRegionTolerances SNESsnes doubletrtol 71 SNESSetConvergenceTest 設(shè)置用戶編寫的收斂性測試對象SNESSetConvergenceTest SNESsnes int test SNESsnes doublexnorm doublegnorm doublef SNESConvergedReasonreason void cctx void cctx 其中參數(shù)xnorm gnorm和f依次為當(dāng)前迭代誤差 當(dāng)前步誤差或當(dāng)前步梯度范數(shù) 最優(yōu)化問題 和函數(shù)值 SNESSetMonitor 設(shè)置輸出模式SNESSetMonitor SNESsnes int mon SNESsnes intits doublenorm void mctx void mctx int monitordestroy void 其中參數(shù)its和norm依次為迭代次數(shù)和函數(shù)值 72 SNESGetSolution 從SLES環(huán)境獲得解向量對象SNESGetSolution SNESsnes Vec x SNESGetFunction 從SLES環(huán)境獲得函數(shù)對象SNESGetFunction SNESsnes Vec r void ctx int func SNESsnes Vec Vec void 73 4 2 3 無矩陣 方法在其迭代求解線性系統(tǒng)的過程中 SNES完全支持用戶提供的 無矩陣 預(yù)條件子 同前面類似 PETSc首先給用戶提供了一個虛擬的矩陣對象和環(huán)境 然后用戶基于這個環(huán)境可以自由開發(fā)自己的雅可比矩陣乘積計算程序 MatCreateSNESMF 在SNES中創(chuàng)建一個虛擬的矩陣對象MatCreateMF 創(chuàng)建一個虛擬的矩陣對象MatSNESMFSetFunctionError 設(shè)置有限差分的逼近誤差 74 MatSNESMFDefaultSetUmin 設(shè)置默認的有限差分增量MatSNESMFWPSetComputeNormA 消除有限差分右乘向量計算中的冗余計算MatSNESMFWPSetComputeNormU 消除有限差分方法解向量計算中的冗余計算MatSNESMFSetHHistory 設(shè)置有限差分增量MatSNESMFReSetHHistory 更新有限差分增量MatSNESMFGetH 獲得有限差分增量 75 4 2 4有限差分雅可比逼近雅可比矩陣的計算包括兩個部分 稀疏結(jié)構(gòu)的著色或排序 分別按重新得到的行或列計算雅可比矩陣的所有非零元素 有限差分逼近使得在一次差分逼近中 可以同時計算出雅可比矩陣同一列中的所有元素 借助于右乘初始輸入矩陣 可以在一次差分逼近中同時計算出處于不同列并相互正交的更多非零元素 有限差分逼近簡單表示為 76 例一 稀疏雅可比矩陣的著色與右乘初始矩陣 77 MatGetColoring 給稀疏雅可比矩陣著色 僅適用于串行MatFDColoringGreate 創(chuàng)建一個與著色相關(guān)的數(shù)據(jù)結(jié)構(gòu)ISColoringDestroy 釋放一個與著色相關(guān)的數(shù)據(jù)結(jié)構(gòu) 對象MatFDColoringFromOptions 通過運行參數(shù)創(chuàng)建與著色相關(guān)的有限差分計算對象SNESSetJacobian 在SNES環(huán)境中啟動疏雅可比的著色和有限差分計算 78 4 3時間步進解法器 TS TS時間步進積分器 用于求解依賴時間或時間演化的ODE方程 或依賴時間的離散化后的PDE方程 TS主要求解如下時間依賴問題ut F u t 1 4 3 其中u為有限維解向量 上式通常為運用有限差分或有限元方法離散后的常微分方線性程組 對于非時間演化或穩(wěn)態(tài)方程 PETSc提供了偽時間步進積分器 TS積分器最終依賴線性解法器SLES和非線性解法器SNES實現(xiàn) PETSc為PVODE求解器提供了接口 79 4 3 1基本用法TSCreate 創(chuàng)建一個TS求解環(huán)境TSCreate MPI Commcomm TSProblemTypeproblemtype TS ts 其中第二個參數(shù)為算子類型 包括A A t 或F u t TSSetType 設(shè)置TS求解器的類型TSSetType TSts TSTypetype 其中第二個參數(shù)為求解器算子類型 包括TS EULER TS BULER和TS PSEUDO TSSetInitialTimeStep 設(shè)置初始時間和步長TSSetInitialTimeStep TSts doubletime doubledt 80 TSSetTimeStep 設(shè)置 更改時間步長TSGetTimeStep 獲得時間步長TSSetDuration 設(shè)置最大時間步數(shù)TSSetDuration TSts doublemaxsteps doublemaxtime TSSetUp 啟動TS求解環(huán)境TSDestroy 釋放TS求解環(huán)境TSView 啟動TS屏幕輸出TSView TSts PetscViewerviewer 81 4 3 2求解時間依賴問題TSSetSolution 為TS求解器設(shè)置一個初始猜值TSSetRHSMatrix 設(shè)置右端算子 線性問題 TSSetRHSMatrix TSts MatA MatB int f TS double Mat Mat MatStructure void void fP 其中參數(shù)f為時間依賴問題 A t 的矩陣對象A及其預(yù)條件子B的計算函數(shù) 否則為PETSC NULL 參數(shù)fP為用戶程序運行環(huán)境 82 TSSetRHSFunction 設(shè)置右端算子 非線性問題 TSSetRHSFunction TSts int f TS double Vec Vec void void fP TSSetRHSJacobian 設(shè)置右端算子的雅可比矩陣 非線性問題 TSSetRHSJacobian TSts MatA MatB int fjac TS double Vec Mat Mat MatStructure void void fP 83 4 3 3求解時間穩(wěn)態(tài)問題TSPseudoSetTimeStep 設(shè)置TS求解器的時間步長TSPseudoSetTimeStep TSts int dt TS double void void dtctx 參數(shù)dt為用戶用于求解下次時間步長的函數(shù) TSPseudoincrementDtFromInitialDt 設(shè)置時間步長 從初始時間步長出發(fā)計算 而默認方式基于上次時間步長 TSPseudoSetTimeStepIncrement 設(shè)置時間步長的尺度因子 默認值為1 1 84 4 3 4PVODE求解器與TS的接口方式TSPVodeSetType 啟動PVODE求解器TSPVodeGetPC PVODE從TS環(huán)境中獲得預(yù)條件子TSPVodeSetTolerance 設(shè)置誤差界TSPVodeSetTolerance TSts doubleabs doublerel TSPVodeSetGramSchmidtType 沒有描述TSPVodeSetGMRESRestart 沒有描述 85 5 PETSc的下載安裝 在LINUX UNIX環(huán)境下安裝PETSc之前 系統(tǒng)首先需要做如下配置 1 MPI的一種實現(xiàn) 2 BLAS和LAPACK的一個拷貝 3 可選軟件包 然后 可按照以下步驟安裝PETSc 1 設(shè)置環(huán)境變量PETSC DIR和PETSC ARCH 分別為PETSc主目錄的路徑和機器體系結(jié)構(gòu) 例如setenvPETSC DIR home username petsc 2 1 3setenvPETSC ARCHrs6000 86 2 編輯文件 PETSC DIR bmake PETSC ARCH pack ages 以指定MPI LAPACK BLAS X windows等的路徑及可選軟件包 3 編輯文件 PETSC DIR bmake PETSC ARCH vari ables以從其缺省改變C C 或Fortran編譯器的名字 4 在PETSc主目錄中使用makeBOPT gall make log建立PETSc的調(diào)試版本或使用makeBOPT Oall make log來建立PETSc庫的優(yōu)化版本 標(biāo)志BOPT確定建立哪種庫 其它可選項是對C 版本的BOPT g c O c 和對復(fù)數(shù)版本的BOPT g complex O complex 87 二 PETSc的基本特色 計算能力 可兼容性 可擴展性 抽象數(shù)據(jù)類型 輸出能力 88 1 計算能力 PETSc為用戶提供了豐富的算法和函數(shù)庫資源 三個求解器 SLES SNES和TS 構(gòu)成了PETSc的核心組件 PETSc不僅為中小規(guī)模線性方程組的求解提供了高效的直接方法 還為大規(guī)模 稀疏 線性方程組的迭代求解提供了多種Krylov子空間方法和多種預(yù)條件子 89 2 可兼容性 一方面 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ū)域分解和雅可比矩陣求解等方面的功能 90 3 可擴展性 PETSc的可擴展性功能主要包括三個方面 計算性能的并行可擴展性 功能的可擴展性和計算能力的可擴展性 無論是在計算時間還是在浮點性能方面 PETSc提供的范例程序都有良好的線性加速比性能 面向?qū)ο蟮某绦蛟O(shè)計風(fēng)格使得PETSc具有良好的功能擴展能力 作為一個高級應(yīng)用程序開發(fā)平臺 PETSc特別適合于用來開發(fā)大型應(yīng)用程序 91

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論