內容簡介
代碼驗證是確保科學計算代碼中沒有影響數值解精度的編程錯誤的必經途徑。全書共十章,全面系統地介紹了計算機代碼驗證,包括背景、原理、流程、實施細節和示例。重點闡述了計算機代碼驗證的一種重要手段,即「基於人造解方法的精度階驗證」(OVMSP)。通過求解Burgers方程和Navier-Stokes方程的示例闡明了該方法的優點。
《計算科學與工程領域的計算機代碼驗證》面向計算科學和工程領域計算機代碼的開發者和測試者,特別是微分方程模擬軟體的研發人員,為其進行代碼驗證提供規範的實施準則和切實可行的操作指導。
目錄
第一章 代碼驗證導論
第二章 數學模型和數值演算法
2 1 數學模型
2 2 求解微分方程的數值方法
2 2 1 術語
2 2 2 有限差分示例
2 2 3 數值問題
2 2 4 代碼精度階驗證
第三章 精度階驗證流程(OVMSP)
3 1 靜態測試
3 2 動態測試
3 3 精度階驗證流程概述
3 4 詳細流程
3 4 1 流程開始(第1步~第3步)
3 4 2 運行測試確定誤差(第4步~第5步)
3 4 3 解釋測試結果(第6步~第10步)
3 5 小結
第四章 設計覆蓋測試套
4 1 基本設計問題
4 2 與邊界條件相關的覆蓋問題
4 3 與網格和網格加密相關的覆蓋問題
第五章 確定精確解
5 1 利用正問題獲得精確解
5 2 人造精確解法
5 2 1 人造解構建準則
5 2 2 係數構建方針
5 2 3 示例:人造解構建
5 2 4 輔助條件的處理
5 2 5 源項深度探索
5 2 6 精確解的物理現實
第六章 精度階驗證流程的益處
6 1 編碼錯誤分類
6 2 簡單的偏微分方程代碼
6 3 盲測
第七章 相關的代碼開發活動
7 1 數值演算法開發
7 2 代碼魯棒性測試
7 3 代碼效率測試
7 4 代碼確認操作
7 5 解驗證
7 6 代碼確認
7 7 軟體質量工程
第八章 代碼驗證操作範例
8 1 笛卡兒坐標中的Burgers方程(代碼1)
8 1 1 具有Dirichlet邊界條件的穩態解
8 1 2 具有Neumann和Dirichlet混合條件的穩態解
8 2 曲線坐標中的Burgers方程(代碼2)
8 2 1 穩態解
8 2 2 非穩態解
8 3 不可壓縮Navier-Stokes方程(代碼3)
8 4 可壓縮Navier-Stokes方程(代碼4)
第九章 進階主題
第十章 總結與結論
參考文獻
附錄A 其他偏微分方程代碼測試方法
附錄B 正推法的實現問題
附錄C 盲測結果
附錄D 多孔介質-自由流界面方程的人造解
前言/序言
本書的主題是如何驗證求解偏微分方程的計算機代碼。從廣義上講,「驗證」一詞是指,以令人信服的方式證明方程通過代碼得到正確地求解。本質上,驗證后的代碼不含任何導致計算出錯的編程漏洞。但更準確地說,本書中的代碼驗證指的是代碼精度階驗證,即證明代碼的觀測精度階與數值方法的理論精度階一致。
隨著計算機運行速度日益加快,求解微分方程的數值演算法能力愈發強大,以關鍵設計和預測為目的的活動對生產代碼的依賴性越來越高。因此,在計算科學和工程領域,生產代碼驗證至關重要。最初,代碼測試主要包括:對照簡化后的微分方程的解析解,對計算結果進行基準測試。基準測試適用於簡化方程只涉及常係數、簡單幾何構型、邊界條件和線性現象的情形。複雜物理現象的模擬會使代碼求解的微分方程愈加複雜,而基準測試無法檢驗代碼的全部功能,因而滿足不了需求。
本書詳細論述了一種可替代基準測試的方法,可作為代碼驗證的一種手段。這種替代方法的兩個基本特徵為:通過人造精確解方法(Method of Manufactured Exact Solutions,MMES),構造代碼求解的完整的一般微分方程的解析解;通過網格收斂研究,確定代碼的精度階。這一替代方法通常被稱為「人造解方法」。但我們認為這一命名並不充分,因為它忽略了替代驗證方法的第二項特徵,即用於確定精度階的網格收斂研究。我們建議將該法稱為「基於人造解方法的精度階驗證」(Order Verification via the Manufactured Solution Procedure,OVMSP)。
對於OVMSP,Patrick Roache最近在其著作《計算科學與工程領域的驗證和確認》(Verification and Validation in Computational Science and Engineering)第二章和第三章中進行了詳細闡述。我們在此強烈推薦該書。相較於本書,它對廣義上的計算流體力學術語(驗證、確認和不確定度等)之間的區別展開了更加深入的論述,還列出了計算科學和工程領域中各種代碼驗證問題的典型案例。
比較而言,本書認為合乎邏輯地關注計算科學中的確認等過程是理所當然的,但須在驗證過程之後單獨論述。代碼確認是一個複雜的主題,本書未將其列入討論範疇,以便對代碼驗證予以詳細闡述。為避免讀者對OVM-SP的概念有所混淆,我們需要對代碼驗證進行全面、系統的介紹。本書既以令人信服的論據向讀者闡釋了OVMSP的優點,又為OVMSP的實現過程提供了詳盡的程序性指南。
本書可用作「驗證和確認」短期課程教材,供計算科學和工程專業學生或生產涉及微分方程的模擬軟體的研發人員使用。如果牢固掌握了本科階段的偏微分方程和常微分方程數值方法以及計算機編程,並在流體流動、熱科學或結構力學等應用學科方面具備一定知識,學習本書時將不會感到吃力。
本書包含十章、參考文獻和四個附錄。
第一章介紹了代碼驗證的背景、簡史,並就此展開非正式討論。第二章對微分方程這一主題進行深入討論,重點介紹了術語和一些基本概念,以便在後續章節中展開論述。此章還討論了微分方程離散方法以及代碼中的數值演算法思想。第三章介紹了驗證代碼精度階的詳細步驟,可供從業人員使用。為了對現代的複雜代碼進行驗證,必須確保覆蓋所有需要驗證的選項。因此,第四章討論了驗證程序背景下與覆蓋測試套件設計相關的問題。此外,代碼驗證還需用到微分方程的「精確」解。為此,第五章對人造精確解方法展開了論述。詳細闡述代碼精度階驗證流程后,第六章總結了代碼精度階驗證的主要優點。第七章討論了解驗證、代碼確認等相關主題,以此闡明此類活動與代碼驗證的區別。第八章展示了代碼精度階驗證操作的四個示例,涉及求解Burgers方程或Navier-Stokes方程的代碼,這些示例呈現了精度階驗證的某些細節。第九章討論了代碼精度階驗證中的高級主題,包括無階近似、特殊阻尼項和非光滑解。第十章對代碼精度階驗證流程進行了總結,並提出了一些結論性意見。